ROS参数服务器(参数使用详细介绍)

       参数服务器是可通过网络访问的共享的多变量字典。它是节点存储参数的地方、用于配置参数、全局共享参数。参数服务器使用互联网传输,在节点管理器中运行,实现整个通信过程。它使用XMLRPC数据类型为参数赋值,包括以下类型:32位整数、布尔值、字符串、双精度浮点、ISO 8601日期、列表(List)、基于64位编码的二进制数据。

       参数服务器的配置方式非常的简单灵活,总的来讲有三种方式:命令行维护、launch文件内读写、node源码。

 

  • 命令行维护

 ROS中关于参数服务器的工具是rosparam。其支持的参数如下所示:

命令

作用

rosparam list

列出了服务器中的所有参数

rosparam get [parameter]

获取参数值

rosparam set [parameter] [value]

设置参数值

rosparam delete [parameter]

删除参数

rosparam dump [file]

将参数服务器保存到一个文件

rosparam load [file]

加载参数文件到参数服务器

  • launch文件内读写

在前面讲到launch文件时,提到launch文件有很多标签,其中有,以激光雷达驱动lidar.launch文件为例:




















 可以看出,param是设置单个参数。

以导航驱动move_base.launch文件为例:










 可以看出,rosparam是用于加载参数文件的,而参数文件可以包含许多参数。

  • node源码

 param的操作非常轻巧,非常简单。关于param的API,roscpp提供了两套:ros::param namespace和ros::NodeHandle;它们的操作完全一样。

#include
int main(int argc, char **argv){
ros::init(argc, argv, "param_demo");
ros::NodeHandle nh;
int param1, param2, param3, param4, param5;

//Get Param的三种方法
//① ros::param::get()获取参数“param1”的value,写入到param1上
bool test1 = ros::param::get("param1", param1);

//② ros::NodeHandle::getParam()获取参数,与①作用相同
bool test2 = nh.getParam("param2",param2);

//③ ros::NodeHandle::param()类似于①和②
//但如果get不到指定的param,它可以给param指定一个默认值(如1)
nh.param("param3", param3, 1);

//Set Param
//① ros::param::set()设置参数
param4 = 4;
ros::param::set("param4", param4);

//② ros::NodeHandle::setParam()设置参数
param5 = 5;
nh.setParam("param5",param5);

//Check Param

//① ros::NodeHandle::hasParam()
bool ifparam5 = nh.hasParam("param5");

//② ros::param::has()
bool ifparam6 = ros::param::has("param6");

//Delete Param

//① ros::NodeHandle::deleteParam()
bool ifdeleted5 = nh.deleteParam("param5");

//② ros::param::del()
bool ifdeleted6 = ros::param::del("param6");
}

 

你可能感兴趣的:(ros基础学习,c++学习)