一、ROS Master中的参数的使用
每次运行程序的时候第一个终端一般都是输入: roscore命令来打开ROS Master,这里不仅会登记每一个节点,同时ROS Master中的Parameter Server通过全局字典的参数模型还存储着很多的参数供节点们使用。本节我们将使用命令和程序来查看ROS Master中的参数。
二、参数命令行的使用
1、rosparam list 列出当前有多少参数
rosparam list
注意这里需要你有一个终端里面提前输入:roscore 来打开ROS Master
2、rosparam get + 参数 显示某个参数值
再打开一个终端输入rosrun turtlesim turtlesim_node
rosparam get /turtlesim/background_b
3、rosparam set + 参数 + 数值 设置某个参数值
rosparam set /turtlesim/background_b 100
注意这里虽然你设置完了,值确实也变了,但是为什么background并没有变色?这里turtlesim这个节点node,他自己不知道值变了,当下一次数据传输时才会去检测,所以我们让他进行一下数据传输。
rosparam get /turtlesim/background_b 检测值是否变
rosservice call /clear "{}" 这句命令会更新参数
4、rosparam dump + 保存文件名 将参数保存在文件里面
rosparam dump param.yaml
将参数都保存到param.yaml里了。值得一提的是,这个命令会将文件放在当前文件夹里,所以您要注意您此刻的文件目录位置,可以使用pwd来查看。
您可以使用nodepad++来查看一下param.yaml里面的内容
5、rosparam load + 文件 用文件的方式修改参数
rosparam load param.yaml
rosservice call /clear "{}" 这句命令会更新参数
注意这里我们先要把里面的参数改改,不然看不到效果。比如您可以将rgb全改为255,即白色。
6、rosparam delete + 参数 删除指定参数
rosparam delete /turtlesim/background_b
rosparam list
rosservice call /clear "{}"
三、使用程序修改参数
1、创建功能包
cd ~/catkin_ws
catkin_creat_pkg learning_parameter roscpp rospy std_srvs
2、编写参数使用的代码
cd ~/catkin_ws/src/learning_parameter/src
touch Parameter_config.cpp
使用nodepad++编辑代码:
/***********************************************************************
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;
}
3、修改CMakeLists.txt的编译规则
注意是在learning_parameter功能包下的CMakeLists.txt的#bulid那一栏的最末尾添加这么两句:
add_executable(Parameter_config src/Parameter_config.cpp)
target_link_libraries(Parameter_config ${catkin_LIBRARIES})
4、编译并运行代码
cd ~/catkin_ws
catkin_make
source devel/setup.bash 值得一提的是,这一步如果您按照了之前的文章来做,可以省略。(《Ubuntu20.04环境下的ROS学习笔记4》-CSDN博客)
到这里编译完成。
接下来是运行程序,老样子还是打开3个终端:
第一个终端输入: roscore
第二个终端输入: rosrun turtlesim turtlesim_node
第三个终端输入: rosrun learning_parameter Parameter_config
您将会看到背景由蓝变白,且回弹信息打印出之前RGB的值和现在RGB的值。
值得注意的是在20.04里面参数叫做/turtlesim/background_b,在18.04里叫做/background_b,若本程序不能实现,您可以用rosparam list看看您的参数列表里面的background的参数是否因为版本迭代而改名。