ROS サービスとパラメータについて理解する
Contents
turtlesim_node は前のチュートリアルから起動したままだと思います.turtlesim が提供するサービスを見てみましょう:
ROS サービス
サービスはノードが他のノードとお互いに通信するための1つの手段です.サービスはノードがリクエストを送り,レスポンスを受け取れるようにします.
rosservice の使い方
rosservice はサービスを用いて ROS のクライアント/サービスの仕組みを簡単に付け加えます.rosservece には以下に示す通り,トピックに使用できる多くのコマンドがあります:
使い方:
rosservice list アクティブなサービスの情報を表示します rosservice call 引数で渡されたサービスを呼び出します rosservice type サービスの型を表示します rosservice find サービス型に応じたサービスを探します rosservice uri ROSRPC uri サービスを表示します
rosservice list
$ rosservice list
list コマンドで turtlesim ノードが5つのサービスを提供していることが分かります: reset, clear, spawn, kill, turtle1/set_pen, turtlesim/get_loggers, turtlesim/set_logger_level です. rosout ノードで区切られた /rosout/get_loggers, /rosout/set_logger_level という2つのノードもあります.
/clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level
rosservice type を使用して, clear サービスについて,もっとよく見てみましょう:
rosservice type
使い方:
rosservice type [service]
clear サービスの型を調べてみましょう:
$ rosservice type clear
std_srvs/Empty
このサービスは空で,このことはサービスを呼び出すのに引数がいらない(例えば,リクエストの作成にデータを送らない,レスポンスの受け取りにデータを受け取らない)ことを意味しています.このサービスを rosservice call を使用して呼び出しましょう:
rosservice call
使い方:
rosservice call [service] [args]
ここでは引数をつけないで呼び出します.なぜならサービスが空の型だからです:
rosservice call clear
これで turtlesim_node の裏側が明らかになりました.
サービスが引数をとる場合についても見てみましょう.サービスの誕生を見てみましょう:
$ rosservice type spawn| rossrv show
float32 x float32 y float32 theta string name --- string name
このサービスは与えられた位置と向きに新しい亀を誕生させます.名前フィールドは任意です.新しい亀を名前をつけずに作ってみましょう.
$ rosservice call spawn 2 2 0.2 ""
サービスは新しく作成された亀の名前を返します.
name: turtle2
turtlesim は以下のようになっているでしょう:
rosparam の使い方
rosparam は ROS パラメータ サーバを用いてデータの蓄積や操作を実現します.パラメータ サーバは,整数・少数・真偽値・辞書・リストを蓄積できます.YAML は実に自然で,1 が整数,1.0 が少数,one が文字列,trueが真偽値,[1, 2, 3] が整数リスト,{1: b, c: d} が辞書です.rosparam には以下に示すトピックで使用される多くのコマンドがあります.
使い方:
rosparam set パラメータを設定します rosparam get パラメータを取得します rosparam load ファイルからパラメータを読み込みます rosparam dump ファイルへパラメータを書き出します rosparam delete パラメータを消去します rosparam list パラメータ名をリスト化します
現在,どんなパラメータがパラメータ サーバにあるか見てみましょう:
rosparam list
$ rosparam list
turtlesim ノードが背景色のための3つのパラメータをパラメータ サーバ内に保持していることが分かります:
/background_b /background_g /background_r /roslaunch/uris/aqy:51932 /run_id
rosparam set を使って,パラメータの値を変えてみましょう:
rosparam set と rosparam set
使い方:
rosparam set [param_name] rosparam get [param_name]
背景色の赤色のチャネルが変化します:
$ rosparam set background_r 150
これはパラメータの値を変えます.パラメータを変化させたら,できるだけサービスのクリアを呼び出すべきでしょう:
$ rosservice call clear
turtlesim は以下のように見えるでしょう:
パラメータ サーバのその他のパラメータの値についても見てみましょう.グリーンの背景色の値を取得してみましょう:
$ rosparam get background_g
144
全てのパラメータ サーバの中身を見るために,rosparam get / を使うこともできます.
$ rosparam get /
background_b: 255 background_g: 144 background_r: 150 roslaunch: uris: {'aqy:51932': 'http://aqy:51932/'} run_id: e07ea71e-98df-11de-8875-001b21201aa8
別のときにこれらを再度読み込むだめに,ファイルに書き出しておきたいでしょう.rosparam を使うと簡単です:
rosparam dump と rosparam load
使い方:
rosparam dump [file_name] rosparam load [file_name] [namespace]
全てのパラメータは params.yaml ファイルに記述されています.
$ rosparam dump params.yaml
これらの yaml ファイルは copy といったネームスペースの中に読み込むこともできます.
$ rosparam load params.yaml copy $ rosparam get copy/background_b
255
ここでは ROS サービスとパラメータの働きについて理解しました.次は rxconsole と roslaunch を使ってみましょう.






