ROS 2 公式文書(英語) 日本語訳シリーズです。
本ブログの日本語翻訳版のトップページは以下のリンクを参照下さい。
ROS 2には、ROS 2システムの内部を確認するための一連のコマンドラインツールが含まれています。
使用方法
ツールの主なエントリポイントはコマンドros2
です。これには、ノード、トピック、サービスなどの一覧or詳細情報を表示(※introspect: 内省・内観だが、直訳してもしっくり来ないので少し冗長な表現にしている)して操作するための様々なサブコマンドがあります。
利用可能なすべてのサブコマンドを確認するには、次のコマンドを実行します。
ros2 --help
利用可能なサブコマンドの例は次の通りです。
- daemon: ROS デーモンの一覧or詳細表示・設定を行う
- launch: launch ファイルを実行する
- lifecycle: ノード・ライフサイクルの一覧表示・管理を行う
- msg:
msg
タイプの一覧or詳細表示を行う - node: ROS ノードの一覧or詳細表示を行う
- param: Introspect/configure あるノード上のパラメータの一覧or詳細表示・設定を行う
- pkg: ROS パッケージの一覧or詳細表示を行う
- run: ROS ノードを実行する
- security: セキュリティ設定を行う
- service: ROS サービスの一覧or詳細表示・呼び出しを行う
- srv:
srv
タイプの一覧or詳細表示・呼び出しを行う - topic: ROS トピックの一覧or詳細表示・パブリッシュを行う
サンプル
コマンドラインツールを使用して一般的な talker-listener のサンプルを作成するには、topic
サブコマンドを使用してトピックに関するメッセージをパブリッシュおよびエコーすることができます。
次のようにしてターミナルでメッセージをパブリッシュします。
$ ros2 topic pub /chatter std_msgs/String "data: Hello world" publisher: beginning loop publishing std_msgs.msg.String(data='Hello world') publishing std_msgs.msg.String(data='Hello world')
別のターミナルで受信したエコーメッセージは次のとおりです。
$ ros2 topic echo /chatter data: Hello world data: Hello world
裏で起きていること
ROS 2 では、分散検出プロセスを使用することでノードの相互接続を実現します。このプロセスは(ROS 1 の ROS Master のように)集中的な検出メカニズムを敢えて使用していないため、ROS ノードが ROS グラフ内の他の全ノードを発見するに時間がかかる可能性があります。このため、バックグラウンドで長時間実行されるデーモンがあり、ROS グラフに関する情報を格納して、クエリ(例:ノード名のリスト)に対する応答を速くします。
関連するコマンドラインツールが初めて使用されるときに、デーモンが自動的に起動されます。デーモンと情報をやりとりするためのその他のオプションについては、ros2 daemon --help
で確認できます。
実装
ros2
コマンドのソースコードは https://github.com/ros2/ros2cli から入手できます。
ros2
ツールは、プラグインを介して拡張できるフレームワークとして実装されています。例えば、sros2 パッケージは、それががインストールされている場合にros2
ツールによって自動的に検出されるセキュリティーサブコマンドを提供します。