ROS参数的使用与编程方法
参考博客古月居21讲
在ROS master 中有一个参数服务器,名为Parameter Server, 他是一个全局字典,用来保存各个节点之间的配置参数, 运行之后每一个节点都可以访问其中的参数,只要节点向参数服务器发送查询请求,就会返回相应的参数。各个节点不一定就都位于同一个电脑中,但只要在同样的ROS环境里面都可以通过parameter server来查询全局字典的参数。
parameter server 是除了 订阅/发布,客户/服务,action客户/服务之外的第四种通信机制。
一般情况下,参数都是存放在YAML文件中。调用YAML文件的指令为rosparam。
-
创建一个功能包
进入src文件夹,打开终端,创建新功能包
-
rosparam 介绍 及shell命令行操作
输入$ rosparam
会返回提示以下信息
rosparam is a command-line tool for getting, setting, and deleting parameters from the ROS Parameter Server.
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
其中
ITEM | EXPAIN |
---|---|
rosparam list | 列出当前的所有参数; |
rosparam get param_key | 显示某个参数的值; |
rosparam set param_key param_value | 设置某个参数的值; |
rosparam dump {FILE_NAME} | 保存参数到某个文件中; |
rosparam load {FILE_NAME} | 从文件读取参数; |
rosparam delete param_key | 删除参数; |
运行小海龟
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosparam list
可见
/rosdistro
/roslaunch/uris/host_jpy_surface_pro__44191
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_r
可以通过 get 来查看值
rosdistro
为ros当前的发行版本–melodic
rosversion
为当前版本号 --1.14.7
run_id
为当前进程号 --8122c01e-e2b3-11ea-bb1d-f06e0bca26d1
运行rosparam dump param.yaml
之后,可以在当前终端所在路径下找到对应的 param.yaml
文件。
rosparam load {FILE_NAME}
执行的也是当前终端所在文件路径下的加载指令。
- 通过程序设置param
在功能包文件夹src下面新建cpp文件,键入代码
#include<ros/ros.h>
#include<string>
#include<std_srvs/Empty.h>
int main (int argc,char **argv){
int red,green,blue;
ros::init(argc,argv,"paramter_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 Background 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 Background Color ");
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 Background 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;
}
修改CMakeLists.txt
编译
设置环境变量
检查环境变量
运行调试