一、概念
ROS Master中有一个参数服务器Paramester Server,它是一个全局字典, 是用来保存各个节点之间的配置参数的。
二、rosparam
那对于各个节点的参数,我们可以rosparam XXX等对其进行查看,修改等多种操作,具体操作可通过终端输入rosparam指令查看。
试一下在没有打开任何节点时,ros系统中的全局参数。
然后我打开小海龟节点后,当前系统中的全局参数有:
可以看到,打开小海龟节点之后多了三个参数,这三个参数是用来设置小海龟背景板RGB值的。
需要注意每一个background前的命名空间,今后无论是查看还是修改都要带着这个命名空间。
可以通过get的指令查看一下:
2.1 通过命令行修改全局参数
下面我们来尝试在命令行修改一下这些参数:
我先用rosparam set 将b值改为0,然后用rosparam get 查看b值发现更改生效。可是小海龟的背景颜色还是这个蓝色,并没有更改。所以这里需要注意,命令行更改参数不具有实时性,因此如果是用命令行修改的参数,还需要再重新发送一次参数更改请求,参数更改请求命令如下:
2.2 保存当前系统的全局参数
可以使用 rosparam dump 文件名.yaml来保存当前系统的全局参数,需要注意的是文件的保存路径默认是主目录
保存后的.yaml文件如下:
我们也可以在这个.yaml中修改参数值。
例如:我把background_g改为255
保存文件后,需要通过rosparam load 文件名.yaml加载修改后的文件,然后再重新发送一次参数更改请求。
2.3 通过程序设置全局参数
在当前工作空间中创建learning_parameter功能包,并在其中编写如下c++程序parameter_config:
/***********************************************************************
Copyright 2020 GuYueHome (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;
}
写完程序,编译完了之后,重启roscore,运行小乌龟节点,然后运行程序
运行结果如下;