📚 【ROS2入門③】基本概念を理解する - ノード・トピック・サービス・アクション
シリーズ この記事は「ROS2入門シリーズ」の一部です。 シリーズ目次を見る
Humble 環境構築済みの状態から、ノード・トピック・サービス・アクション(とパラメータ)を CLI で確認できるところまで進めます。次の記事では Python でトピック通信を実装します。詳細は ROS 2 Concepts を参照してください。2026年5月時点、Ubuntu 22.04 + ROS 2 Humble 想定です。
ROS2 システムの全体像:ノードが協調する仕組み
ROS 2 のシステムは、複数のノードがトピック・サービス・アクション経由で協調動作します。詳細は About Topics を参照してください。
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 通信
トピックとは
トピックはノード間の非同期通信チャンネルです。
特徴:
- 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 通信
サービスとは
サービスはリクエスト/レスポンス型の同期通信です。
特徴:
- 呼び出し側は処理完了まで(概ね)待つ運用になりやすい
- 「今スナップショットを取って返す」のような短命処理向き(実装により非同期キューにもできるが、モデルとしてはサービス/アクション選びがある)
サービスの確認コマンド
# サービス一覧
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)とは?長時間タスク向け通信
アクションとは
アクションは時間のかかる処理のための非同期通信です。サービスとトピックの両方の特徴を持ちます。
特徴:
- 長時間タスクの実行
- 途中経過(Feedback)の取得
- キャンセルが可能
- ナビゲーション、把持動作など複雑な動作に適している
アクションの確認コマンド
# アクション一覧
ros2 action list
# アクションの情報
ros2 action info /action_name
# アクションを手動で送信
ros2 action send_goal /action_name パッケージ/型名 "{引数}" ノード・トピック・サービス・アクションの使い分け方
一覧図です。
比較用の一覧図(別レイアウト)。
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 で実装します。