ROS2ノードを理解する(ROS2公式チュートリアル翻訳)

ROS2の公式チュートリアルを翻訳していきます。今回翻訳したページはこちら

https://docs.ros.org/en/foxy/Tutorials/Understanding-ROS2-Nodes.html#id4

背景

1.ROS2グラフ


ROSグラフとは、データを処理するROS2エレメントのネットワークです。ROSグラフはすべての実行可能な単位とそのコネクションも含有します。

2.ROS2のノード


ROSの各ノードは一つのモジュールの目的に責任をおっています(例えば、あるノードは車輪のモータを制御し、他のノードはレーザーレンジファインダーを制御する、というようなもの) 各ノードはトピック、サービス、アクション、パラメータによってお互いにデータを送受信します。

画像1


フルロボットシステムは多くのノードにより構成されます。ROS2の実行可能単位(C++プログラムやPythonプログラム)は一つ以上のノードを含みます。

前提条件

前回のチュートリアルではTurtlesimパッケージのインストール方法を説明しました。新しくターミナルを開くたびに、ROS2をソースするのを忘れないように。

タスク

1.ros2 run


ros2 runコマンドではパッケージから実行単位を立ち上げることができます。

ros2 run <package_name> <executable_name>

turtlesimを実行するために、新しいターミナルを開き、次のコマンドを入力しましょう。

ros2 run turtlesim turtlesim_node

turtlesimのウィンドウが開き、前回のチュートリアルと同じものが見えました。ここでパッケージの名前はturtlesimで、実行単位の名前がturtlesim_nodeです。
ノードの名前がわかりませんが、ros2 node list でノードの名前を探すことができます。

2.ros2 node list

ros2 node list は実行中の全ノードの名前を表示してくれます。ノードに相互作用したり、たくさんのノードが実行しているシステムであるノードを追跡するのに役立ちます。turtlesimが実行中のターミナルとは別のターミナルを開き、次のコマンドを打ちます。

ros2 node list

ターミナルはノード名を返します。

/turtlesim

他のターミナルを立ち上げ、teleopノードを次のコマンドで開始します。

ros2 run turtlesim turtle_teleop_key

ここでturtlesimパッケージを探し、今回はturtle_teleop_keyという実行単位名を見つけました。ros2 node listを実行したターミナルに戻り、もう一度コマンドを実行します。すると2つのノード名が見えるはずです。

/turtlesim
/teleop_turtle

2.1 リマッピング

リマッピングはデフォルトのノードプロパティ(ノード名、トピック名、サービス名など)を好きな値に再割当てできます。チュートリアルの最後で、turtle_teleop_key をデフォルトの亀をコントロールするようにリマッピングしています。

では、/turtlesimノードの名前を変えてみましょう。新しいターミナルで次のコマンドを打ちます。

ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

ros2 runでturtlesimを呼び出したため、新しいウィンドウが開きます。ですがros2 node listを再度実行すると、3つのノード名が表示されます。

/turtlesim
/teleop_turtle
/my_turtle

3 ros2 node info

ノードの名前がわかったので、次のコマンドでさらなる情報にアクセスしてみましょう。

ros2 node info <node_name>

さっきのノード、my_turtleを調べるときは次のコマンドを使います。

ros2 node info /my_turtle

ros2 node infoはノード同士の相互作用(つまりROSグラフの接続)であるサブスクライバ、パブリッシャ、サービス、アクションのリストを表示します。次のような表示が出てくるはずです。

/my_turtle
 Subscribers:
   /parameter_events: rcl_interfaces/msg/ParameterEvent
   /turtle1/cmd_vel: geometry_msgs/msg/Twist
 Publishers:
   /parameter_events: rcl_interfaces/msg/ParameterEvent
   /rosout: rcl_interfaces/msg/Log
   /turtle1/color_sensor: turtlesim/msg/Color
   /turtle1/pose: turtlesim/msg/Pose
 Services:
   /clear: std_srvs/srv/Empty
   /kill: turtlesim/srv/Kill
   /reset: std_srvs/srv/Empty
   /spawn: turtlesim/srv/Spawn
   /turtle1/set_pen: turtlesim/srv/SetPen
   /turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute
   /turtle1/teleport_relative: turtlesim/srv/TeleportRelative
   /my_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
   /my_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
   /my_turtle/get_parameters: rcl_interfaces/srv/GetParameters
   /my_turtle/list_parameters: rcl_interfaces/srv/ListParameters
   /my_turtle/set_parameters: rcl_interfaces/srv/SetParameters
   /my_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
 Action Servers:
   /turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
 Action Clients:

さて、同じコマンドを /teleop_turtleノードに対して実行すると上の表示と異なることを確認しましょう。

まとめ

ノードとは、ロボットシステムにおいて一つのモジュールの目的を実行するROS2の基礎要素です。このチュートリアルではturtlesimパッケージからノードを作り、実行単位であるturtlesim_node, turtle_teleop_keyを実行しました。

また、アクティブなノードを ros2 node listで探す方法や、ros2 node infoでノードを調べる方法を学びました。これらのツールは現実世界のロボットシステム上の複雑なデータの流れを理解するのに役立ちます。






この記事が気に入ったらサポートをしてみませんか?