ROS Master 中有一个 Parameter Server
rosparam
列出当前参数列表
rosparam list
显示某个参数
rosparam get parameter_name
例如如下命令将读取参数/rosdistro的值
rosparam get /rosdistro
设置参数
rosparam set parameter_name parameter_value
该命令可以修改已有参数的值或者创建一个新的参数。
例如如下命令将设置参数
/duck_colors/huey
的值
rosparam set /duck_colors/huey red
创建和加载参数文件
为了以yaml 文件的形式存储命名空间中的所有参数,可以使用
rosparam dump 命令:
rosparam dump filename namespace
与dump相反的命令是load 命令,它从一个文件中读取参数,并将他们添加到参数服务器:
rosparam load filename namespace
对于这些命令,命名空间参数是可选的,默认是全局命名空间(/)
使用
C++
获取参数
使用
ROS
参数的
C++
接口是相当简单的
:
void ros::param::set(parameter_name, input_value);
bool ros::param::get(parameter_name, output_value);
在这两种情况下,参数名是一个字符串,它可以是全局的、 相对的或者是私有的。
set
函数中的输入值
input_value
可以是 std::string、
bool
、
int
或
double
类型;
get
函数的输出值应该是上述某个类型的变量(通过引用传递)。如果参数值读取成功,则get 函数返回
true
;如果出现了问题,通常表示所请求的参数还没有被指定一个值,则该函数返回 false
。
为了查看函数的行为,让我们来看看下面两个实例。
在启动文件中设置参数
另外一种常用的参数设置方法是在启动文件中设置。
设置参数
可以使用
param
元素请求
roslaunch
设置参数值
:
<param name=”param-name” value=”param-value” />
下面的启动文件片段相 当于如下的
rosparam
命令集:
<group ns=”duck_colors”>
<param name=”huey” value=”red” />
<param name=”dewey” value=”blue” />
<param name=”louie” value=”green” />
<param name=”webby” value=”pink” />
</group>
相当于:
rosparam set /duck_colors/huey red
rosparam set /duck_colors/dewey blue
rosparam set /duck_colors/louie green
rosparam set /duck_colors/webby pink
设置私有参数
另一个可选方法是在节点元素中包含
param
元素。
<node . . . >
<param name=”param-name” value=”param-value” />
. . .
</node>
在该结构下,参数名将被当做该节点的私有名称
例:
我们可以使用下面的代码启动 pubvel_with_max 节点,
并且正确设置其私有参数
max_vel
:
<node
pkg=”agitr”
type=”pubvel_with_max”
name=”publish_velocity”
/>
<param name=”max_vel” value=”3″ />
</node>
在文件中读取参数
最后,启动文件也支持 与
rosparam load
等价
的命令,可以一次性从文件中加载多个参数
7
:
<rosparam command=”load” file=”path-to-param-file” />
使用查找替换来指定功能包的相对路径是常见做法:
<rosparam
command=”load”
file=”$(find package-name)/param-file”
/>
版权声明:本文为lvmengzou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。