文章目录
参数服务器
一、参数服务器理论模型
二(A)、参数操作A(C++)
1.参数服务器新增(修改)参数
案例代码:
#include "ros/ros.h"
/*
需要实现西安书的新增与修改
要求:首先设置机器人的共享参数,类型,半径(0.15m)
再修改半径(2.0m)
实现:ros::NodeHandle
setParam("键",值)
ros::param
set("键",值)
修改,只需要继续调研 setParam 或 set 函数,保证键是已经存在的,那么值会覆盖。
*/
int main(int argc, char *argv[])
{
//初始化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;
}
2.参数服务器获取参数
案例代码:
#include "ros/ros.h"
/*
演示参数查询
实现:
ros::NodeHandle-------------------------------------------------------------
param(键,默认值)
存在,返回对应结果,否则返回默认值
getParam(键,存储结果的变量)
存在,返回 ture,且将值赋值给参数2
如果键不存在,那么返回值为 false,且不为参数2赋值
getParamCached(键,存储结果的变量)--提高变量获取效率
存在,返回 true,且将值赋值给参数2
如果键不存在,那么返回值为 false,且不为参数2赋值
getParamNames(std::vector<std::string>)
获取所有的键,并存储在参数 vector 中
hasParam(键)
是否包含某个键,村子阿返回 true,否则返回false
searchParam(参数1,参数2)
搜索键,参数1是被搜索的键,参数2存储搜索结果的变量
ros::param--------------------------------------------------------------------------------
*/
int main(int argc, char *argv[])
{
//设置编码
setlocale(LC_ALL,"");
//初始化ROS节点
ros::init(argc,argv,"get_param_c");
//创建节点句柄
ros::NodeHandle nh;
//ros::NodeHandle-------------------------------------------------------------------
//1.param
double radius = nh.param("radius",0.5);
ROS_INFO("radius = %.2f",radius);
//2.getParam
double radius2 = 0.0;
//bool result = nh.getParam("radius",radius2);
//3.getParamCached 与 getParam 类似,只是性能上有提升,一般测试下,看不出来
bool result = nh.getParamCached("radius",radius2);
if(result)
{
ROS_INFO("获取的半径是:%.2f",radius2);
}
else
{
ROS_INFO("被查询的变量不存在。");
}
//4.getParamNames
std::vector<std::string>names;
nh.getParamNames(names);
for(auto &&name:names)
{
ROS_INFO("遍历的元素:%s",name.c_str());
}
//5.hasParam
bool flag1 = nh.hasParam("radius");
bool flag2 = nh.hasParam("radiusxxx");
ROS_INFO("radius 存在吗?%d",flag1);
ROS_INFO("radiusxxx 存在吗?%d",flag2);
//6.searchParam
std::string key;
nh.searchParam("radius",key);
ROS_INFO("搜索结果:%s",key.c_str());
//ros::param-----------------------------------------------------------------------
double radius_param = ros::param::param("radius",100.5);
ROS_INFO("radius_param = %.2f",radius_param);
std::vector<std::string> names_param;
ros::param::getParamNames(names_param);
for(auto &&name : names_param)
{
ROS_INFO("键:%s",name.c_str());
}
return 0;
}
3.参数服务器删除参数
案例代码:
# include "ros/ros.h"
/*
演示参数删除:
实现:
ros::NodeHandle
delparam()
ros::param
del()
*/
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
ros::init(argc,argv,"param_del_c");
ros::NodeHandle nh;
//删除:NodeHandle------------------------------------------------
bool flag1 = nh.deleteParam("radius");
if(flag1)
{
ROS_INFO("删除成功!");
}
else
{
ROS_INFO("删除失败!");
}
//删除:ros::param---------------------------------------------------
bool flag2 = ros::param::del("radius_param");
if(flag2)
{
ROS_INFO("radius_param 删除成功!");
}
else
{
ROS_INFO("radius_param 删除失败!");
}
return 0;
}
三(B)、参数操作B(python)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。