好家伙今天翻博客发现了之前的参数服务器相关的东西没有发布,今天发出来吧
~~~~~~~~~~~~~~~~
参数服务器,顾名思义就是参数的服务器[doge]
咳咳
参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用
1、参数的发布
有两套不同的API,直接上代码,东西写在注释里
#include <ros/ros.h> using namespace ros; int main(int argc, char *argv[]) { init(argc, argv, "srv"); NodeHandle nh; //两套方案,设置参数
//NodeHandle的API nh.setParam("type","yellow");//分别是参数名字,参数的值 nh.setParam("radius", 0.15);//自动识别类型(应该)
//param的API param::set("type_param", "red"); param::set("radius_param", 15);
//修改,就是重新设置,覆盖原参数 nh.setParam("radius", 2); return 0; }
2、参数的获取
有不少几个API,直接上代码
#include <bits/stdc++.h> #include <ros/ros.h> using namespace std; using namespace ros; int main(int argc, char* argv[]) { init(argc, argv,"get_param"); NodeHandle nh; { //1、param double radius1 = nh.param("radius", 0.5); ROS_INFO("radius1: %f\n", radius1); //查询名为radius的值,如果没有返回0.5 } { //2、getParam double radius2=114514; bool result = nh.getParam("radius", radius2); //如果参数存在,则bool变量为1,且把值存在第二个变量中,否则不改变值 if(result==1) ROS_INFO("radius2: %f\n", radius2); else ROS_INFO("ERROR"); } { //3、getParamCached double radius3=114514; bool res=nh.getParamCached("radius", radius3); if(res) { ROS_INFO("radius3: %f\n", radius3); } else { ROS_INFO("ERROR"); } } { //4、getParamNames遍历所有的参数服务器并存到叔祖里 vector<string> names; nh.getParamNames(names); for(auto &&name : names) { ROS_INFO("the elements are:%s",name.c_str()); } cout << endl; } { //5、hasParam查看参数是否存在 bool flag1 = nh.hasParam("radius"); bool flag2 = nh.hasParam("radius1"); ROS_INFO("%d%d", flag1, flag2); } { //6、searchParam,存在返回名字,不存在不返回东西 string key="233"; nh.searchParam("radiu1s", key); ROS_INFO("the result is:%s",key.c_str()); } return 0; }
(完)
标签:nh,ROS,param,radius,笔记,服务器,参数 From: https://www.cnblogs.com/ajmddzp/p/16791228.html