解説対象
本記事では、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 |
Discussion