ROS(ロボットオペレーティングシステム)の解説書。ROSのコンセプトから、Python 2.7によるロボットプログラミングの具体的な方法、インストールやデバッグ時のヒントまで、ROSユーザーが知っておくべき基本を網羅的に解説します。単純なテレオペボットから始めて、認識・行動制御を伴うより複雑な自律型ロボットへと段階的に学んでいくので、読者は学習を進めながら理解を深めることができます。各章が典型的なユースケースシナリオに対するレシピ(具体的なコード、図、解説)として構成されているため、自分自身の目的や興味に合わせて読み進めることも可能です。日本語版では、PepperプログラミングとROS2アーキテクチャーについての解説を巻末付録として収録しました。
プログラミングROS
―Pythonによるロボットアプリケーション開発
Morgan Quigley、Brian Gerkey、William D. Smart 著、河田 卓志 監訳、松田 晃一、福地 正樹、由谷 哲夫 訳
- TOPICS
- Programming , Python
- 発行年月日
- 2017年12月
- PRINT LENGTH
- 480
- ISBN
- 978-4-87311-809-3
- 原書
- Programming Robots with ROS
- FORMAT
- Print PDF EPUB
関連ファイル
目次
目次 まえがき 第Ⅰ部 基礎 1章 イントロダクション 1.1 歴史 1.2 哲学 1.3 インストール 1.4 まとめ 2章 準備 2.1 ROSグラフ 2.2 roscore 2.3 catkin、ワークスペース、ROSパッケージ 2.3.1 catkin 2.3.2 ワークスペース 2.3.3 ROSパッケージ 2.4 rosrun 2.5 名前、名前空間、リマッピング 2.6 roslaunch 2.7 Tabキー 2.8 tf:座標変換 2.8.1 姿勢、位置、向き 2.8.2 tf 2.9 まとめ 3章 トピック 3.1 トピックを配信する 3.1.1 すべてが期待どおりに動作していることを確認する 3.2 トピックを購読する 3.2.1 すべてが期待どおりに動作していることを確認する 3.3 ラッチトピック 3.4 独自のメッセージ型を定義する 3.4.1 新しいメッセージを定義する 3.4.2 独自の新しいメッセージを利用する 3.4.3 いつ新しいメッセージ型を作るべきか? 3.5 配信者と購読者を混合する 3.6 まとめ 4章 サービス 4.1 サービスを定義する 4.2 サービスを実装する 4.2.1 すべてが期待どおりに動作していることを確認する 4.2.2 サービスから値を返す他の方法 4.3 サービスを使用する 4.3.1 すべてが期待どおりに動作していることを確認する 4.3.2 別の方法でサービスを呼び出す 4.4 まとめ 5章 アクション 5.1 アクションを定義する 5.2 基礎的なアクションサーバーを実装する 5.2.1 すべてが期待どおりに動作していることを確認する 5.3 アクションを使用する 5.3.1 すべてが期待どおりに動作していることを確認する 5.4 より洗練されたアクションサーバーを実装する 5.5 より洗練されたアクションを使用する 5.5.1 すべてが期待どおりに動作していることを確認する 5.6 まとめ 6章 ロボットとシミュレーター 6.1 サブシステム 6.1.1 アクチュエーション:移動プラットフォーム 6.1.2 アクチュエーター:マニピュレーターアーム 6.1.3 センサー 6.1.4 コンピューティング 6.2 完成しているロボット 6.2.1 PR2 6.2.2 Fetch(フェッチ) 6.2.3 Robonaut2 6.2.4 TurtleBot(タートルボット) 6.3 シミュレーター 6.3.1 Stage 6.3.2 Gazebo 6.3.3 他のシミュレーター 6.4 まとめ 7章 Wander-bot(ワンダーボット) 7.1 パッケージを作成する 7.2 センサーデータを読む 7.3 センシングとアクチュエーション:Wander-bot! 7.4 まとめ 第Ⅱ部 ROSを使って動き回る 8章 Teleop-bot(テレオペボット) 8.1 開発パターン 8.2 キーボードドライバー 8.3 動作の生成 8.4 パラメーターサーバー 8.5 速度の増減 8.6 操縦しよう! 8.7 rviz 8.8 まとめ 9章 環境の地図を作る 9.1 ROSにおける地図 9.2 データをrosbagで記録する 9.3 地図を作る 9.4 地図サーバーを開始し、地図を見る 9.5 まとめ 10章 世界を動き回る 10.1 ロボットが地図のどこにいるかを推定する 10.1.1 良い初期位置を得る 10.1.2 裏では何が行われているか 10.1.3 よりよい初期姿勢を設定するためのヒント 10.2 ROSのナビゲーションスタックを使う 10.2.1 ROSナビゲーションスタック 10.2.2 rvizでのナビゲーション 10.2.3 内部で何が行われているか 10.3 コードによるナビゲーション 10.4 まとめ 11章 Chess-bot(チェスボット) 11.1 関節、リンク、機構(kinematic chain) 11.1.1 関節空間 11.1.2 逆運動学 11.2 成功への鍵 11.3 R2シミュレーターのインストールと実行 11.4 R2をコマンドラインから動かす 11.5 R2をチェスボードの上で動かす 11.6 手を操作する 11.7 チェスボードをモデル化する 11.8 有名なチェスのゲームを再現する 11.9 まとめ 第Ⅲ部 知覚と振る舞い197 12章 Follow-bot(フォローボット) 12.1 画像を取得する 12.2 線の検出 12.3 線の追跡 12.4 まとめ 13章 巡回 13.1 単純な巡回 13.2 ステートマシン 13.2.1 ROSのステートマシン 13.3 smachでステートマシンを定義する 13.3.1 もう少し具体的な例 13.3.2 手続き的にステートマシンを定義する 13.4 ステートマシンで巡回する 13.4.1 よりよい巡回方法 13.5 まとめ 14章 Stockroom-bot(ストックルームボット) 14.1 倉庫のシミュレーション 14.2 容器まで移動する 14.3 商品を持ち上げる 14.4 まとめ 第Ⅳ部 ROSに組み込む267 15章 新しいセンサーとアクチュエーター 15.1 新しいセンサーを追加する 15.1.1 (擬似)センサー 15.1.2 ROSのラッパーを設計する 15.1.3 設計1:トピックに測定値を定期的に送る 15.1.4 設計2:ストリーミングされた計測値をトピックに送る 15.1.5 設計3:ストリーミングされた計測値を固定周期で配信する 15.1.6 設計4:センサーの測定値を要求に応じて送る 15.2 新しいアクチュエーターを追加する 15.2.1 (擬似)アクチュエーター 15.2.2 ROSのラッパーの設計 15.2.3 設計1:連続的なアクチュエーション 15.2.4 設計2:不定期で瞬間的なアクチュエーション 15.2.5 設計3:不定期で、時間のかかるアクチュエーション 15.3 まとめ 16章 自作の移動ロボット 16.1 TortoiseBot(トータスボット) 16.2 ROSメッセージインタフェース 16.3 ハードウェアドライバー 16.4 ロボットのモデリング:URDF 16.5 Gazeboでのシミュレーション 16.6 まとめ 17章 移動ロボット:パート2 17.1 座標変換を確認する 17.2 レーザーセンサーを追加する 17.3 ナビゲーションスタックを設定する 17.4 rvizでロボットの位置を推定し命令する 17.5 まとめ 18章 ロボットアーム 18.1 CougarBot(クーガーボット) 18.2 ROSメッセージインタフェース 18.3 ハードウェアドライバー 18.4 ロボットをモデリングする:URDF 18.5 Gazeboでのシミュレーション 18.6 座標変換を確認する 18.7 MoveItを設定する 18.8 rvizを使ってゴールを送信する 18.9 まとめ 19章 ソフトウェアライブラリを利用する 19.1 ロボットに発話させる:pyttsx 19.1.1 アクションインタフェース 19.1.2 パラメーター 19.1.3 イベントループ 19.1.4 音声サーバー 19.1.5 音声クライアント 19.1.6 すべてが期待どおりに動作していることを確認する 19.2 まとめ 第Ⅴ部 ヒントとこつ371 20章 ツール 20.1 マスターとその仲間:roscore 20.2 パラメーター:rosparam 20.3 ファイルシステムをナビゲートする:roscd 20.4 ノードの起動:rosrun 20.5 複数のノードを起動する:roslaunch 20.6 たくさんのノードからなるシステムをテストする:rostest 20.7 内部の調査:rosnode、rostopic、rosmsg、rosservice、rossrv 20.8 まとめ 21章 ロボットの振る舞いをデバッグする 21.1 ログメッセージ:/rosoutとrqt_console 21.1.1 ログメッセージを生成する:/rosou 21.1.2 ロガーレベル 21.1.3 ログメッセージを読む:rqt_console 21.1.4 /rosoutと/rosout_agg 21.2 ノードとトピックとコネクション:rqt_graphとrosnode 21.2.1 グラフの可視化:rqt_graph 21.2.2 問題点:トピック名の不一致 21.2.3 問題点:トピックの型、またはチェックサムの不一致、またはその両方 21.2.4 問題点:間違ったネットワーク設定 21.3 センサー融合:rviz 21.4 データをプロットする:rqt_plot 21.5 データログと分析:rosbagとrqt_bag 21.5.1 データの記録と再生:rosbag 21.5.2 bagの可視化:rqt_bag 21.5.3 別のツールを使ったROSのbagの分析:rostopic echo -b 21.6 まとめ 22章 ROSコミュニティー:オンラインリソース 22.1 エチケット 22.2 ROS wiki 22.3 ROS Answers 22.4 トラッカー(バグと機能リクエスト) 22.5 メーリングリストとSIG 22.6 コードを見つけ共有する 22.7 まとめ 23章 ROSでC++を使う 23.1 いつC++(や他の言語)を使うべきか? 23.2 catkinでC++をビルドする 23.2.1 package.xml 23.2.2 CMakeLists.txt 23.2.3 catkin_make 23.3 PythonからC++に変換する(また、その逆をする) 23.3.1 簡単なノード 23.3.2 トピック 23.3.3 サービス 23.4 まとめ 付録A Pepperプログラミング A.1 開発プラットフォームとしてのPepper A.2 ROSとPepper A.3 Pepper実機をROSでコントロールする A.4 PepperをROSでプログラミング A.5 まとめ 付録B ROS2 B.1 なぜROS2が開発されているのか B.2 ROS/ROS2ターゲットの違い B.3 ROS2の特徴 B.3.1 複数ロボットへの対応 B.3.2 組み込みへの対応 B.3.3 通信ライブラリにDDSの採用 B.3.4 実時間システムへの対応 B.3.5 不安定なネットワークへの対応 B.3.6 システムの構築と構造化をパターン化 B.3.7 マルチプラットフォームへの対応 B.4 ROS/ROS2の比較 B.5 まとめ 訳者あとがき 索引 コラム目次 本書のサンプルコード 補講:ROS2チュートリアル