2009年12月18日金曜日

サービスとパラメータを理解する

今回はサービスとパラメータ。
パラメータっていうのは複数のロボットを利用するようになると
結構やっかいなものです。
それをどううまくROSが扱おうとしているのか見ていきましょう。

http://www.ros.org/wiki/ROS/Tutorials/UnderstandingServicesParams

今回でてくるコマンド
rosservice, rosparam

サービスは実行結果を買えしてもらえる関数みたいなもんですね。
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun turtle_teleop turtle_teleop_key
して前回の謎の亀プログラムを走らせましょう。
とりあえず、亀を適当に動かしときましょう。

$ rosservice list
とすると、
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
と表示されました。

$ rosservice type clear
とすると、
std_srvs/Empty
と表示されます。
エンプティーなので、引数、返り値がないということみたいです。

以下のフォーマットでサービス呼んじゃいましょう。
$ rosservice call [service] [args]


$ rosservice call clear
お、亀の軌跡が消えました。

次は引数つきサービスです。
$ rosservice type spawn| rossrv show
とすると、
 float32 x
float32 y
float32 theta
string name
---
string namename

と表示されました。
線の上が引数、下が返り値ですね。

$ rosservice call spawn 2 2 0.2 ""
とすると、
name: turtle2
と、名前が帰ってきました。

そして、亀増えたーーー!
これでサービスは終わり。

次はパラメータです。

パラメータはYAMLフォーマットです。YAMLはrubyなどでも使われているデータフォーマットでしたね。多分。

では、まず
$ rosparam list
として、亀さんにどういうパラメータがあるか見てみましょう。
/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_idd

背景色っぽいですね。

$ rosparam set background_r 200
として、RGBのRの値をセットしましょう。
あれ?変わらない。
$ rosservice call clear

おー、変わった。

もちろんgetもできます。
$ rosparam get background_g
結構反応遅いです。
$ rosparam get /
とするとすべての値がとれます。

ためしに
$ rosparam set hoge 3
としてみたら、
$ rosparam get /
background_b: 255
background_g: 200
background_r: 200
hoge: 3
roslaunch:
  uris: {'tenka1:42867': 'http://tenka1:42867/'}
run_id: 68f41e00-ebe0-11de-853b-0025004ad167
と、ちゃんと入っていました。

ファイル保存、ロードも簡単にできます。

rosparam dump [file_name]
rosparam load [file_name] [namespace]
これは便利。
パラメータはやっぱYAMLなんですね。読みやすいしいいですよね。

0 件のコメント:

コメントを投稿