パラメータっていうのは複数のロボットを利用するようになると
結構やっかいなものです。
それをどううまく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 件のコメント:
コメントを投稿