Edited at

ROS講座78 rosparamを使う


環境

この記事は以下の環境で動いています。

項目

CPU
Core i5-8250U

Ubuntu
16.04

ROS
Kinetic

インストールについてはROS講座02 インストールを参照してください。

またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。


概要

rosparamはROSの中でのパラーメーターを取り扱う仕組みです。rosparamは全てROSマスターで一元的に管理されます。

paramの型としてはstr、int、double、boolがあります。型を指定してrosparamをセットすることもできますが、基本的に整数値はstr、少数があるとdouble、true/falseはbool、その他はstrに型推論されます。またリストや辞書を扱うこともできます。

本当は動的に値を変えることができるのですがその役割はrostopicが担っているので、起動時のパラメーターとして使用することがほとんどです。


使い方

主にlaunchファイルとrosノードとコマンドラインからの3か所でrosparamにアクセスすることができます。


launchファイルの中でのrosparamの設定

launchファイルからはrosparamを書くことしかできません。読みは不可です。launchの分岐に変数を使いたい場合はargを使ってください。

またrosparamはROSノードやROSトピックと同じように名前空間を持ちます。rosparamを設定するタグとして<param><rosparam>の2つがあって使い方が多少異なります。


param

rosparamに値をセットする基本的なコマンドです。<param name="test_param" value="10.0" />とやるとtest_paramという値に浮動小数点で10が代入されます。

例えば以下のようにROSノードの起動の中で宣言すると

<node name="test_node" pkg="test_pkg" type="test_node">

<param name="test_param" value="10" />
</node>

test_node/test_paramという名前で10が入力されます。


rosparam

rosparamではparamと違ってリストの設定やyamlファイルからの読み込みができます。



  • <rosparam param="test_list">[1,2,3,4]</rosparam>と書くとリストが設定できます。


  • <rosparam command="load" file="$(find test_pkg)/test.yaml"/>とするとyamlファイルからrosparamを設定できます。


ROSノードからのrosparamの読み出し

書き込みも本当はできますがほとんど行われません。以下のようにして読み込めます。該当するrosparamがなかった場合は何も読み込ませません。

ros::NodeHandle pn("~");

int param_data;
pn.getParam("param_name", param_data);


コマンドラインからのrosparamの読み出し

rosparamコマンドで操作を行えます。



  • rosparam listで現在登録されているrosparamの一覧が見えます。


  • rosparam get (rosparam名)で特定のrosparamに入っている値が見えます。


サンプルコード


rosノード

rosparamを読んでprintするだけのノードです。


adv_lecture/src/adv_param_display.cpp

#include <ros/ros.h>


int main(int argc, char** argv){
ros::init(argc, argv, "do_dishes_client");
ros::NodeHandle nh;
ros::NodeHandle pnh("~");
int param_data=0;
pnh.getParam("int_param", param_data);
ROS_INFO("[%s] param:%i", ros::this_node::getName().c_str(), param_data);

ros::spin();
return 0;
}



yamlファイル

rosparamの設定をするファイルです。


adv_lecture/config/param_config.yaml

node3:

int_param: 3


launchファイル

今回紹介した3通りの方法でrospramの設定をします。


adv_lecture/launch/rosparam.launch

<launch>

<node name="node1" pkg="adv_lecture" type="adv_param_display" output="screen">
<param name="int_param" value="1"/>
</node>

<param name="node2/int_param" value="2"/>
<node name="node2" pkg="adv_lecture" type="adv_param_display" output="screen"/>

<rosparam command="load" file="$(find adv_lecture)/config/param_config.yaml"/>
<node name="node3" pkg="adv_lecture" type="adv_param_display" output="screen"/>
</launch>



ビルド

cd ~/catkin_ws

catkin_make


実行

roslaunch adv_lecture rosparam.launch 

以下のように表示されるはずです。


結果

[ INFO] [1553304866.778084529]: [/node1] param:1

[ INFO] [1553304866.801218106]: [/node2] param:2
[ INFO] [1553304866.810236210]: [/node3] param:3


参考

paramタグ

rosparamタグ


目次ページへのリンク

ROS講座の目次へのリンク