加藤祐介ブログ

ROS 2 Jazzy公式チュートリアル02: ROS 2のノードとトピックについて

記事投稿日: 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の基本

ROS 2ではノードごとにそれぞれ動作しており、ノード同士がデータを送受信できます。 各ノード間の通信方法はTopic、Service、Actionの3つがあります。 トピックはPublisherからSubscriberへデータを垂れ流しする通信、 サービスとアクションはクライアントがサーバへリクエストを送ると、 サーバがクライアントへ処理結果のデータを返す通信です。

公式ドキュメントより画像を引用↓
ノードと通信

ros2 pkgコマンド

ros2 pkgコマンドを使うとパッケージ情報を確認できます。 たとえば下記のようにコマンドを実行するとturtlesimパッケージの実行ファイルの一覧が確認できます。

ros2 pkg executables turtlesim

出力内容↓

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

今回はturtlesim_nodeturtle_teleop_keyを実行します。

turtlesimを起動

前回と同様にturtlesimを起動します。

1つ目のターミナルで実行↓

ros2 run turtlesim turtlesim_node

キーボード入力で亀を操作するノードも起動します。

2つ目のターミナルで実行↓

ros2 run turtlesim turtle_teleop_key

ros2 nodeコマンド

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_graph

RQtというROS 2の情報を可視化ツールを使用してみます。 今回はrqt_graphコマンドを実行します。

rqt_graph

turtlesimteleop_turtle間の通信が可視化されます↓

rqt_graph

ros2 topicコマンド

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のノードとトピック通信について簡単に紹介しました。 今後も少しずつ進めていこうと思います。 それでは、また。

お知らせ

過去のお知らせ

シリーズ記事一覧

各シリーズの記事を下記にまとめてあります。

我が家のインコ「れもん&ぽぽ&ぐぐ」の日記 我が家のインコ「れもん&ぽぽ&ぐぐ」の日記14 : 大人に近づくれもんと遊ぶ余裕が出てきたぐぐ 我が家のインコ「れもん&ぽぽ&ぐぐ」の日記13 : 生後4ヶ月を迎えたれもんと我が家に慣れてきたぐぐ 我が家のインコ「れもん&ぽぽ&ぐぐ」の日記12 : ぽぽが亡くなりました、そしてぐぐがやってきました インコ仲間「れもん&ぽぽ」の日記11 : ズグロシロハラインコのぽぽ、我が家へ セキセイインコ「れもん」の日記10 : 生後100日のれもん、ついに喋る セキセイインコ「れもん」の日記9 : 換羽期のれもん セキセイインコ「れもん」の日記8 : 病院へ挑戦! セキセイインコ「れもん」の日記7 : 外出用ゲージにチャレンジ! セキセイインコ「れもん」の日記6 : 新宿ことり博に行ってきました! セキセイインコ「れもん」の日記5 : 3週間経って順調に成長している模様 セキセイインコ「れもん」の日記4 : 鳥フェス千葉2024に行ってきました! セキセイインコ「れもん」の日記3 : 2週間経って我が家にも慣れてきた模様 セキセイインコ「れもん」の日記:第2回 セキセイインコの「れもん」が我が家にやってきました!
AlpacaHackで始めるCTF入門 AlpacaHackで始めるCTF入門6:AlpacaHack Round 4 - Simple Flag Checkerに挑戦 AlpacaHackで始めるCTF入門5:AlpacaHack Round 3 - qrimeに挑戦 AlpacaHackで始めるCTF入門4:AlpacaHack Round 2 - Simple Loginに挑戦 AlpacaHackで始めるCTF入門3:初めてのCTFに参加 AlpacaHackで始めるCTF入門2:DreamhackでCTF入門 AlpacaHackで始めるCTF入門1:初めてのCTF
シェル芸 第66回シェル芸勉強会メモ 第64回シェル芸勉強会メモ ChatGPTでシェル芸勉強会の問題が解きたい シェル芸botで遊びたい(Bash)
ROS 2 改訂新版『ROS 2ではじめよう』を読了&メモ書き ROS 2 Jazzy公式チュートリアル02: ROS 2のノードとトピックについて ROS 2 Jazzy公式チュートリアル01: ROS 2 Jazzyのインストールから動作確認まで ROS 2 Humble 公式チュートリアル 02: ROS 2 のノード関係のコマンド ROS 2 Humble 公式チュートリアル 01: 環境構築から turtlesim まで
読書日記 改訂新版『ROS 2ではじめよう』を読了&メモ書き
料理日記 料理日記:豆腐春巻き 料理日記:鶏肉とナスのほりにし炒め 料理日記:卵焼き 料理日記:鶏肉の照り焼き&小松菜のおひたし 料理日記:納豆蕎麦 料理日記:ローストビーフ 料理日記:バターガーリックチキン
その他 HTMLのvideoタグで貼った動画のサムネイルがSafariで表示されない問題を解決 WSL2上のUbuntuのVimで矩形選択するための設定 JR東日本公式のお忘れ物チャットにお世話になった話 HTMLとCSSで画像のスライドショーを作成 GitHub Actionsでサーバ上のブログを自動更新 『Omega Crafter』プレイ日記: チュートリアル編 自作ブログ大改造計画 Windows と Ubuntu のデュアルブート HTML数式表示テスト 自作ブログ開始

加藤祐介ブログの著作物はCC BY-NC-ND 4.0で公開されています。
加藤祐介ブログのソフトウェアはApache License 2.0で公開されています。
About License: GitHub - YusukeKatoBlog/LICENSE
© 2023 YusukeKato All Rights Reserved.