[学习笔记]参数服务器

好家伙今天翻博客发现了之前的参数服务器相关的东西没有发布,今天发出来吧

~~~~~~~~~~~~~~~~

参数服务器,顾名思义就是参数的服务器[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;
}

 (完)

posted @ 2022-10-14 12:16  阿基米德的澡盆  阅读(124)  评论(0编辑  收藏  举报