- Ubuntu 24.04 LTSがインストールされたPC
- ROS 2 Jazzyインストール済み
記事投稿日: 2024年9月27日(金)
最終更新日: 2024年9月27日(金)
ROS 2 Jazzyの公式ドキュメントに沿ってチュートリアルを進めています。 今回はROS 2のノードとトピックを紹介します。 公式ドキュメントは下記のリンクからアクセスできます。
ROS 2 Jazzy公式チュートリアル2024年9月26日の記事です。
ROS 2 Jazzy公式チュートリアル01: ROS 2 Jazzyのインストールから動作確認までROS 2ではノードごとにそれぞれ動作しており、ノード同士がデータを送受信できます。 各ノード間の通信方法はTopic、Service、Actionの3つがあります。 トピックはPublisherからSubscriberへデータを垂れ流しする通信、 サービスとアクションはクライアントがサーバへリクエストを送ると、 サーバがクライアントへ処理結果のデータを返す通信です。
公式ドキュメントより画像を引用↓ros2 pkgコマンドを使うとパッケージ情報を確認できます。 たとえば下記のようにコマンドを実行するとturtlesimパッケージの実行ファイルの一覧が確認できます。
ros2 pkg executables turtlesim
出力内容↓
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
今回はturtlesim_nodeとturtle_teleop_keyを実行します。
前回と同様にturtlesimを起動します。
1つ目のターミナルで実行↓
ros2 run turtlesim turtlesim_node
キーボード入力で亀を操作するノードも起動します。
2つ目のターミナルで実行↓
ros2 run turtlesim turtle_teleop_key
ros2 nodeコマンドを使うとノードの情報を確認できます。 たとえば下記のようにコマンドを実行すると起動しているノードの一覧を確認できます。
ros2 node list
ノード一覧↓
/teleop_turtle
/turtlesim
また、ros2 node infoを実行すると各ノードの詳しい情報が確認できます。
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/get_type_description: type_description_interfaces/srv/GetTypeDescription
/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:
この出力内容を見るとturtlesimノードがどのような通信を行っているか確認できます。
RQtというROS 2の情報を可視化ツールを使用してみます。 今回はrqt_graphコマンドを実行します。
rqt_graph
turtlesimとteleop_turtle間の通信が可視化されます↓
ros2 topicコマンドを使うとトピックの情報を確認できます。 たとえば下記のようにコマンドを実行するとトピックの一覧が確認できます。
ros2 topic list
トピックの一覧↓
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
-tを付けると各トピックのメッセージの型も確認できます。
ros2 topic list -t
メッセージの型を確認↓
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]
ros2 topic echoを使うと各トピックで配信(Publish)されているデータを確認できます。
ros2 topic echo /turtle1/cmd_vel
亀をキーボード入力で前進させた時の/cmd_velトピックは下記の通りです。 ちなみにcmd_velは速度指令のことで、linearが並進速度、 angularが角速度です。 下記の速度指令はX軸方向に2.0[m/s]で進むことを表しています。
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
ros2 topic pubを使うとコマンドからトピックを配信できます。 下記のコマンドを実行するとキーボード入力をしなくても亀を動かすことができます。 ちなみに-onceを付けると一度だけ配信されます。 つまり-onceを削除すると速度指令トピックを配信し続けることになります。
ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
ROS 2の公式チュートリアルを進めました。 今回はROS 2のノードとトピック通信について簡単に紹介しました。 今後も少しずつ進めていこうと思います。 それでは、また。
各シリーズの記事を下記にまとめてあります。