ROS入門 (5) - ROS2のデータ通信の仕組み
ROS2のデータ通信の仕組みについてまとめました。
前回
1. ROS2のデータ通信の仕組み
ROSはソフトウェアの再利用性を高めるため、分散システムとして設計されています。「ノード」と呼ばれるプロセスが、メッセージを送受信しあいながら、1つの大きなシステムとして動作します。
◎ ノード
「ノード」は、ROS内で実行されるプロセス(最小のプログラム)です。
ノード毎に独立したメモリ空間で動作します。ROSでは目的(カメラ、モーターなど)ごとに、ノードを作成します。他のノードとの通信のために、「メッセージ」を使います。
◎ メッセージ
「メッセージ」は、ノード間でやりとりするデータです。
2. ROS2のノード間通信の方式
ROSはノード間の通信方法として、「トピック」「サービス」「アクション」の3つを提供しています。
◎ トピック
「トピック」は、「パブリッシャー-サブスクライバー」関係の通信を行います。パブリッシャーがトピックを作成して転送すると、サブスクライバーがそのトピックを受信します。この関係は一方的でサブスクライバーからパブリッシャーに転送することができません。
サブスクライバーを多数設定することもできます。
◎ サービス
「サービス」は、「サーバー-クライアント」関係の通信を行います。クライアントがサーバーにリクエストすると、サーバーがレスポンスを返します。
◎ アクション
「アクション」は、サービスと同様に「サーバー-クライアント」関係の通信を行います。サービスと異なる点は、サーバーがクライアントにフィードバックを返すことです。フィードバックとはリクエストに対する処理で発生するイベントで、フィードバックを受信したクライアントは処理の進行状況を知ることができます。
3. turtlesimのノードとトピックの確認
「ROS入門 (3) - DockerによるROS2のセットアップ」で実行した、「turtlesim」のノードとトピックを確認してみます。
◎ ノードの確認
「ros2 node list」でノード一覧を確認します。
$ ros2 node list
/teleop_turtle
/turtlesim
ノード名(turtlesim_node、turtle_teleop_key)ではなく、ノード実行名(/turtlesim、/teleop_turtle)で表示されています。
◎ ノード情報の確認
「ros2 node info <ノード実行名>」で、ノード情報を確認します。
・turtlesimの情報
トピック「/turtle1/cmd_vel」を受信していることがわかります。
$ ros2 node info /turtlesim
/turtlesim
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
Service Servers:
/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
/turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters
/turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/turtlesim/get_parameters: rcl_interfaces/srv/GetParameters
/turtlesim/list_parameters: rcl_interfaces/srv/ListParameters
/turtlesim/set_parameters: rcl_interfaces/srv/SetParameters
/turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
Action Servers:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
Action Clients:
・teleop_turtleの情報
トピック「/turtle1/cmd_vel」を送信していることがわかります。
/teleop_turtle
Subscribers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
Publishers:
/parameter_events: rcl_interfaces/msg/ParameterEvent
/rosout: rcl_interfaces/msg/Log
/turtle1/cmd_vel: geometry_msgs/msg/Twist
Service Servers:
/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters
/teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes
/teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters
/teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters
/teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters
/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomically
Service Clients:
Action Servers:
Action Clients:
/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute
◎ トピック一覧の確認
「ros2 topic list」でトピック一覧を確認します。
$ ros2 topic list
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
◎ トピック情報の確認
「ros2 topic info <トピック名>」でトピック情報を確認します。
$ ros2 topic info /turtle1/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 1
「-v」でパブリッシャーとサブスクライバーを確認できます。
ros2 topic info -v /turtle1/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Node name: teleop_turtle
Node namespace: /
Topic type: geometry_msgs/msg/Twist
Endpoint type: PUBLISHER
GID: 48.e8.10.01.59.00.bd.7d.11.df.70.4d.00.00.15.03.00.00.00.00.00.00.00.00
QoS profile:
Reliability: RELIABLE
Durability: VOLATILE
Lifespan: 9223372036854775807 nanoseconds
Deadline: 9223372036854775807 nanoseconds
Liveliness: AUTOMATIC
Liveliness lease duration: 9223372036854775807 nanoseconds
Subscription count: 1
Node name: turtlesim
Node namespace: /
Topic type: geometry_msgs/msg/Twist
Endpoint type: SUBSCRIPTION
GID: 26.ef.10.01.0e.fc.3c.be.17.80.d2.0c.00.00.1e.04.00.00.00.00.00.00.00.00
QoS profile:
Reliability: RELIABLE
Durability: VOLATILE
Lifespan: 9223372036854775807 nanoseconds
Deadline: 9223372036854775807 nanoseconds
Liveliness: AUTOMATIC
Liveliness lease duration: 9223372036854775807 nanoseconds
/turtle1/cmd_velのパブリッシャーはteleop_turtle、サブスクライバーはturtlesimであることがわかります。
◎ トピック値の確認
「ros2 topic echo <トピック名>」でトピック値をリアルタイムに確認します。「Ctrl-C」で終了します。
/turtle1/cmd_velは、キー操作した時に受信します。
$ ros2 topic echo /turtle1/cmd_vel
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 2.0
---
:
◎ トピック値のパブリッシュ
「ros2 topic pub <トピック名> <トピック型> '<値の辞書>'」でトピック値をパブリッシュします。コマンドでカメを操作できます。
$ ros2 topic pub /turtle1/cmd_vel geometry_msgs/Twist '{linear: {x: 0.1}, angular: {z: 0.3}}'
◎ グラフによる確認
「rqt_graph」でノードの関係をグラフで確認します。
$ rqt_graph
次回
この記事が気に入ったらサポートをしてみませんか?