2014年10月17日金曜日

3. Linux(Ubuntu)オペレーティングシステムとROSのバージョン

サンプルの実行環境は以下の通りです。
RvizやGazeboの表示系に不具合が報告されている仮想マシン(VMware)をあえて使っています。
ガンバレば何とかなるもんです。

仮想マシン(VMware)に関して

VMware上のROSの動作に関しては、いくつかの問題点が指摘されています。
・RVizやGazeboなどを動かした時のグラフィックスの不具合
グラフィックスの扱いは、ROSだけでなくVMwareでは度々問題になるようです。
もし、グラフィックスがうまく動かないようなら以下のコマンドを試してみてください。
$ sudo apt-get install mesa-utils
経験的にこのコマンドでうまくいく例が報告されています。

・Kinect、Xtionが動かない
私のところでも仮想マシンではKinectが動きませんでした。
今のところ、お手上げ状態です。


「毎日がロボット勉強会」では以下の環境で動作の確認を行っています。


ハードウェア

Mac mini (Late 2012) 

    2.6 GHz Intel Core i7, 16GB 1600 MHz DDR3

MacBook Pro (Retina, 15-inch, Late 2013) 
   2.6 GHzIntel Core i7, 16GB 1600 MHz DDR3

ソフトウェア
OS X 10.9
VMware Fusion Ver. 6.0.5(2209127)
→Kinectを使うサンプルはVMwareは使わない
Ubuntu-12.04.3LTS 64bit(英語版)
ROS Hydro

実機ロボット
Turtlebot(Roomba Create ベース)
Turtlebot2 (Kobukiベース)

Ubuntu-12.04.3LTS 64bit + ROS Hydro

この組み合わせは安定して動くので気に入って使ってます。

2014年10月7日火曜日

2. 実機ロボットとシミュレーション

【シミュレータ】
ROSのシミュレータと言えば、Gazeboが一般的ですがこの本では大半の章でArbotiX というマイナーなシミュレータを使っています。
ArbotiXはGazeboのようにセンサの動的なシミュレーションは苦手ですが、とても軽く動くのでVol.1の前半にあるような経路探索のサンプルなどには十分です。
本格的な動力学のシミュレーションが必要な場合には、Vol.2にGazeboの紹介もあるので比べてみてください。

【実機ロボット】
やはりロボットは実機を動かさないと面白くありません。
ということで、この本では実機を動かすことにも多くのページを割いています。
この本の例題で使われている実機ロボットはTurtleBotとPi Robotです。
TurtleBotはベースがRommbaCreateでKinect for Xbox 360が付いています。RoombaCreateもKinect for Xbox 360も既に販売中止になっているので、これからロボットを購入しようと思っても難しかもしれません。

もう一台は、Pi Robotでこれは著者らが中心になって開発しているロボットで日本での入手は難しいんじゃないでしょうか?
私はPi RobotはYoutubeでしか見たことありません。

ということで、私の研究室にはTurtleBotが5台ほどあるので実機での動作には困らないのですが、このブログの読者???の皆さんの為に、本書のサンプルをKobukiベースのTurtleBot2でも動くようにしながら本を読んでいくことにします。
本書のすべてのサンプルがTurtleBot2で動くかは保証できませんが…


こんな感じでTurtleBot2がArbotiX上で動いています。


TurtleBot2の購入はこちらへどうぞ→→

ROSでOpenCVを使う (C++編)

ROSとOpenCVの間で画像形式を変換するcv_bridgeパッケージをC++で使ってみます。
チュートリアルのページを参照してください。
Ubuntu12.04+ROS Hydroで動作を確認しています。

準備

画像の入力にはcv_cameraを使います。cv_cameraを使ったことが無い場合は以下のようにインストールして下さい。
$ sudo apt-get install ros-hydro-cv-camera
image_viewで画像が表示されるか確認してください。
$ rosrun cv_camera cv_camera_node
$ rosrun image_view image_view image:=/cv_camera/image_raw
cv_camera では /cv_camera/image_raw にカラー画像を出力しています。

新しいパッケージの作成

cv_bridgeをテストするための新しいパッケージ(cvTest)を以下のように作成します。
$ cd ~/catkin_ws/src
$ catkin_create_pkg cvTest sensor_msgs cv_bridge roscpp rospy std_msgs image_transport
次に、チュートリアルのページにあるソースコードをコピペして、~/catkin_ws/src/cvTest/src/image_converter.cpp  を作って下さい。
ここで、image_converter.cpp を見ると、以下のように /camera/image_raw からカラー画像を読み込むようになっています。
22     image_sub_ = it_.subscribe("/camera/image_raw", 1, 
23       &ImageConverter::imageCb, this);
cv_camera では /cv_camera/image_raw にカラー画像を出力しているので、このままでは画像データが正しく伝わらないので、以下の二つの方法のどちらかを行って下さい。

(1)image_converter.cpp を修正する

image_converter.cpp を以下のように修正してください。
22     image_sub_ = it_.subscribe("/cv_camera/image_raw", 1, 
23       &ImageConverter::imageCb, this);

(2)launchファイルでremapする

~/catkin_wa/src/cvTest/launch/image_converter.lauchを以下の内容で作成します。

<?xml version="1.0"?>
<launch>
 <remap from="/camera/image_raw" to="/cv_camera/image_raw"/>
 <node name="image_converter" pkg="CvTest" type="image_converter" />
</launch>
remap タグにより、変換を行ないます。

CMakeLists.txtの修正

~/catkin_ws/src/cvTest/CMakeLists.txt の最後に以下の4行を加えて下さい。

find_package( OpenCV REQUIRED )
include_directories(  ${catkin_INCLUDE_DIRS}  ${OpenCV_INCLUDE_DIRS} )
add_executable(image_converter src/image_converter.cpp)
target_link_libraries(image_converter ${OpenCV_LIBRARIES} ${catkin_LIBRARIES}  )

パッケージをmakeして、実行する。

$ cd ~/catkin_ws
$ catkin_make
エラーが無ければ、以下の手順で実行します。
$ roscore
別のターミナルウィンドウで
$ rosrun cv_camera cv_camera_node
さらに別のターミナルウィンドウで
image_converter.cppを修正した場合は、
$ rosrun cvTest image_converter
launchファイルでremapした場合は、
$ roslaunch cvTest image_converter.launch
次のような画面が表示されればOKです。
Webカメラの画像にOpenCVで合成した、「赤い円」が画面の左上に表示されています。


2014年10月5日日曜日

1. この本の目的

ROS by Exampleでは以下の話題をPythonを用いた実例を紹介しています。


  • ROSのインストール(概要)
  • 移動ロボットの制御
    • モータードライバの制御
    • 車輪のエンコーダ
    • 地図作成
    • 経路探索
  • レーザレンジファインダやKinectのような距離カメラを使ったSLAM
  • 音声認識や音声合成を用いた、ロボットの制御
  • 顔認識や物体追跡のような画像処理
  • ロボットビジョン
  • サーボモータの制御



ROSの仕組に関しては、本家のチュートリアル
A Gentle Introduction to ROS Paperback – October 1, 2013 by Jason M. O'Kane参考にしてください。

2014年10月4日土曜日

ROS by Example Vol.2の目次

Vol.2の目次です。

ROS by Example Vol.2
目次
 まえがき
 印刷バージョンとPDFバージョンの違い

1. この本の目的

2. サンプルプログラム(the ros-by-example)のインストール

3. まとまったタスクを実行する
3.1 バッテリー残量のシミュレーション
3.2 サンプルを実行するための一般的なセットアップ
3.3 ROS Actionsの紹介
3.4 Patrol Bot のサンプル
3.5 Pythonスクリプトによる Patrol Bot プログラム
3.6 Pythonスクリプトだけで書くことの問題点
3.7 SMACH あるいは Behavior Trees?
3.8 SMACH: 状態遷移でタスクを記述する
3.8.1 SMACH の紹介
3.8.2 SMACHで四角形を巡回するタスクを書く
3.8.3 ArbotiX シミュレータによる巡回タスクのテスト
3.8.4 Accessing results from a SimpleActionState
3.8.5 SMACH による繰り返しタスク
3.8.6 状態を遷移させるコマンド
3.8.7 ROSのトピックとサービスの連携
3.8.8 コールバックとイントロスペクション(プログラム自身の状態を解析する)
3.8.9  巡回タスクにバッテリー監視を加える
3.8.10 バッテリー監視
3.8.11 Passing user data between states and state machines
3.8.12 サブタスクと階層的な状態遷移マシン
3.8.13 部屋掃除ロボットのタスクにバッテリー監視を加える
3.8.14 状態遷移の可視化
3.9 Behavior Trees
3.9.1 Behavior Trees か 階層的な状態遷移マシンか?
3.9.2 behavior treesの特徴
3.9.3 behavior treeの構築
3.9.4 セレクターとシークエンス
3.9.5 decorators (meta-behaviors)による行動のカスタマイズ
3.10 Behavior Treesのプログラミング
3.10.1 pi_trees ライブラリのインストール
3.10.2 pi_trees ライブライの基本機能
3.10.3 ROS対応のbehavior tree クラス
3.10.4 behavior treesによる巡回ロボット
3.10.5 behavior treesによる部屋掃除ロボット
3.10.6 並列タスク
3.10.7 タスクの追加と削除

4. 独自ロボットのURDF モデルの作成
4.1 ベースと車輪から始める
4.1.1 robot_state_publisherノードと joint_state_publisher ノード
4.1.2 The base URDF/Xacro ファイル
4.1.3 Alternatives to using the /base_footprint frame
4.1.4 モデルにベースを追加する
4.1.5 Viewing the robot's transform tree
4.1.6 ベースをメッシュデータでモデリング
4.2 メッシュデータを簡略化する
4.3 上半身の追加
4.3.1 上半身のモデリング
4.3.2 上半身をベースに加える
4.3.3 上半身をメッシュデータでモデルング
4.3.4 メッシュ形式の上半身を台車に加える
4.4 Measure, Calculate and Tweak
4.5 カメラを追加する
4.5.1 カメラの設置位置
4.5.2 カメラのモデリング
4.5.3 カメラを上半身に加える
4.5.4 Viewing the transform tree with torso and camera
4.5.5 カメラをメッシュ形式でモデリング
4.5.6 KinectのかわりにXtion Proを使う
4.6 レーザレンジファインダ(あるいは別のセンサ)を加える
4.6.1 レーザレンジファインダのモデリング
4.6.2 ベースにレーザレンジファインダ(あるいは別のセンサ)を加える
4.6.3 レーザノードの起動ファイルを設定する
4.7 パンチルトを頭に付ける
4.7.1 KinectのかわりにXtion Proを使う
4.7.2 パンチルトする頭部のモデリング
4.7.3 回転角度の図式化
4.7.4 Pi Robotにおけるパンチルト頭部
4.7.5 Pi Robotにおいて、KinectのかわりにXtion Proを使う
4.8 一本あるいは二本の腕を加える
4.8.1 一本目の腕の追加
4.8.2 腕のモデリング
4.8.3 グリッパーの追加
4.8.4 二本目の腕の追加
4.8.5 腕用のサーボモータやブラケットをメッシュデータでモデリング
4.9 Box Robotに遠隔操作用上半身を加える
4.10 Pi Robotに遠隔操作用上半身を加える
4.11 テーブルトップ型の一本腕Pi Robot
4.12 自分でモデリングしたロボットをArbotiX シミュレータでテストする
4.12.1 Box Robotのシミュレーション
4.12.2 Pi Robotのシミュレーション
4.13 独自ロボットの記述ファイルの作成
4.13.1 rosbuildを使う方法
4.13.2 catkinを使う方法
4.13.3 bx2_description packageをコピーして使う方法
4.13.4 テスト用起動ファイル(launch file)の作成

5. Dynamixel サーボモータの制御(その2)
5.1 ArbotiX パッケージのインストール
5.2 ArbotiX ノードの起動
5.3 ArbotiX 設定ファイル
5.4 シミュレーションモードで ArbotiX 関節制御のテスト
5.5 リアルサーボモードで Arbotix 関節制御のテスト
5.6 全てのサーボを脱力化する
5.7 全てのサーボの有効化・無効化

6. ロボットの診断
6.1 ロボットの状態表示
6.2 状態監視システムの設定
6.3 Dynamixel サーボモータの温度監視
6.3.1 パンチルト台用サーボモータの監視
6.3.2 /diagnostics トピックからのメッセージの表示
6.3.3 /diagnostics トピックを関してサーボモータを保護する
6.4 ラップトップPCのバッテリー監視
6.5 独自の監視メッセージの作成
6.6 他のハードウェアの監視

7. 動的にROSの構成を変更する
7.1 ノードにパラメータを追加する
7.1.1 .cfg ファイルの作成
7.1.2 .cfg ファイルを実行形式に
7.1.3 CMakeLists.txt ファイルの修正
7.1.4 パッケージのビルド
7.2 バッテリーシミュレーションノードの再構成の例
7.3 ROSノードの動的再構成の例
7.4 コマンドラインからの動的再構成

8. mux や yocsによるトピックの多重化
8.1 mux トピックを使う、起動ファイルの例
8.2 TurtleBotシミュレーションでのmuxのテスト
8.3 mux サービスによる入力のスイッチ
8.4 A ROS Node to Prioritize mux Inputs
8.5 Yujin Robot社製のYOCSコントローラ
8.5.1 入力ソースを追加する

9. 3次元での頭部追跡
9.1 仮想的な3次元ターゲットの追跡
9.2 座標の追跡
9.3 3次元頭部追跡ノード
9.3.1 仮想的あるいは実際の頭部追跡
9.3.2 目標をカメラ座標系にマップする
9.4 実際のサーボモータを使った頭部追跡
9.4.1 実際のサーボで仮想の目標を追跡する
9.4.2 実際のサーボで実際の目標を追跡する
9.4.3 nearest_cloud.py ノードとその起動ファイル

10. AR タグの認識と追跡
10.1 ar_track_alvar パッケージのインストールとテスト
10.1.1 ARタグの作り方
10.1.2 ARタグを作って、印刷する
10.1.3 カメラドライバーと ar_track_alvar ノードの起動
10.1.4 マーカー検出のテスト
10.1.5 /ar_pose_marker トピックの解説
10.1.6 RVizでマーカを表示する
10.2 プログラムからARタグの姿勢を得る
10.2.1 ar_tags_cog.py Pythonスクリプト
10.2.2 パンチルトヘッドでARタグを追跡する
10.3 Marker Bundlesによる複数タグの追跡
10.4 移動ロボットによるARタグの追跡
10.4.1 TurtleBotでARタグ追跡スクリプトを実行する
10.5 練習問題:ARタグを使った自己位置同定

11. MoveIt!によるアームの制御
11.1 腕の付いた実機ロボットが必要ですか?
11.2 アームの自由度
11.3 関節のタイプ
11.4 関節の軌跡とその制御
11.5 アームの順運動学と逆運動学
11.6 逆運動学の数値解と解析解
11.7 MoveIt! のアーキテクチャ
11.8 MoveIt! のインストール
11.9 静的 URDF モデルの作成
11.10 MoveIt! セットアップ
11.10.1 ロボットのURDF モデルをロードする
11.10.2 collision matrixの生成
11.10.3 base_odom virtual jointの追加
11.10.4 right arm planning groupの追加
11.10.5 right gripper planning groupの追加
11.10.6 ロボットの位置・姿勢を決める
11.10.7 手先の位置・姿勢を決める
11.10.8 passive jointsを決める
11.10.9 設定ファイルを作成する
11.11 MoveIt! セットアップによる設定ファイルの生成
11.11.1 The SRDF file (robot_name.srdf)
11.11.2 The fake_controllers.yaml file
11.11.3 The joint_limits.yaml file
11.11.4 The kinematics.yaml file
11.12 The move_group Node and Launch File
11.13 デモモードで MoveIt! をテストする
11.13.1 the Motion Planning プラグインに探索モードを加える
11.13.2 再びセットアップを行う
11.14 コマンドラインからMoveIt! をテストする
11.15 関節やグリッパの位置・姿勢を決める
11.16 ArbotiX Joint Trajectory Action Controllers
11.16.1 ArbotiX joint trajectory action controllers をシミュレーションでテストする
11.16.2 ArbotiX joint trajectory controllers を実機でテストする
11.17 MoveIt! Joint Controllersの設定
11.17.1 controllers.yaml ファイルの作成
11.17.2 controller manager launch ファイルの作成
11.18 The MoveIt! のAPI
11.19 順運動学: 関節角空間での動作生成
11.20 逆運動学: 直交座標系での動作生成
11.21 ビジュアルターゲットの把持計画
11.22 生成される軌跡の制約を設定する
11.22.1 直交座標系でのパスの生成
11.22.2 他の軌跡の制約を設定する
11.23 アームの動作速度の調整
11.24 可動範囲に障害物を設置してみる
11.25 ロボットにオブジェクトやツールを付けてみる
11.26 ピック&プレース
11.27 センサを追加する
11.28 MoveIt!で実機アームを動かす
11.28.1 実機アームの起動ファイルの作成
11.28.2 起動ファイルの実行
11.28.3 実機アームの順運動学
11.28.4 実機アームの逆運動学
11.28.5 実機アームの直交座標系での動作
11.28.6 実機アームでのピック&プレース
11.28.7 ビジュアルターゲットの把持計画
11.29 高速な独自アルゴリズもの逆運動学プラグインの作成

12. Gazeboによるシミュレーション
12.1 Gazeboのシミュレーション
12.2 ハードウェア・グラフィック・アクセラレータ
12.3 Gazebo パッケージのインストール
12.4 Kobuki パッケージのインストール
12.5 UBR-1 用ファイルの準備
12.6 Gazebo GUIの使用
12.7 Gazebo 1.9のバグ:「モデルが無い…」
12.8 KobukiをGazeboでテストする
12.8.1 センサデータの取得
12.8.2 Kobukiを安全に動かす
12.8.3 Volume 1で習った、nav_square.py Pythonスクリプトの実行
12.9 他の世界ファイルやロボットの利用
12.10 UBR-1 をGazeboで使う
12.10.1 UBR-1 軌跡
12.10.2 MoveIt!でUBR-1を動かす
12.11 UBR-1 Perception Pipelineを使ったピック&プレース
12.11.1 距離カメラの制限
12.11.2 デモ
12.11.3 real_pick_and_place.py Pythonスクリプトの解説
12.12 Gazebo Headless と RVizのを動かす

13. Rosbridge: Web GUIでロボットを操作する
13.1 rosbridge パッケージのインストール
13.2 mjpeg_sever パッケージのインストール
13.3 シンプルなWebサーバ (mini-httpd)のインストール
13.4 mini-httpd, rosbridge and mjpeg_serverの起動
13.5 簡単な rosbridge HTML/Javascript GUI
13.6 シミュレーションTurtleBotのWebGUIでの操作
13.7 実機TurtleBotのWebGUIでの操作
13.8 ネットワーク越しのマシンによるWebGUIでの操作
13.9 ブラウザでのデバッグ
13.10 簡単なGUIの解説
13.10.1 HTMLの書き方: simple_gui.html
13.10.2 JavaScript の書き方: simple_gui.js
13.11 jQuery, jqWidgets や KineticJSを使った応用
13.12 Rosbridge のまとめ

Appendix: USBデバイスのプラグアンドプレイ
13.13 Adding yourself to the dialout Group
13.14 Determining the Serial Number of a Device
13.15 UDEV Rules
13.16 Testing a UDEV Rule
13.17 Using a UDEV Device Name ina ROS Configuration File

2014年10月3日金曜日

ROS by Example Vol.1の目次

第一巻の目次です。

ROS by Example Vol.1
目次
 まえがき
 印刷バージョンとPDFバージョンの違い
 ROS Groovy版からの変更点

1. この本の目的

2. 実機ロボットとシミュレーション
2.1 Gazebo, Stage と ArbotiX シミュレータ
2.2 TurtleBot, Maxwell, Pi Robot4の紹介

3. Linux(Ubuntu)オペレーティングシステムとROSのバージョン
3.1 Ubuntuのインストール
3.2 Linuxの簡単な入門
3.3 UbuntuやROSのバージョンアップ

4. ROSの概要
4.1 インストール
4.2 インストールの実際
4.3 CatkinによるROSパッケージの作成
4.4 Catkin Workspaceの作成
4.5 Catkin Workspaceの初期化
4.6 catkin パッケージのリビルド
4.7 catkin と rosbuild
4.8 ROS公式ページのチュートリアル
4.9 RViz: 強力な可視化ツール
4.10 ROSパラメータ
4.11 rqt_reconfigure によるROSパラメータの動的な変更
4.12 実機ロボットと制御用PCとのネットワーク
 4.12.1 時刻の同期
 4.12.2 Zeroconf(ゼロ・コンフィギュレーション・ネットワーキング)による設定
 4.12.3 接続の確認
 4.12.4 環境変数、ROS_MASTER_URI と ROS_HOSTNAME の設定
 4.12.5 新しいコンソールを開く
 4.12.6 複数コンピュータでのROSノードの実行
 4.12.7 インターネットを介した接続
4.13 ROSのおさらい
4.14 ROSアプリケーションとは?
4.15 SVN, Git, and Mercurialによるパッケージのインストール
 4.15.1 SVN
 4.15.2 Git
 4.15.3 Mercurial
4.16 ROSパッケージの削除
4.17 サードパーティ製ROSパッケージの見つけ方
 4.17.1 ROS Wikiから探す
 4.17.2 roslocate コマンドで検索する
 4.17.3 ROS Software Indexで見つける
 4.17.4 Google検索で見つける
 4.18 ROSに関する更なるヘルプ

5. サンプルプログラム(the ros-by-example)のインストール
5.1 必要なパッケージのインストール
5.2 Hydro版 ros-by-example レポジトリ
 5.2.1 Electric あるいは Fuerteからのアップデート
 5.2.2 Groovyからのアプデート
 5.2.3 Hydro版 rbx1 リポジトリ
5.3 この本に記載のソースコードに関して

6. Arbotix シミュレータのインストール
6.1 シミュレータのインストール
6.2 シミュレータのテスト
6.3 独自ロボットをシミュレータで試す

7. Mobile Baseの制御
7.1 単位系および座標系
7.2 モーションコントロール
 7.2.1 モータ, 車輪, エンコーダ
 7.2.2 モータのコントローラとドライバ
 7.2.3 コントローラ
 7.2.4 move_base ROS パッケージによるFrame-Base Motion
 7.2.5 gmapping と amcl パッケージによるSLAM
 7.2.6 セマンティックゴール Semantic Goals
 7.2.7 まとめ
7.3 Twistメッセージによるロボットの移動
 7.3.1 Twist メッセージの例
 7.3.2 RVizによるロボットの可視化
7.4 オドメトリのキャリブレーション
 7.4.1 並進方向のキャリブレーション
 7.4.2 回転方向のキャリブレーション
7.5 Twistメッセージを実機ロボットに送る
7.6 ROSノードからTwistメッセージの発信する
 7.6.1 時間あるいは速度により移動距離や回転角度を求める
 7.6.2 ArbotiX シミュレータによるTimed Out-and-Back動作
 7.6.3 Timed Out-and-Back のPython スクリプト
 7.6.4 実機ロボットによるTimed Out and Back動作
7.7 私はどこにいるのか?オドメトリを使った距離移動
7.8 オドメトリを使った Out and Back
 7.8.1 シミュレータによるオドメトリを使った Out and Back
 7.8.2 実機によるオドメトリを使った Out and Back
 7.8.3 オドメトリを使った Out-and-Back のPythonスクリプト
 7.8.4 /odom トピックか /odom フレームか?
7.9 オドメトリを使った四角形に沿った移動
 7.9.1 シミュレータによる四角形に沿った移動
 7.9.2 実機ロボットによる四角形に沿った移動
 7.9.3 nav_square.py Pythonスクリプト
 7.9.4 デッドレコニングの問題点
7.10 ロボットを操縦する
 7.10.1 キーボートを使った操縦
 7.10.2 ゲームパッドを使った操縦
 7.10.3 ArbotiX コントール GUI
 7.10.4 Interactive MarkersによるTurtleBotの操縦
 7.10.5 オリジナルの操縦ノードを書く

8. ナビゲーション、経路探索とSLAM
8.1 move_baseを使った経路探索と障害物回避
 8.1.1 move_baseを使ったナビゲーション目的地の指定方法
 8.1.2 経路探索のパラメータの設定
  8.1.2.1 base_local_planner_params.yaml
  8.1.2.2 costmap_common_params.yaml
  8.1.2.3 global_costmap_params.yaml
  8.1.2.4 local_costmap_params.yaml
8.2 ArbotiX シミュレータによる move_base のテスト
 8.2.1 RViz上で目的地をクリックして移動させる
 8.2.2 RVizにナビゲーションの際の情報を表示させる
 8.2.3 move_baseを使った四角形に沿った移動
 8.2.4 仮想障害物の回避
 8.2.5 障害物が存在する場合に手動でゴールを設定する
8.3 move_base を実機で動かす
 8.3.1 障害物が無い場合の move_base のテスト
 8.3.2 仮想的な距離カメラのデータによる障害物回避
8.4 gmapping パッケージによる地図構築
 8.4.1 レーザスキャナか距離カメラか?
 8.4.2 スキャンデータの測定と記録
 8.4.3 地図の作成
 8.4.4 予め保存したでーたを使った地図作成
 8.4.5 作成済みの地図を拡張したり、修正したりできるのか?
8.5 地図とamcl(Adaptive Monte Carlo Localization)によるナビゲーションと自己位置同定
 8.5.1 仮想的な自己位置同定による amclのテスト
 8.5.2 実機ロボットによる amcl
 8.5.3 完全自律によるナビゲーション
 8.5.4 シミュレーションによるナビゲーションの実行
 8.5.5 ナビゲーションテストのPythonスクリプトの解説
 8.5.6 実機によるナビゲーションテストの実行
 8.5.7 次にすること?

9. 音声認識と合成
9.1 音声認識システム PocketSphinx のインストール
9.2 PocketSphinx による音声認識のテスト
9.3 認識できる語彙を増やす
9.4 A 音声で指示するナビゲーションのPythonスクリプト
 9.4.1 シミュレータによる音声指示のテスト
 9.4.2 実機による音声指示のテスト
 9.5 音声合成システムFestival のインストールとテスト
 9.5.1 ROSノード経由の音声合成
 9.5.2 talkback.py Pythonスクリプトのテスト

10. ロボットビジョン
10.1 OpenCV, OpenNI and PCL
10.2 カメラの解像度に関して
10.3 カメラドライバーのインストール
 10.3.1 OpenNI用ドライバーのインストール
 10.3.2 Webカメラ用ドライバーのインストール
 10.3.3 Kinect あるいは Xtion カメラのテスト
 10.3.4 USB Webカメラのテスト
10.4 OpenCV の Ubuntu Linuxへのインストール
10.5 ROSとOpenCVのブリッジ: cv_bridge パッケージ
10.6 ros2opencv2.py ユーティリティ
10.7 録画された動画の処理
10.8 OpenCV 画像処理ライブラリ
 10.8.1 顔検出
 10.8.2 GoodFeaturesToTrackを使った特徴点の検出
 10.8.3 オプティカルフローを使った特徴点の追跡
 10.8.4 顔追跡プログラムの改良
 10.8.5 特徴点の追加と削除
 10.8.6 CamShiftアルゴリズムによる色追跡
10.9 OpenNIとスケルトントラッキング
 10.9.1 OpenNIドライバのインストールの確認
 10.9.2 RVizによるスケルトンの表示
 10.9.3 ユーザプログラムからスケルトン情報を取得する
10.10 三次元ポイントクラウド
 10.10.1 PassThrough フィルター
 10.10.2 複数のPassThrough フィルターの合成
 10.10.3 VoxelGrid フィルター

11. ビジョンを使った台車の移動
11.1 カメラ座標系に関して
11.2 物体追跡
 11.2.1 rqt_plotによる物体追跡のテスト
 11.2.2 シミュレーションによる物体追跡
 11.2.3 物体追跡プログラムの解説
 11.2.4 実機による物体追跡
11.3 物体追従
 11.3.1 物体追跡プログラムに距離情報を追加する
 11.3.2 シミュレーションによる物体追従
 11.3.3 実機による物体追従

11.4 人物追跡
 11.4.1 シミュレーションによる人物追跡のテスト
 11.4.2 人物追跡プログラムの解説
 11.4.3 TurtleBotを使った人物追跡
 11.4.4 ポイントクラウドを使った人物追跡

12. Dynamixelのサーボモータの制御
12.1 TurtleBot にパン・チルトヘッドを取り付ける
12.2 Dynamixelサーボモータのコントローラ
12.3 Dynamixelのサーボモータに関して
12.4 ROSにおける Dynamixelサーボモータの制御パッケージ
12.5 JointState メッセージの解説
12.6 Joint Positionの速度制御とトルク制御
 12.6.1 サーボモータの位置制御
 12.6.2 サーボモータの速度制御
 12.6.3 サーボモータのトルク制御
12.7 USB2Dynamixel を使った接続
12.8 サーボモータのIDの設定
12.9 dynamixel_controllersの設定と実行
 12.9.1 dynamixel_controllers の設定ファイル
 12.9.2 dynamixel_controllers のLaunch(起動)ファイル
12.10 サーボモータ制御のテスト
 12.10.1 Controllersの開始
 12.10.2 RVizによるモニタリング
 12.10.3 Controller のトピックやJoint Statesの監視
 12.10.4 Controller サービスの監視
 12.10.5 サーボモータの位置、スピードおよびトルクの設定
 12.10.6 relax_all_servos.py Pythonスクリプト
12.11 ビジュアルターゲットの追跡
 12.11.1 顔の追跡
 12.11.2 頭の追跡
 12.11.3 色物体の追跡
 12.11.4 選択した物体の追跡
12.12 頭の追跡アプリケーションの改良版

13. 次にすべきことは何?

2014年10月2日木曜日

印刷版かPDF版か?

もちろん、断然PDF版をお勧めします。
コマンドもコピペで実行できるし、リンクもクリックするだけで参照できます。
PDFだとメモも書き込めるので、便利です。
PDF版をオンラインで買うのが値段も安いしね。

サポートページもあります。

ということで、皆さんオンラインでPDF版を買いましょう。

宣伝用のビデオもありました。
変な音楽が流れるけど、我慢して下さい…

2014年10月1日水曜日

ROS by Exampleの一人輪講を始めます

ロボットのミドルウェアの一方の雄(もう一方は日本発のRTミドルウェア)である、ROSを勉強してみようと思います。

ROSのホームページにあるチュートリアルは非常に詳しく書かれており、一部ですが日本語訳もあります。
しかし、詳しく書かれている一方で、入門にはハードルが高い気もしています。理解したとにROSのページを見ると非常に良くわかるのですが、初めて読んだ時はチンプンカンプンの記述が結構あります。

で、ROS入門用の参考書を探したのですが、もちろん日本語で書かれた書籍はありません。
そこで、アメリカのAmazonで検索してみると、さすがROSの本場、使えそうな本を何冊か見つけました。

ROSの仕組みを詳しく知りたい人は必携です。ROSのホームページのチュートリアルを解りやすく解説した本です。
この本はPDF版がネットで入手できるので、是非ダウンロードして読んで下さい。
パッケージ、ノード、トピック、メッセージ、パラメータなどのROSの用語が具体的に説明されています。
最新版のディストリビューションであるIndigoに対応しています。






C++によるサンプルと使って実際にロボットを動かす例題が豊富です。
が、しかし・・・
サポートしてるディストリビューションが古い(Fuerte)なのと、catkin ではなくrosbuild を使っています。
Learning ROS for Robotics Programming のサンプルをrosbuild からcatkin に変更しようとしている先人もいるので、C++を使いたい方はこの本で頑張るのがいいと思います。








で、次に見つけたのがROS by Exampleです。




ROS by Exampleはとてもよく書けている本です。
最新のHydroに対応しており、Pythonで書かれたサンプルも豊富です。ロボットベンチャーのPi Robotのメンバーが執筆していて、実際に移動ロボットを動かすことに主題を置いています。

標準の環境は
・Ubuntu 12.04
・ROSのバージョンはHydro
・動作確認はTurtlebot(KOBUKIではない、Roombaのタイプ)


ということで、Vol.1とVol.2の2分冊で、それぞれかなりボリュームのある本ですが、最初から順番にサンプルプログラムを実行しながら読んでいこことにします。

実行する環境は
・Ubuntu 12.04(VMWareをMacで動かしている)
→KinectがVMWareで動か来きませんでした。
・ROSのバージョンはHydro
・実機動作の確認はTurtlebot(KOBUKIではない、Roombaのタイプ)
・一部、KOBUKIベースのTurtlebot2でも動作を確認しています。

ROS by Exampleは此処で買えます。PDF版がコマンドのコピペ等が可能なのでお勧めです。
 サポートサイトもあります