プログラミングROS Pythonによるロボットアプリケーション開発

ロボットハードウェア不要。PythonとLinuxで学ぶ!

このような方におすすめ

ロボット開発者、Pepper開発者、Pythonプログラマー、教育関係者、情報系の学生
  • 著者Morgan Quigley、Brian Gerkey、William D Smart/河田 卓志/松田 晃一、福地 正樹、由谷 哲夫
  • 定価4,180 (本体3,800 円+税)
  • B5変 480頁 2017/12発行
  • ISBN978-4-87311-809-3
  • 定価
  • ポイント0
  • 数量

※本体価格は変更される場合があります。
※通常2〜3営業日以内で発送いたします。
※取寄が可能な場合もございますのでお問合せください。

  • 概要
  • 主要目次
  • 詳細目次

ROS(ロボットオペレーティングシステム)の解説書。ROSのコンセプトから、Python 2.7によるロボットプログラミングの具体的な方法、インストールやデバック時のヒントまで、ROSユーザーが知っておくべき基本を網羅的に解説します。単純なテレオペボットから始めて、認識・行動制御を伴うより複雑な自律型ロボットへと段階的に学んでいくので、読者は学習を進めながら理解を深めることができます。各章が典型的なユースケースシナリオに対するレシピ(具体的なコード、図、解説)として構成されているため、自分自身の目的や興味に合わせて読み進めることも可能です。日本語版では、PepperプログラミングやROS2のアーキテクチャーについての解説を巻末付録として収録しました。

https://www.ohmsha.co.jp/book/9784873118093/

    
目次
まえがき

第I部 基礎

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 まとめ

第II部 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 まとめ

第III部 知覚と振る舞い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 まとめ

第IV部 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 まとめ

第V部 ヒントとこつ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チュートリアル