参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,不同的节点也可以往其中存储数据。
导航实现时,会进行路径规划。设计一个从出发点到目标点的大致路径。本地路径规划,会根据当前路况生成实时的行进路径。路径规划时,需要考虑小车的尺寸,可以将这些尺寸信息存储到参数服务器中,全局路径规划节点与本地路径规划节点都可以从参数服务器中调用这些参数。
概念:
master--->管理者 talker--->参数设置者 listener--->参数调用者
以共享的方式实现不同节点之间数据交互的通信模式。
注意:
参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据
参数服务器可使用数据类型:
32-bit integers
booleans
strings
doubles
iso8601 dates--->时间类型数据
lists--->列表
base64-encoded binary data--->base64编码的二进制数据
字典
需求:
实现参数服务器参数的增删改查操作
在C++中实现参数服务器数据的增删改查,可以通过两套API实现:
ros::NodeHandle
ros::param
参数服务器增、改
#include "ros/ros.h"
/*
需要实现参数的新增和修改
需求:
首先设置机器人的共享参数,类型,半径(0.15m)
再修改半径(0.2m)
实现:
ros::NodeHandle
setParam("键",值)
ros::param
set("键",值)
修改,只需要继续调用setParam或set函数,保证键是已经存在的,那么值会覆盖
*/
int main(int argc, char *argv[])
{
/* code */
setlocale(LC_ALL,"");
//初始化ROS节点
ros::init(argc,argv,"set_param_c");
//创建ROS句柄
ros::NodeHandle nh;
//参数增-------------------------------------
//方案1:nh
nh.setParam("type","xiaoHuang");
nh.setParam("radius",0.15);
//方案2:ros::param
ros::param::set("type_param","xiaoBai");
ros::param::set("radius_param",0.15);
//参数改-------------------------------------
//方案1:nh
nh.setParam("radius",0.2);
//方案2:ros::param
ros::param::set("radius_param",0.25);
return 0;
}