読者です 読者をやめる 読者になる 読者になる

gggggraziegrazie

graizegrazieさんのやったこと、学んだことを記録する雑記帳です

ROSでパラメータを登録する方法

 ロボット業界でよく使われるフレームワークとして、ROS[1]というものがあります。ROSでは、生成するプロセス(ROS的にはノード)毎にパラメータを設定することが出来ます。先日そのパラメータを使う機会がありましたので、パラメータの設定方法を書きます。なおプログラミング言語を用いて説明する部分に関しては、Pythonを使って記述します。

パラメータとは

 パラメータとは、ノードが外部に公開する変数のことです。外部からパラメータに値を設定することで、ノードの挙動を変更することが出来ます。例えば移動を司るノードが外部にパラメータとして速度を公開している時、外部からパラメータを操作することで速度を変更することができます。

パラメータの設定方法

 パラメータを設定する方法には
  1. ソース上で設定
  2. ノード起動時に設定する
  3. コマンドラインで設定する
 の3パターンがあります。それぞれの設定方法により、同じプログラムを使っても生成されるノード毎に保有するパラメータが異なるので注意が必要になります。また上記3つの方法があることで、ROSではいつでもノードにパラメータを設定することができるとわかります。

ソース上で設定する

 ソースコードで設定するには、set_param関数を使います。ソースコード上で設定することで、そのソースを元に作られたノードには必ずパラメータが設定された状態で生成されます。つまり、

 rospy.set_param('foo', 0.1) # デフォルト値0.1

とすれば、ノードは起動時点で必ずデフォルトで0.1という値が入ったfooというパラメータを持つことになります。

ノード起動時に設定する

 ノードを起動する時、パラメータを設定して起動することができます。方法としては、

 ./foo.py /foo/bar:=0.1

とすることで、ノードfooに0.1という値を持つ変数barを持たすことができます。
 起動時にパラメータを設けることで、同じプログラムから生成するノードで別々のパラメータを設けることができます。また、プログラムを修正するせずにパラメータを設定することで、お試しでパラメータを使って、ノードの動きを検証してみるということができます。

コマンドラインで設定する

 コマンドラインでパラメータを設定するにはrosparamを使います。使い方としては、

 rosparam set /foo/bar 0.1

コマンドラインで実行します。
 今まではノードを起動するまでの段階でパラメータを設定していましたが、この方法を使うことで起動後でもパラメータを設定することができます。

[1]ROS.org | Powering the world's robots