30代エンジニアの備忘録のカバー画像

30代エンジニアの備忘録

組み込み開発・信号処理・プログラミングの技術メモと短編小説

📚 【ROS2入門③】基本概念を理解する - ノード・トピック・サービス・アクション

シリーズ この記事は「ROS2入門シリーズ」の一部です。 シリーズ目次を見る

Humble 環境構築済みの状態から、ノード・トピック・サービス・アクション(とパラメータ)を CLI で確認できるところまで進めます。次の記事では Python でトピック通信を実装します。詳細は ROS 2 Concepts を参照してください。2026年5月時点、Ubuntu 22.04 + ROS 2 Humble 想定です。


ROS2 システムの全体像:ノードが協調する仕組み

ROS 2 のシステムは、複数のノードがトピック・サービス・アクション経由で協調動作します。詳細は About Topics を参照してください。

ROS2システム全体像
ROS2システム全体像

ノード間通信の概念図
ノード間通信の概念図

ROS2 のノード(Node)とは?最小実行単位の考え方

ノードとは

ノードは ROS 2 における最小実行単位のプログラムです。1 つのノードは 1 つの役割(責務)を持ちます。

【粒度のイメージ】1ノード = 1機能(目安)
  camera_node     → カメラ画像を取得
  detection_node → 検出
  motor_node      → 駆動

無理に束ねない例:
  robot_all_in_one_node  ← 開発初期は楽でも肥大化しやすい
ノードの確認コマンド
# 実行中のノード一覧を表示
ros2 node list

# 特定ノードの情報を表示
ros2 node info /node_name
実行例

ターミナル1でturtlesimを起動:

ros2 run turtlesim turtlesim_node

ターミナル2でノード確認:

ros2 node list
# 出力:
# /turtlesim

ros2 node info /turtlesim
# 出力(一部):
# Subscribers:
#   /turtle1/cmd_vel: geometry_msgs/msg/Twist
# Publishers:
#   /turtle1/pose: turtlesim/msg/Pose

ROS2 のトピック(Topic)とは?非同期 Pub/Sub 通信

トピックとは

トピックはノード間の非同期通信チャンネルです。

トピック通信のデータフロー(Publisher→Topic→複数Subscriber)
トピック通信のデータフロー(Publisher→Topic→複数Subscriber)

特徴:

  • 1対多、多対1、多対多の通信が可能
  • 送受信は非同期(タイミングがずれても動く)
  • センサーデータ、画像、制御指令の配信に適している
トピックの確認コマンド
# トピック一覧
ros2 topic list

# トピックのデータ型を確認
ros2 topic type /topic_name

# トピックのデータをリアルタイム表示
ros2 topic echo /topic_name

# トピックの送信頻度を確認
ros2 topic hz /topic_name

# トピックに手動でデータを送信(型は <パッケージ>/msg/<メッセージ名>)
ros2 topic pub /topic_name std_msgs/msg/String "{data: 'hello'}"

メッセージ型は geometry_msgs/msg/Twist のように、(パッケージ名)/msg/(型名) で表記されるのが一般的です。ros2 topic type の出力もこの形式になります。

パッケージ メッセージ 用途
std_msgs String, Int32, Float64 基本的な型
geometry_msgs Twist, Pose, Point 位置・速度
sensor_msgs Image, LaserScan, Imu センサーデータ
nav_msgs OccupancyGrid, Path ナビゲーション

ROS2 のサービス(Service)とは?同期 Req/Resp 通信

サービスとは

サービスはリクエスト/レスポンス型の同期通信です。

サービス通信(Request/Response)
サービス通信(Request/Response)

特徴:

  • 呼び出し側は処理完了まで(概ね)待つ運用になりやすい
  • 「今スナップショットを取って返す」のような短命処理向き(実装により非同期キューにもできるが、モデルとしてはサービス/アクション選びがある)
サービスの確認コマンド
# サービス一覧
ros2 service list

# サービスのデータ型を確認
ros2 service type /service_name

# サービスを手動で呼び出す
ros2 service call /service_name パッケージ/型名 "{引数}"
実行例
# turtlesimのリセットサービスを呼び出す
ros2 service call /reset std_srvs/srv/Empty

# 亀を指定座標にテレポートさせる
ros2 service call /turtle1/teleport_absolute \
  turtlesim/srv/TeleportAbsolute \
  "{x: 2.0, y: 2.0, theta: 0.0}"

ROS2 のアクション(Action)とは?長時間タスク向け通信

アクションとは

アクションは時間のかかる処理のための非同期通信です。サービスとトピックの両方の特徴を持ちます。

アクション通信(Goal / Feedback / Result)
アクション通信(Goal / Feedback / Result)

特徴:

  • 長時間タスクの実行
  • 途中経過(Feedback)の取得
  • キャンセルが可能
  • ナビゲーション、把持動作など複雑な動作に適している
アクションの確認コマンド
# アクション一覧
ros2 action list

# アクションの情報
ros2 action info /action_name

# アクションを手動で送信
ros2 action send_goal /action_name パッケージ/型名 "{引数}"

ノード・トピック・サービス・アクションの使い分け方

一覧図です。

ROS2通信パターン比較(表)
ROS2通信パターン比較(表)

比較用の一覧図(別レイアウト)。

ROS2通信パターン比較(図)
ROS2通信パターン比較(図)

ROS2 のパラメータ(Parameter)とは?ノード設定の切り出し

ROS2にはもう1つ重要な概念としてパラメータがあります。

パラメータはノードの設定値で、実行中でも変更できます。

# パラメータ一覧
ros2 param list

# パラメータの値を取得
ros2 param get /node_name param_name

# パラメータの値を設定
ros2 param set /node_name param_name value

ROS 2 基本概念のまとめ

  • ノード: 責務の単位。分割の仕方があとからの変更コストになりやすい
  • トピック: 継続的なデータストリームに向く。Pub/Sub の非同期モデルが基本
  • サービス: 短命の Req/Resp。1 クライアント : 1 サーバを基本像 と捉えると整理しやすい(用途次第で選択は変わる)
  • アクション: 長時間処理+途中経過+キャンセル。ゴール志向の処理でよく出る
  • パラメータ: ノード設定の切り出し。tuning とデプロイの分離に効く

CLI の細部やトピック名はディストリで異なります。出力は自分の環境で確認し、次記事ではトピックの Publisher / Subscriber を Python で実装します。