本文以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; }