ROS サービスとパラメータについて理解する

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 の裏側が明らかになりました.

  • ROS/Tutorials/UnderstandingServicesParams/turtlesim.png

サービスが引数をとる場合についても見てみましょう.サービスの誕生を見てみましょう:

$ 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 は以下のようになっているでしょう:

  • ROS/Tutorials/UnderstandingServicesParams/turtle(service).png

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 は以下のように見えるでしょう:

  • ROS/Tutorials/UnderstandingServicesParams/turtle(param).png

パラメータ サーバのその他のパラメータの値についても見てみましょう.グリーンの背景色の値を取得してみましょう:

$ 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 を使ってみましょう

Wiki: ja/ROS/Tutorials/UnderstandingServicesParams (last edited 2010-01-04 10:00:56 by KentaYonekura)