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

Book description

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

Table of contents

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

Product information

  • Title: プログラミングROS ―Pythonによるロボットアプリケーション開発
  • Author(s): Morgan Quigley, Brian Gerkey, William D. Smart, 河田 卓志, 松田 晃一, 福地 正樹, 由谷 哲夫
  • Release date: December 2017
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873118093

You might also like

book

詳説 イーサネット 第2版

by Charles E. Spurgeon, Joann Zimmerman, 三浦 史光, 豊沢 聡

イーサネット技術についての解説書。本書では、ファーストイーサネットやギガビットイーサネットなどの従来技術だけでなく、10ギガ、40ギガ、100ギガビットなど最新のイーサネット仕様を詳しく解説します。また、全二重イーサネット、オートネゴシエーション、Power over Ethernet、Energy Efficient Ethernet、構造化ケーブリングシステム、スイッチを用いたネットワークの設計、ネットワーク管理、ネットワークのトラブルシューティングのテクニックなども解説します。ネットワークの設計、監視、保守、障害時対応までを網羅し、信頼性の高いネットワークの構築を支援します。

book

行動を変えるデザイン ―心理学と行動経済学をプロダクトデザインに活用する

by Stephen Wendel, 武山 政直, 相島 雅樹, 反中 望, 松村 草也

深津貴之氏推薦!「行動経済学、データ分析、サービス設計のエッセンスが高度に統合された行動変容デザインの良書です」 本書は、行動経済学と心理学をもとに、人々の行動、日常習慣を変える“行動変容”を促すプロダクトをデザインするための書籍です。主にヘルスケア(健康管理)、金融(資産管理)など、これまでITプロダクト(サービス、アプリなど)がなかなか使われてこなかった分野を対象に、ユーザーがやりたいと思っていたものの実行できなかった行動の実現を助けるプロダクトを作り出すための、実践的な視点や知識を提供します。

book

ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化

by Ilya Grigorik, 和田 祐一郎/株式会社プログラミングシステム社

現代のアプリケーションエンジニアは、UIやデータ処理、開発言語、プラットフォームの仕様や癖だけでなく、サーバやネットワークについても、上から下まで、表から裏まで広く知ることを求められます。本書は「ブラウザ」に関連し、インターネットで使用されるさまざまなネットワーク技術をまとめたものです。HTTP/2.0やWebRTCなどの最新技術、WebSocketやXMLHttpRequestなどのブラウザAPI、そしてそれらの土台となるTCPやUDPやトランスポート層についてまでを幅広くカバーします。また改善前後の性能・速さを可能な限り具体化し、それぞれの場面においてのパフォーマンス改善幅を示します。

book

初めてのGraphQL ―Webサービスを作って学ぶ新世代API

by Eve Porcello, Alex Banks, 尾崎 沙耶, あんどうやすし

今日では多くのWebサービスがRESTアーキテクチャスタイルで実装されています。RESTは2000年にフィールディングの論文で提唱された後に爆発的に普及し洗練されてきました。一方で、本書で紹介するGraphQLは2015年にFacebookによって公開されたRESTとは異なるアプローチのアーキテクチャです。GraphQLの最大の特徴はクエリ言語を用いてデータを操作する点です。クエリ言語の表現力の高さによりクライアントは本当に必要なリクエストを送ることができます。本書ではGraphQLの概要とGraphQLを用いたWebサービスの開発方法を実装例に沿って紹介します。認証やファイルアップロードといった実践的なトピックまで踏み込んだGraphQLの実用的な入門書です。