📘

ROS2の用語集

2024/02/04に公開

解説対象

本記事では、ROS2を理解する上で欠かせない用語についてまとめています。

用語

(ROS特有でない)プログラミング用語

  • 下記は、ROS2を勉強するにあたって必要な前提知識にあたるプログラミング用語です
  • ROS2特有の用語でないのですが、ROS2の視点でみたときの補足説明を加えておきます
用語 意味 ROS2における要点
パッケージ(package) ある一群のプログラム及び各種リソースファイルを配布のために一纏めにしたもの ROS/ROS2の世界では、単にパッケージと言えばそれはROSパッケージのことです。ROSパッケージとは、ROSやROS2で提供されるビルドシステム(=catkinやcolcon)で作成されたパッケージのことです。ROS/ROS2では、多数のパッケージを組み合わせて動かすことでロボットシステムを構築します。一般にROS用のパッケージとROS2用のパッケージに互換性はありませんが、ROS2用のパッケージでもROS2パッケージと呼ばずに単にROSパッケージと呼ぶことがあります(文脈で読み取ってください)。パッケージ内には実行可能プログラムが含まれることが多いですが、実行可能プログラムを含まずライブラリやリソースファイルのみを含むパッケージも存在します(メッセージ型定義用のパッケージやURDF定義用のパッケージ等)
プログラム コンピュータに行わせる処理が記述されているソフトウェア。狭義には人間が読めないバイナリ形式で記述されているもの(=コンパイル済みプログラム)をさすが、広義には人間が読めるテキスト形式で記述されているもの(=スクリプト)も含む ROS/ROS2の世界では、プログラムをスクリプトとして(pythonを使用した場合)も、コンパイル済みプログラムとして(C++を使用した場合)も、どちらでも記述可能であり開発者が任意に選択できる。プログラムは、単独で実行可能かという点で、実行可能プログラム・ライブラリの2種類に分かれる
実行可能プログラム(executable) 狭義には(シェル上等で)直接実行できるプログラムのことだが、広義には指定のプログラム(インタプリタ等)上で実行できるようエントリーポイントを持つスクリプトも含む。他のプログラムから部品として呼び出されるライブラリとは区別されますが、スクリプト形式の場合についてはexecutableと考えるかlibraryと考えるかの区別は曖昧です ROS2の世界では、c++でプログラムを記述しCMakeLists.txtでadd_executableによって指定しビルドすることでexecutableが生成されます。また、pythonでプログラムを記述しsetup.pyでentry_pointsによって指定することでros2 runコマンド上で実行できる実行可能なスクリプトとなり、これもexecutableと呼びます。ROS/ROS2の世界では、多数のexecutableを実行し並列動作させることでロボットシステムを構築します。executableはパッケージに含まれて配布されます。ROS2ではlaunchファイルをpythonで記述可能であり、python形式のlaunchファイルは広義の実行可能なプログラムと考えることも可能ですが、ROS2ではlaunchファイルをexecutableとは呼びません(launchファイルはリソースファイルの1種と考えます)
ライブラリ(library) 他のプログラムから部品として呼び出される処理を記述したプログラムのこと。実行可能プログラムではないプログラムのこと。スクリプト形式の場合についてはexecutableと考えるかlibraryと考えるかの区別は曖昧です ROS2の世界では、c++でプログラムを記述しCMakeLists.txtでadd_libraryによって指定しビルドすることでlibraryが生成されます。ROS2ではlaunchファイルをpythonで記述可能であり、python形式のlaunchファイルはライブラリと考えることも可能ですが、ROS2ではlaunchファイルをlibraryとは呼びません(launchファイルはリソースファイルの1種と考えます)
リソースファイル プログラムから読み取られ利用される情報を記載したファイル。テキスト形式のファイル・バイナリ形式のファイルの両方がある。スクリプトはプログラムと看做す場合、リソースファイルと看做す場合のどちらも存在する ROS/ROS2の世界で特有なリソースファイルとして、メッセージ定義ファイル、URDF、launchファイル、ノードパラメータ設定ファイル等が存在します。その他、画像ファイル・3Dモデルなどもパッケージに含まれるリソースファイルになります

ROS特有のファイル

用語 意味 ファイル形式
ROSメッセージ定義ファイル ROSトピックで情報を送受信する際の型を定義するファイル。ROSサービスやROSアクションで情報を送受信する場合に複合型が必要な場合にも使用する テキスト(ROS独自フォーマット)
ROSサービス定義ファイル ROSサービスで情報を送受信する際の型を定義するファイル。単純型(bool/string/byte/整数型/浮動小数点型/及びそれらの配列)のみを使用する場合はサービス定義ファイルのみで完結して定義できる。複合型(単純型及び複合型を子要素として持つ型)を使用したい場合は合わせて複合型を定義するROSメッセージ定義ファイルも必要となる テキスト(ROS独自フォーマット)
ROSアクション定義ファイル ROSアクションで情報を送受信する際の型を定義するファイル。単純型(bool/string/byte/整数型/浮動小数点型/及びそれらの配列)のみを使用する場合はROSアクション定義ファイルのみで完結して定義できる。複合型(単純型及び複合型を子要素として持つ型)を使用したい場合は合わせて複合型を定義するROSメッセージ定義ファイルも必要となる テキスト形式(ROS独自フォーマット)
URDF ロボットのジョイントやリンク等の構造を記述したファイル。間接の状態値からリンクの位置姿勢を求めること(運動学)に使用する。反対にリンクの位置姿勢から関節の状態値を求めること(逆運動学)にも使用する。加えてros2_controlで使用するためのstate interfaceやcommand interfaceの定義の提供、gazeboで使用する物理パラメータの提供を行うためにも使用する。 xml
SRDF moveitで使用する情報を記述するxml形式のファイル xml
SDF gazeboで使用するシミュレーション空間を記述するxml形式のファイル xml
launchファイル プログラムを決まった手順で立ち上げるための処理を記述したファイル。基本的にはロボットシステムを構成するexecutableを起動するために使用するが、任意のプログラムの起動にも使用できる。launchファイルを用意するとros2 launchコマンドでlaunchファイルに記述した処理を実行できるようになる。 python
yaml
xml
ノードパラメータ設定ファイル(configファイル) 個々のROSノード毎もしくは複数のROSノード共通のノードパラメータの初期値を記述したファイル yaml

ROSノードの基本用語

用語 意味 解説記事
ROSノード ROS1やROS2上で実行する処理を提供する最も基本的なオブジェクト(論理処理単位)。ROSノードクラスをインスタンス化して生成する コンセプト
ROSノードクラス ROSノードを生成する為のクラス実装でありクライアント言語(c++やpython等)で実装される。標準ROSノードクラスとカスタムROSノードクラスに分かれる コンセプト
標準ROSノードクラス Nodeクラス及びLifecycleNodeクラスのこと コンセプト
カスタムROSノードクラス 独自に実装したNode派生クラスもしくはLifecycleNode派生クラスのこと コンセプト
ノード名 システム上に存在するROSノードを一意に識別する為の完全修飾ノード名を生成する為に使用される文字列 ROSノード編2
ノード名前空間 システム上に存在するROSノードを一意に識別する為の完全修飾ノード名を生成する為に使用される文字列。主に同じノード名のROSノードが同時に存在できるようにする為に使用する。ノード名前空間は完全修飾トピック名等のインタフェースを一意に識別する為にも使用される ROSノード編2
ノードサブ名前空間 ROSノードが保有するROSインタフェースの名前をグループ化する為に使用される文字列 ROSノード編2
完全修飾ノード名 システム上に存在するROSノードを一意に識別する文字列。「ノード名前空間+/+ノード名」が完全修飾ノード名になり、一意である必要がある。必ず/で始まる。 ROSノード編2
オリジナルノード ノードサブ名前空間を持たないROSノード ROSノード編2
サブノード ノードサブ名前空間を持つROSノード ROSノード編2

ROSノードの初期化関連用語

用語 意味 解説記事
ROS引数 ROSノードの初期化を制御する為の値。ノードパラメータの初期値の設定やremapルールの指定ができる。同じexecutableで生成される全ノードで共通のグローバルROS引数(=コマンドラインROS引数)と、各ノード毎のローカルROS引数の2種類がある。グローバルROS引数は、ros2 runコマンドで--ros-argsと記載した後に指定するコマンドラインROS引数から生成される。 コンセプト
グローバルデフォルトコンテキスト ROSノードの初期化に使用される情報を管理するオブジェクトでありプロセス中の全ROSノード間で共有される。global_argumentsフィールドにグローバルROS引数を持つ。 ROSノード編5
remapルール ノード名/ノード名前空間/トピック名/サービス名を書き換える規則を記述した情報。ROS引数の1つとしても指定できる ROSノード編3

特殊ROSノード

用語 意味 解説記事
launch_rosノード launchシステムによって自動的に起動されるシステムROSノード。各ライフサイクルノードのライフサイクルイベントの変化をトリガーとしてlaunch処理を行うための連携を行うために存在する launch編5
コントローラー管理ノード ros2_controlのcontroller managerの機能を持つROSノード。controller managerは管理下にある各ROSコントローラー及びHWコンポーネントを既定の周期でループ実行することで複数の装置を同期的に実行する処理を提供する TBD
コントローラーノード ros2_controlのコントローラー管理ノード(controller manager)により生成される各ROSコントローラーを表すライフサイクルを持つROSノード。コントローラーノードを起動する時に渡したいノードパラメータは、コントローラー管理ノードを起動する時に渡すノードパラメータを介して間接的に指定できる。 TBD

ROSノードの内部構造用語

用語 意味 解説記事
rclノード ROSノードの内部構造でありremapの処理など基本機能を提供している部分。クライアント言語(c++,python等)に依存しないcで実装されている ROSノード編1
rmwノード rclノードの内部構造でありDDSという通信規格を用いてROSノード間で互いに通信を行えるようにする機能を提供している部分。クライアント言語(c++,python等)に依存しないcで実装されている ROSノード編1

ROSノードのインタフェース用語

用語 意味
トピック通信 publish-subscribe方式の通信。通信相手がプロセス外にいる場合、UDP(もしくはTCP)で通信を行い、通信相手がプロセス内にいる場合はプロセス内通信(共有メモリ等)が行われる。ROSトピックにおける通信に使用される他、ROSアクションにおけるフィードバックの通信でも使用される
サービス通信 request-reply方式で行われる通信。通信相手がプロセス外にいる場合、UDP(もしくはTCP)で通信を行い、通信相手がプロセス内にいる場合はプロセス内通信(共有メモリ等)が行われる。ROSサービスにおける通信に使用される他、ROSアクションにおけるゴール設定/結果取得の通信やノードパラメータの読み書きの通信でも使用される
用語 意味 解説記事
ROSトピック トピック通信を用いてROSメッセージをpublish-subscribe方式でやり取りするための仕組み。ROSメッセージを出力するパブリッシャー、ROSメッセージを受け取るサブスクリプションの間で、多対多の通信が可能。サブスクリプション側は非同期的に実行する(=ROSメッセージが来たタイミングで動作する) TBD
ROSサービス サービス通信を用いて要求をrequest-reply方式で実行するための仕組み。要求を行うサービスクライアント、要求に応答するサービスサーバーの間で、多対1の通信が可能。サービスクライアント側は通常同期的に実行する(=要求に対する応答が来るまで待ち合わせる) TBD
ROSアクション サービス通信を用いて要求をrequest-reply方式で指示した後に、その要求状態が実現されるまでの間の状態通知のROSメッセージをトピック通信を用いてpublish-subscribe方式で知らせ、最終的な結果をサービス通信を用いてrequest-reply方式で得るための仕組み。要求を行うアクションクライアント、要求に応答するアクションサーバーの間で、多対1の通信が可能。アクションクライアント側は通常非同期的に実行する(=結果が来るまで待ち合わせない)。実体としては、ROSトピックとROSサービスの仕組み使用して実現される。 TBD
ノードパラメータ ROSノードの動作を変更する為の設定値。ROSノードを生成するexecutableのコマンドライン引数として初期値が指定される。またノードパラメータの読み書きがROSサービスの仕組み使用して実現される。 ROSノード編4
commandインタフェース TBD TBD
stateインタフェース TBD TBD

トピック関連用語

用語 意味 解説記事
パブリッシャー ROSノードが保有する「特定のROSトピックへROSメッセージを送信(publish)する」仕組み。まず事前準備として、どのようなROSメッセージ型でどのROSトピック(トピック名)に送信するかを定義しておく。その後実際にROSメッセージ送信時に、事前に定義したROSメッセージ型を満たす具体的なROSメッセージを生成し送信する TBD
サブスクリプション ROSノードが保有する「特定のROSトピックからROSメッセージを受信する」仕組み。まず事前準備として、どのようなROSメッセージ型でどのROSトピック(トピック名)から受信するか、受信時にどのような処理を行うか(コールバック関数)を定義しておく。その後実際にROSメッセージ受信時に、ROSメッセージがROSトピックにpublishされたタイミングで事前に定義したコールベック関数にROSメッセージが渡され実行される TBD
トピック名 ROSトピックを区別する為に設定する名称。絶対指定(/で始まる)した場合、トピック名が完全修飾トピック名になる。相対指定(/以外で始まる)した場合、「ノード名前空間+/+トピック名」が完全修飾トピック名になる。 TBD
完全修飾トピック名 ROSトピックを区別する名称。システム中で一意である必要がある。必ず/で始まる TBD

サービス関連用語

用語 意味 解説記事
サービスクライアント TBD TBD
サービスサーバー TBD TBD
サービス名 TBD TBD
完全修飾サービス名 TBD TBD

アクション関連用語

用語 意味 解説記事
アクションクライアント TBD TBD
アクションサーバー TBD TBD
アクション名 TBD TBD
GitHubで編集を提案

Discussion