改訂新版 ROS 2ではじめよう 次世代ロボットプログラミング
〜ロボットアプリケーション開発のための基礎から実践まで

書籍の概要

この本の概要

本書は,2019年に刊行した「ROS2 ではじめよう 次世代ロボットプログラミング」の改訂版です。ロボット開発のためのミドルウェアROS 2の普及に伴い,改訂版ではROS 2に焦点を当てて,基本概念から応用,実践的な使用方法までを幅広くカバーしています。ROS 2の歴史と特徴,開発環境のセットアップ,基本機能と応用機能,C++やPythonを使ったプログラミング方法,主要なツールやパッケージの紹介,ROS 2のエコシステムなどについて解説します。さらに,実際のロボットハードウェアを使用した実践的なプログラミング例も紹介します。

本書は,ロボット開発者やエンジニア,研究者,教育関係者,そしてロボットビジネスに関わる人々を対象としています。ROS 2を使ったロボット開発の可能性を探り,製品開発につなげたい読者にとって有用な情報源となるでしょう。読者がROS 2の理解を深め,革新的なロボットアプリケーションの開発に取り組むきっかけになるような書籍となることを目指します。

こんな方におすすめ

  • ロボットの開発に興味のあるエンジニア
  • ROS2からロボットプログラミングをはじめる方

本書のサンプル

本書の一部ページを,PDFで確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

  • 第2版に寄せて
  • はじめに

第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-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 の基本機能

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-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に対応したツール/パッケージ

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

著者プロフィール

近藤豊(こんどうゆたか)

株式会社ティアフォーエンジニア

仕事の合間にROSCon JPの運営委員とROSCon本家のプログラム委員を華麗にこなす自称ROSエヴァンジェリスト。2021年までの6年間はROS Japan Users Group主宰も兼務。趣味で始めたROSプログラミングが高じて,仕事でもROSを使ったロボットプログラミングに携わる。2013年,奈良先端科学技術大学院大学博士後期課程を修了,博士(工学)。同年,株式会社カワダロボティクスに入社,開発部主任として製品化プロジェクトをリード。2018年より株式会社Preferred Networksにてパーソナルロボットプロジェクトに携わり,2021年からは株式会社Preferred Roboticsに転籍して家庭用自律移動ロボット「カチャカ」の製品化に従事。2024年より現職。高専時代から現在に至るまで,人とロボットに何ができるかに興味を抱き続ける。アカウント名のyoutalkは本名yutakaのもじり。1985年生まれ。大阪府大阪市出身。2児の父。子どもの数だけ改版が進むかも?