一、参数模型

在ROS Master中有一个Parameter Server参数服务器,它是一个全局字典,用来保存各种配置参数,配置参数是各个节点都可以全局访问的。

二、使用方法

1. 列出当前所有参数

1
rosparam list

2. 显示某个参数值

1
rosparam get param_key

3. 设置某个参数值

1
rosparam set param_key param_value

4. 保存参数到文件

1
rosparam dump file_name

5. 从文件读取参数

1
rosparam load file_name

6. 删除参数

1
rosparam delete param_key

三、举例

1. 创建功能包

1
2
cd ~/catkin_ws/src
catkin_create_pkg learning_parameter roscpp rospy std_srvs

2. 打开小海龟仿真器

打开一个终端,启动roscore:

1
roscore

再打开一个终端,运行小海龟仿真程序

1
rosrun turtlesim turtlesim_node

3. rosparam命令行的使用

(1)查看参数列表

1
rosparam list

(2)得到变量的值:背景颜色RGB的值

1
2
3
rosparam get /turtlesim/background_r
rosparam get /turtlesim/background_g
rosparam get /turtlesim/background_b

(3)修改变量的值:更改背景颜色

1
rosparam set /turtlesim/background_b 100

重新发送请求,刷新背景颜色

1
rosservice call /clear "{}"

(4)保存参数到文件

1
rosparam dump param.yaml

参数默认保存到当前目录

(5)加载参数文件

打开刚刚保存的参数文件,对其中的参数值进行修改。

1
rosparam load param.yaml

即可将文件里面的参数内容修改系统内的参数。

(6)删除参数

1
rosparam delete /turtlesim/background_g

查看参数列表

1
rosparam list

刷新小海龟仿真器背景颜色

1
rosservice call /clear "{}"

四、通过程序获取、设置参数的值

1. 编写cpp程序

在learning_parameter/src/目录下创建一个parameter_config.cpp的文件

其内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* 该例程设置/读取海龟例程中的参数
* REFERENCE:www.guyuehome.com
*/
#include <string>
#include <ros/ros.h>
#include <std_srvs/Empty.h>

int main(int argc, char **argv)
{
int red, green, blue;

// ROS节点初始化
ros::init(argc, argv, "parameter_config");

// 创建节点句柄
ros::NodeHandle node;

// 读取背景颜色参数
ros::param::get("/turtlesim/background_r", red);
ros::param::get("/turtlesim/background_g", green);
ros::param::get("/turtlesim/background_b", blue);

ROS_INFO("Get Backgroud Color[%d, %d, %d]", red, green, blue);

// 设置背景颜色参数
ros::param::set("/turtlesim/background_r", 255);
ros::param::set("/turtlesim/background_g", 255);
ros::param::set("/turtlesim/background_b", 255);

ROS_INFO("Set Backgroud Color[255, 255, 255]");

// 读取背景颜色参数
ros::param::get("/turtlesim/background_r", red);
ros::param::get("/turtlesim/background_g", green);
ros::param::get("/turtlesim/background_b", blue);

ROS_INFO("Re-get Backgroud Color[%d, %d, %d]", red, green, blue);

// 调用服务,刷新背景颜色
ros::service::waitForService("/clear");
ros::ServiceClient clear_background = node.serviceClient<std_srvs::Empty>("/clear");
std_srvs::Empty srv;
clear_background.call(srv);

sleep(1);

return 0;
}

2. 编译程序

打开learning_parameter/下的CMakeList.txt文件,在其中添加编译规则。(install上方)

1
2
add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})

进行编译

1
2
cd catkin_ws
catkin_make

3. 运行程序

运行roscore

1
roscore

运行小海龟仿真程序

1
rosrun turtlesim turtlesim_node

运行刚才编写的节点

1
rosrun learning_parameter parameter_config

发现小海龟的颜色被改变了,说明程序执行成功