前回はROS2のノードとトピックについて学びました。
今回はサービスとアクションについて学びます。

サービスとは
ROS 2 の通信方式には、**トピック(Topic)とサービス(Service)**があります。
トピックは前回勉強しましたが、トピックは一方的な通信で、データを送った後きちんと動いたかはわかりません。
サービスは、通信が 「呼びかけ・応答」のリクエスト‑レスポンス型になっています。
- **クライアント(Client)**が「○○して!」と呼びかけ
- **サーバ(Server)**が処理して「はい、OKです」と応える
- 例えば「turtlesim にカメを新しく生み出して!」など、一度きりの処理に向いています
前回同様、turtlesimを使って体験してみましょう。
turtlesim の起動
ターミナル①:
ros2 run turtlesim turtlesim_node
ターミナル②:
ros2 run turtlesim turtle_teleop_key
サービス一覧を確認(ros2 service list
)
現在システムで使える「サービスの一覧」を表示します。どんなサービスが定義されているかをまず確認するのに使います。
もう一つターミナルを立ち上げて以下のコマンドを実行します。
ros2 service list
以下のように一覧が表示されます。
/clear
: 画面の軌跡を消す
/spawn
: 新しいカメを生み出す
など、どれも turtlesim に用意されたサービスです。

サービスの形式を調べる(ros2 service type
)
上記の ros2 service list
に加えて、それぞれのサービスがどんな**データ型(型名)**を使っているかも表示します。
ros2 service list -t
以下のように表示されます。

std_srvs/srv/Empty
: 引数も返り値も「何もない」シンプルな型
turtlesim/srv/Spawn
: カメを生み出すための位置などの情報を送る型
型の名前を調べる ros2 service type <サービス名>
指定したサービスが使っている型の名前を教えてくれます。
ros2 service type /clear
以下のように表示されます。

この型がわかれば、次に「どんなデータを渡せばいいか」が確認できます。
型のサービスを表示 ros2 service find <型名>
指定した型を使っているサービスをすべてリストアップします。
ros2 service find std_srvs/srv/Empty
以下のように表示されます。

「この型ってどこで使われているんだっけ?」と調べたいときに便利です。
サービスの中身を表示 ros2 interface show <サービス型>
サービスの「型」の中身(引数や返り値のフィールド)を表示します。
ros2 interface show std_srvs/srv/Empty
以下のように表示されます。

引数・返り値ともに空です。
/Spawnですと以下の通りに表示されます。
ros2 interface show turtlesim/srv/Spawn

上部がリクエスト(送る側)、下部がレスポンス(返ってくる側)です。x, y, theta
はカメの座標や角度、name
は任意でつけられる名前です。
サービスのコマンドをまとめます。
コマンド | 概要 | 主な使い方 |
---|---|---|
ros2 service list | 利用可能なサービス一覧 | どんな操作があるかを調べる |
ros2 service list -t | 一覧+型情報表示 | 使われている型も併せて見たいとき |
ros2 service type /サービス名 | 特定サービスの型を調べる | interface show で中身を見る前段階として |
ros2 service find <型名> | 指定型を使っているサービス一覧 | 特定の型を使う操作を探したい時 |
ros2 interface show <型名> | サービスの引数や返り値を確認 | サービス呼び出しの前に絶対確認 |
ros2 service call /サービス名 型 "{引数}" | サービスを実行(呼び出す) | turtlesim の操作を試して学ぶ! |
サービスの実行 service call /サービス名 型 "{引数}"
それでは実際にサービスを動かしながら動作を見てみます。
カメの軌跡を消す(/clear サービス)
亀を動かすと白い線で軌跡が出ます。
以下のサービスコマンドで軌跡を消せます。
ros2 service call /clear std_srvs/srv/Empty
トピックとの違いは実行した結果が表示されます。

カメを新しく生み出す(/spawn サービス)
新しいカメが (x=2.0, y=2.0)
に出現します。名前は turtle2
など自動でつけられます。
※2匹目以降のカメも /turtle2
、/turtle3
と追加されていきます。
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 2.0, theta: 0.0, name: ''}"

サービスでカメを「瞬時に移動」
ros2 service call /turtle1/teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 6.0, y: 6.0, theta: 0.0}"
カメが一瞬でワープします。

これが サービス通信の特徴です。
「お願い!(リクエスト)→ やったよ!(レスポンス)」という形で処理される。
同期処理であるため、結果を待つことができます。

サービスとトピックを並行して使ってみる
以下のコマンドで亀が回り続けます(トピック送信中)
ros2 topic pub /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}}"
この状態で別ターミナルで線を消すサービスを実行してみます。
ros2 service call /clear std_srvs/srv/Empty
このように
・トピックは常に流れ続けている
・サービスは呼んだときだけ動く(トリガー処理)
という違いがあります。
パラメータとは
パラメータ(Parameter)はノードの設定値です。
例えば整数、浮動小数点数、文字列、真偽値、配列などが扱えます。
各ノードは独自にパラメータを管理し、起動時や実行中に動的に設定を変えることができます。
パラメータ一覧を表示 ros2 param list
以下のコマンドでパラメータ一覧を表示できます。
ros2 param list
以下のように表示されます。

各ノードが持つパラメータ名が表示されます。
・use_sim_time
はROS全体でよく使われる共通パラメータです。
・background_r/g/b
は、turtlesim の背景色 RGB を調整するためのものです。
設定されているパラメータ値を確認 ros2 param get /turtlesim background_g
ros2 param get /turtlesim background_g
以下のように表示されます。

background_g
の値が 86
(緑成分)であることを確認できます。他の成分も同様に取得可能です。
パラメータの値を変更する ros2 param set /turtlesim background_r 150
ros2 param set /turtlesim background_r 150
ターミナルに「Set parameter successful」と表示され、背景色が変わるはずです。theconstruct.ai+5docs.ros.org+5daobook.github.io+5
✅ ポイント:このコマンドはリアルタイムに設定を変更できます(ただし次回起動時には元に戻ります)。

パラメータの保存 ros2 param dump
以下のコマンドでturtlesim.yamlというファイルで設定が保存されます。
ros2 param dump /turtlesim > turtlesim.yaml
一度シミュレータを再起動するとまた青い背景に戻っています。

以下のコマンドで実行中の turtlesim
ノードに対し、保存したパラメータを再読み込みできます。
ros2 param load /turtlesim ./turtlesim.yaml

ノード起動時にパラメータを設定
以下のコマンドでパラメータファイルを指定してノードを起動できます。
ros2 run turtlesim turtlesim_node --ros-args --params-file turtlesim.yaml
パラメータ関連のコマンドは以下の通りです
操作内容 | 正しいコマンド |
---|---|
実行中ノードのパラメータを取得 | ros2 param get /ノード名 パラメータ名 |
パラメータを実行中に変更 | ros2 param set /ノード名 パラメータ名 値 |
パラメータをファイルに保存 | ros2 param dump /ノード名 |
ファイルから読み込み | ros2 param load /ノード名 ファイル名.yaml |
ノード起動時にパラメータ適用 | ros2 run <pkg> <exec> --ros-args --params-file <file>.yaml |
アクションとは
アクションは「長時間かかる処理」に適した通信手段です。
ゴール(Goal)、フィードバック(Feedback)、**結果(Result)**という構成を持ちます。
サービスとトピックのいいとこ取りで、「リクエスト → 応答」の同期処理に加え、進捗報告やキャンセルも可能です。
アクションの体験
いつも通り以下のコマンドを2つ実行しシミュレータとキーボード操作のプログラムを実行します。
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
turtle_teleop_key
を起動すると、キーの案内メッセージが表示されます

書いてある通り、トピック通信だけでなく、アクション通信も試すことができます。
G/B/V/C/D/E/R/TとFキーは「アクション」のゴール送信とキャンセルに対応しています。
試しにCキーを押してみてください。
亀が回転し、以下の表示が出てきます。

次にTを押して、回転している途中でFを押します。

途中で回転が止まり、キャンセルされたと表示されます。
このようにアクションは時間のかかる動作に対して、状況がわかる上に、途中でキャンセルすることもできます。
アクションの一覧表示
以下のコマンドで一覧を表示できます。
ros2 action list

アクションの詳細を調べる
ros2 action info /turtle1/rotate_absolute
ゴール/フィードバック/結果の型などが表示されます。

アクションの実行
以下の通りアクションを実行することができます。
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.57}"
これでカメが90度(1.57 rad)回転します。
終了後、結果が返されます。
まとめ
通信方式 | 特徴 | 例 |
---|---|---|
トピック | 連続的・非同期 | 矢印キーによるカメの移動 |
サービス | 単発・同期 | /clear による線消去 |
アクション | 長時間・同期 → フィードバック + キャンセル可能 | キーでカメの向きを変える rotation |
今回はサービスとパラメータ、アクションの概要を学びました。
ROSの基本的な概念になりますので、しっかりと理解しておきましょう。
次回はこちら
Comming soon