本文以c语言为例子,对参数进行增删改查的操作
#include "ros/ros.h"
/*
实现参数的新增和修改
需求:首先设置小车的共享参数和类型,半径 0.5 然后修改为 0.2
实现:使用两套API
使用1.ros::NodeHandle
setParam(“键”,值)
2.ros::param
set("键",值)
*/
int main(int argc,char *argv[])
{
ros::init(argc,argv,"set_param");
ros::NodeHandle nh ;
/*参数的新增 方案一*/
nh.setParam("type","wall_E");/*设置参数的名称和内容*/
nh.setParam("radius",0.5);
/*参数的新增 方案二*/
ros::param::set("type_p","wall_A");
ros::param::set("radius_a",0.5);
/*在终端,rosparam list 可以列出所有的参数 rosparam get 参数名 可以查看参数的详细情况*/
/*修改参数,会把之前的参数设置进行覆盖*/
nh.setParam("radius",0.2);
ros::param::set("radius_a",0.22);
return 0;
}
#include "ros/ros.h"
/*
参数服务器操作之查询_C++实现:
在 roscpp 中提供了两套 API 实现参数操作
ros::NodeHandle
param(键,默认值)
存在,返回对应结果,否则返回默认值
getParam(键,存储结果的变量)
存在,返回 true,且将值赋值给参数2
若果键不存在,那么返回值为 false,且不为参数2赋值
getParamCached键,存储结果的变量)--提高变量获取效率
存在,返回 true,且将值赋值给参数2
若果键不存在,那么返回值为 false,且不为参数2赋值
getParamNames(std::vector<std::string>)
获取所有的键,并存储在参数 vector 中
hasParam(键)
是否包含某个键,存在返回 true,否则返回 false
searchParam(参数1,参数2)
搜索键,参数1是被搜索的键,参数2存储搜索结果的变量
ros::param ----- 与 NodeHandle 类似
*/
int main(int argc,char *argv[])
{
ros::init(argc,argv,"get_param");
ros::NodeHandle nh ;
// ros::nodehandle -----
//1.param
double radius = nh.param("radius",0.1);//查询键为radius的值,如果值不存在就输出默认值0.1
ROS_INFO("RADIUS = %.2f",radius);
//2.getParam
double radius2=0.0;
bool result=nh.getParam("radius_a",radius2); //getParem的返回值是bool类型
if(result)
{
ROS_INFO ("radius2 = %.2f",radius2);
}
else{
ROS_INFO("don't find !");
}
//3.getParamCached 与getParam 类似只是性能上有所提升
bool result1=nh.getParamCached("radius",radius2);
if(result)
{
ROS_INFO("radius2 = %.3f",radius2);
}
else {
ROS_INFO("DON'T find !");
}
//4.getParamNames 遍历所有的参数名称
std::vector<std::string> names;
nh.getParamNames(names);
for(auto &&name : names)
{
ROS_INFO ("element %s", name.c_str());
}
//5 hasParam(键)
bool result2=nh.hasParam("radius");
bool result3=nh.hasParam("ddd");
ROS_INFO("radius ? %d",result2);
ROS_INFO("ddd ? %d",result3);
//6.searhParam 搜索键名,并把搜索到的键存入key1
std::string key1;
nh.searchParam("radius",key1);
ROS_INFO("KEY1 = %s ",key1.c_str());
//ros::param:: -----------------
//ros::param::param 获取参数的值通过输入的键名,如果没有该参数则返回一个默认值
double rds=ros::param::param("radius",12);
ROS_INFO (" rds = %.2f",rds);
//其他的ros::param 的函数 和nodehandle的函数是类似的
return 0;
}
#include "ros/ros.h"
/*
参数的删除操作:
还是使用两套API
ros::nodehandle
ros::param
*/
int main(int argc,char*argv[])
{
ros::init(argc,argv,"delete_param");
// API1 nodehandle . deletParam
ros::NodeHandle nh;
bool flag1=nh.deleteParam("radius");
if(flag1)
{
ROS_INFO("deledt successuful ");
}
else {
ROS_INFO("failed !!");
}
//API2 ros::param::del
bool flag2=ros::param::del("radius_a");
if(flag2)
{
ROS_INFO (" DELETE SUCCESSEFUL");
}
else {
ROS_INFO("FAILED");
}
return 0;
}