Post

改訂新版「ROS2ではじめよう 次世代ロボットプログラミング」本書の構成と目次

実に5年ぶりの改訂となる改訂新版「ROS2ではじめよう 次世代ロボットプログラミング」が9/19に発売されます。それを記念して、9/11からROS2本の紹介記事を連続投稿しています。

  1. 改訂新版「ROS2ではじめよう 次世代ロボットプログラミング」編集協力者
  2. 初版「ROS2ではじめよう 次世代ロボットプログラミング」ROS 1ツアー章公開
  3. 初版「ROS2ではじめよう 次世代ロボットプログラミング」ROS 2移行章公開

今回は改訂新版の構成と目次を紹介します。

第2版に寄せて

はじめに

ROSの概要を紹介します。

1章 ROSの歴史

ROSを知らない方に向けて、ROS 2の前身であるROS 1の歴史とROS 2への変遷を見ていきます。ROS 2は内部アーキテクチャがROS 1とは大きく異なります。その理由も本章で明らかにしていきます。

  • 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章 ROS 2の開発環境セットアップ

ROS 2の開発環境をセットアップします。OSには一番セットアップが簡単なUbuntu 24.04を採用して進めますが、ROS 2はDockerやWindows、一部macOSにも対応しています。Ubuntu以外へのインストール手順は付録をご覧ください。

  • 2-1 Ubuntu 24.04 のインストール
  • 2-1-1 その他のOSへのインストール
  • 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の基本機能

ROS 2が備えるメッセージ通信機能であるトピック、サービス、アクション、パラメータを一通り紹介します。また、C++言語を使った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の応用機能

ROS 1からROS 2への進化で新たに追加、改善された機能を紹介します。これらの概念を理解し使いこなせるようになれば、ROS 2を習得したといっても良いのではないでしょうか。特にコンポーネント指向プログラミングを習得すれば、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

本書ではソースコード例のプログラミング言語にC++17を用いています。ROS 2の公式クライアントライブラリとして最も盛んにメンテナンスされているのが、C++版のクライアントライブラリ rclcpp だからです。それ以外のプログラミング言語の中から、本章ではスクリプト言語Python 3のクライアントライブラリ rclpy を取り上げ、プログラミング方法を説明します。

  • 5-1 ROS 2 のクライアントライブラリ
  • 5-1-1 C++以外のクライアントライブラリ
  • 5-2 パッケージ構成
  • 5-2-1 setup.pyの書き方
  • 5-2-2 メッセージ,サービス,アクション定義ファイルの格納場所
  • 5-3 トピック実装
  • 5-3-1 コンポーネント実行
  • 5-4 サービス実装
  • 5-5 アクション実装

6章 ROS 2に対応したツール/パッケージ

ROS 2は正式リリースから6年以上が経過し、主要なROS 1パッケージは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エコシステム

ROSはその利便性、汎用性の高さからロボットソフトウェア以外の開発にも広がりを見せています。ROSの開発団体が開発主導するGazebo、Open-RMFだけでなく、第三者が開発する主要なソフトウェア群も紹介します。

  • 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ロボットプログラミング

ROS 2プログラミングの実践編として、Intel RealSense、Preferred Roboticsカチャカ、ROBOTIS OpenMANIPULATORを使ったロボットアプリケーションの開発を行います。OpenCV、PCL、Nav2、MoveItなどの有名パッケージの実践的な使い方も学べます。

  • 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マニピュレーションの実行

おわりに

本書に込めた熱い気持ちを最後にまとめました。本書を手にとって最後まで読み進んでいただいた読者のみなさんと、本書を執筆するにあたってご協力いただいたさまざまな方々への感謝の言葉も綴っています。

  • 事前アンケート
  • 本を書くということ
  • 謝辞
  • 第1版読者のみなさんへ
  • 第1版編集協力者へ
  • 第2版編集協力者へ
  • 家族へ

付録

本文で扱わなかったUbuntu 24.04以外のOSへのセットアップ手順として、Windows 11とWSL 2を使ったセットアップ手順とDockerを使ったセットアップ手順を扱います。サンプルコードのライセンス条項も記載します。

  • 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章のサンプルコードのライセンス条項

索引

改訂新版 ROS2ではじめよう 次世代ロボットプログラミング

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.