概要
本書は,2019年に刊行した「ROS2 ではじめよう 次世代ロボットプログラミング」の改訂版です。ロボット開発のためのミドルウェアROS 2の普及に伴い,改訂版ではROS 2に焦点を当てて,基本概念から応用,実践的な使用方法までを幅広くカバーしています。ROS 2の歴史と特徴,開発環境のセットアップ,基本機能と応用機能,C++やPythonを使ったプログラミング方法,主要なツールやパッケージの紹介,ROS 2のエコシステムなどについて解説します。さらに,実際のロボットハードウェアを使用した実践的なプログラミング例も紹介します。
本書は,ロボット開発者やエンジニア,研究者,教育関係者,そしてロボットビジネスに関わる人々を対象としています。ROS 2を使ったロボット開発の可能性を探り,製品開発につなげたい読者にとって有用な情報源となるでしょう。読者がROS 2の理解を深め,革新的なロボットアプリケーションの開発に取り組むきっかけになるような書籍となることを目指します。
こんな方におすすめ
- ロボットの開発に興味のあるエンジニア
- ROS2からロボットプログラミングをはじめる方
目次
第1章 ROS の歴史
1-1 ROSの起源
1-2 OSRFからOSRAへ
1-3 ROS 2の誕生
1-4 ROS 1とROS 2の違い
- 1-4-1 ロボットの同時利用数
- 1-4-2 計算資源
- 1-4-3 リアルタイム制御
- 1-4-4 ネットワーク品質
- 1-4-5 プログラミング形式
- 1-4-6 アプリケーション
1-5 内部アーキテクチャの変化
- 1-5-1 ROS 1の内部アーキテクチャ
- 1-5-2 ROS 2の内部アーキテクチャ
- 1-5-3 rcl:クライアントライブラリAPI
- 1-5-4 rmw:通信ミドルウェアAPI
1-6 Data Distribution Service(DDS)
- 1-6-1 なぜDDSになったか?
- 1-6-2 DDSとは何か?
- 1-6-3 ベンダーとライセンス
- 1-6-4 DDSのインタフェース記述言語
- 1-6-5 DDSの通信プロトコルRTPS(Real-Time Publish-Subscribe)
1-7 DDS以外の通信プロトコルの選択肢Zenoh
1-8 ROS 1からROS 2への移行状況
第2章 開発環境セットアップ
2-1 Ubuntu 24.04 のインストール
2-2 ROS 2 のインストール
- 2-2-1 ROS 2ディストリビューションの選択
- 2-2-2 ロケールのセットアップ
- 2-2-3 Ubuntu Universeリポジトリの有効化
- 2-2-4 APTソースリストの設定
- 2-2-5 ROS 2パッケージのインストール
- 2-2-6 環境設定
- 2-2-7 動作確認
2-3 サンプルコードのセットアップ
第3章 ROS 2 の基本機能
3-1 基本機能で学ぶこと
3-2 ROS 2フロントエンドツールros2
- 3-2-1 ros2の使い方
- 3-2-2 ros2サブコマンドの実行例
- 3-2-3 ノード発見デーモン
3-3 ROS 2パッケージビルドツールcolcon
- 3-3-1 colconの使い方
- 3-3-2 colconオプション機能の便利ショートカット集 colcon mixin
- 3-3-3 その他のROS 2公式ツール
3-4 トピック
- 3-4-1 プロセス間通信
- 3-4-2 プロセス内通信
- 3-4-3 コンピュータ間通信
3-5 サービス
- 3-5-1 サーバ実装
- 3-5-2 同期/非同期クライアント実装
3-6 アクション
- 3-6-1 アクションの定義ファイルと名前空間
- 3-6-2 フィボナッチ数列のアクション実装
3-7 パラメータ
- 3-7-1 パラメータ取得・設定メソッド
- 3-7-2 パラメータ設定イベントのコールバック
- 3-7-3 generate_prameter_libraryを使ったパラメータ宣言,取得,検証
第4章 ROS 2の応用機能
4-1 応用機能で学ぶこと
4-2 コンポーネント指向プログラミング
- 4-2-1 コンポーネント対応版talkerの実装
- 4-2-2 コンポーネント対応版listenerの実装
- 4-2-3 package.xmlとCMakeLists.txtの更新
- 4-2-4 コンポーネントの動的読み込み
- 4-2-5 コンポーネントの解放
4-3 Launchシステム
- 4-3-1 talker / listenerノードのlaunchファイル
- 4-3-2 パラメータを使うlaunchファイル
- 4-3-3 パラメータファイルを使うlaunchファイル
- 4-3-4 XML形式のlaunchファイル
4-4 ライフサイクル
- 4-4-1 ライフサイクルの状態遷移
- 4-4-2 主要状態
- 4-4-3 中間状態
- 4-4-4 ライフサイクル対応talker実装
- 4-4-5 ライフサイクル対応listener実装
- 4-4-6 外部ノードからのライフサイクル制御
- 4-4-7 動作確認
4-5 Quality of Service(QoS)
- 4-5-1 QoSポリシー
- 4-5-2 QoSプロファイル
- 4-5-3 QoS互換性
- 4-5-4 通常環境下でのトピック送受信例
- 4-5-5 パケットロス環境下でのトピック送受信例
4-6 RMW実装の変更
- 4-6-1 RTI製Connextのインストール
- 4-6-2 ノード実行時のDDSベンダー実装の変更
4-7 セキュリティ
- 4-7-1 ノードの認証
- 4-7-2 アクセス制御
- 4-7-3 コンピュータ間のアクセス制御
第5章 Pythonクライアントライブラリrclpy
5-1 ROS 2 のクライアントライブラリ
5-2 パッケージ構成
- 5-2-1 setup.pyの書き方
- 5-2-2 メッセージ,サービス,アクション定義ファイルの格納場所
5-3 トピック実装
5-4 サービス実装
5-5 アクション実装
第6章 ROS 2に対応したツール/パッケージ
6-1 ROS 2への移行完了
6-2 データ記録・再生ツールrosbag2
- 6-2-1 トピック,サービスの記録
- 6-2-2 bagファイルの再生
6-3 データ可視化ツールRViz2
6-4 ナビゲーションパッケージNav2
6-5 動作計画パッケージMoveIt
6-6 ロボット制御パッケージros2_control
- 6-6-1 ROBOTIS DYNAMIXELサーボモータのros2_control対応
第7章 ROS 2エコシステム
7-1 広がるROS 2 のエコシステム
7-2 ロボットシミュレータGazebo
7-3 フリート管理ソフトウェアOpen-RMF
7-4 ROS 2 Webアプリケーション作成のためのRobot Web Tools
- 7-4-1 WebSocketブリッジサーバーrosbridge_suite
- 7-4-2 JavaScriptクライアントライブラリroslibjs
- 7-4-3 ブラウザ可視化ツールROSBoard
7-5 組み込み向けROS 2実装mROS 2
7-6 自動運転ソフトウェアAutoware
7-7 GPUアクセラレーションNVIDIA Isaac ROS
- 7-7-1 DNN Inference Nodes
- 7-7-2 Isaac ROS Visual SLAM
- 7-7-3 Isaac ROS Nvblox
第8章 実践ROS 2ロボットプログラミング
8-1 センサーとロボットを使ったROS 2プログラミング
8-2 Intel RealSense D455を使ったOpenCV/PCLプログラミング
- 8-2-1 Intel RealSense D455のセットアップ
- 8-2-2 OpenCVとcv_bridgeを使った顔画像検出
- 8-2-3 PCLとpcl_conversionsを使った点群サンプリング
8-3 Preferred Robotics カチャカを使ったNav2ナビゲーション
- 8-3-1 カチャカROS 2ブリッジ
- 8-3-2 kachaka_grpc_ros2_bridgeの起動
- 8-3-3 カチャカを使ったNav2ナビゲーション
8-4 ROBOTIS OpenMANIPULATOR-Xを使ったMoveItマニピュレーション
- 8-4-1 MoveItセットアップアシスタントによるMoveIt構成ファイルの自動生成
- 8-4-2 MoveItマニピュレーションの実行
付録
A-1 Windows 11とWSL 2での開発環境セットアップ
A-2 Dockerコンテナでの開発環境セットアップ
- A-2-1 Dockerのインストール
- A-2-2 ROS 2イメージのダウンロード
- A-2-3 動作確認
- A-2-4 rockerを使ったGUIサポート
A-3 サンプルコードのライセンス条項
- A-3-1 3章のサンプルコードのライセンス条項
- A-3-2 4章のサンプルコードのライセンス条項
- A-3-3 5章のサンプルコードのライセンス条項
サポート
正誤表
P.211 ふりがなの誤記についてのお詫び
(2024年9月11日更新)
「改訂新版 ROS 2ではじめよう 次世代ロボットプログラミング」の編集にご協力いただいた片岡大哉(かたおかまさや)様,岸俊道(きししゅんどう)様のお名前のふりがなについて,誤って記載してしまいましたこと,深くお詫び申し上げます。細心の注意を払って記載すべきところ,確認不足によりこのような事態となりましたこと,誠に申し訳ございません。同様の誤りがないよう,確認を徹底してまいります。
※電子版では修正済みです。