プログラミングROS

―Pythonによるロボットアプリケーション開発

[cover photo]
TOPICS
Programming , Python
発行年月日
PRINT LENGTH
480
ISBN
978-4-87311-809-3
原書
Programming Robots with ROS
FORMAT
Print PDF EPUB
Ebook
4,180円
Ebookを購入する
Print
4,180円

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

関連ファイル

目次

目次
まえがき

第Ⅰ部 基礎

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チュートリアル