机器人工作时,我们有需要对机器人的参数(如传感器参数、算法的参数)进行设置。
有些参数(如机器人的轮廓、传感器的高度)在机器人启动时就设定好就行了;
有些参数则需要动态改变(特别是在调试的时候)。
ROS提供了参数服务器来满足这一需求。我们可以将参数设置在参数服务器,在需要用到参数的时候再从参数服务器中获取。
rosparam命令可对ROS参数服务器上的参数进行操作。通过rosparam -h命令,可以看到有下面的一些方法:
Commands:
rosparam set set parameter 设置参数
rosparam get get parameter 获得参数值
rosparam load load parameters from file 从文件中加载参数到参数服务器
rosparam dump dump parameters to file 将参数服务器中的参数写入到文件
rosparam delete delete parameter 删除参数
rosparam list list parameter names 列出参数服务器中的参数
一般地,我们可以将需要设置的参数保存在yaml文件中,使用rosparam load [文件路径\文件名] 命令一次性将多个参数加载到参数服务器。
(yaml文件的格式和使用方法:https://www.ibm.com/developerworks/cn/xml/x-1103linrr/)
举个例子,一个名称为param.yaml的参数文件,内容为:
#There are some params which will be loaded
yaml_param_string1: abcd123
yaml_param_string2: 567efg
yaml_param_num1: 123.123
yaml_param_num2: 1234567
yaml_param_set:
param_set_string1: zzzzz
param_set_num1: 999
param_set_string2: a6666
param_set_num2: 2333
param_subset:
param_set_string1: qwer
param_set_num1: 5432
param_set_string2: a12s3
param_set_num2: 1111
现在,我们要其中的参数加载到ROS的参数服务器中。
启动roscore,输入:
$ rosparam load param.yaml
然后,输入命令:
$ rosparam list
可以看到,参数已经被全部加载了:
/rosdistro
/roslaunch/uris/host_clp_virtual_machine__46453
/rosversion
/run_id
/yaml_param_num1
/yaml_param_num2
/yaml_param_set/param_set_num1
/yaml_param_set/param_set_num2
/yaml_param_set/param_set_string1
/yaml_param_set/param_set_string2