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