ROS:参数服务器的增删改查


参数服务器实现是最为简单的,该模型如下图所示,该模型中涉及到三个角色:

ROS Master (管理者)
Talker (参数设置者)
Listener (参数调用者)

ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。
在这里插入图片描述

增加参数与修改参数

代码

#include "ros/ros.h"

/*
        需要实现参数的新增与修改
        需求:首先设置机器人的共享参数,类型、半径(0.15m)
                再修改半径(0.2m)
        实现:
                ros::NodeHandle
                        setParam();
                ros::param
                        set();
*/

int main(int argc,char *argv[])
{
        setlocale(LC_ALL,"");
        //初始化ROS节点
        ros::init(argc,argv,"jiqi");
        //创建ROS节点句柄
        ros::NodeHandle nh;
        ROS_INFO("成功操作参赛服务器");
        //参数增------------------------------
        //方案一:nh
        nh.setParam("type1","xiaohong");
        nh.setParam("radius1",0.15);
        //方案二:ros::param
        ros::param::set("type2","xiaobai");
        ros::param::set("radius2",0.2);
        //参数改------------------------------
        //方案一:nh
        nh.setParam("radius1",0.35);
        //方案二:ros::param
        ros::param::set("radius2",0.4);
        return 0;
}

配置修改

在这里插入图片描述

add_executable(demo01_param_set src/demo01_param_set.cpp)

target_link_libraries(demo01_param_set
  ${catkin_LIBRARIES}
)

程序实现

在这里插入图片描述

查找参数

    参数查询
    实现:
            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 类似

代码

#include "ros/ros.h"

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 arr1 = nh.param("radius1",0.1);
                // ROS_INFO("半径:%.2f",arr1);
        //2.getParam
                // double radius = 0.0;
                // bool arr2 = nh.getParam("radius12",radius);
                // if(arr2)
                // {
                //         ROS_INFO("获取的半径是:%.2f",radius);
                // }
                // else
                // {
                //         ROS_INFO("查询变量不存在。");
                // }
        //3.getParamCached
                // double radius2 = 0.0;
                // bool arr3 = nh.getParamCached("radius1",radius2);
                // if(arr3)
                // {
                //         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("radius1");
                // bool flag2 = nh.hasParam("radius1xxx");
                // ROS_INFO("radius1存在吗?%d",flag1);
                // ROS_INFO("radius1xxx存在吗?%d",flag2);
        //6.searchParam
                // std::string key;
                // nh.searchParam("radius1",key);
                // ROS_INFO("搜索结果:%s",key.c_str());
        //ros::param-----------------------------------------------------------------
                //1.param
                        // double arr = ros::param::param("radius1",0.1);
                        // ROS_INFO("半径:%.2f",arr);
                //2.getParam
                        std::vector<std::string> names;
                        ros::param::getParamNames(names);
                        for (auto &&name  :names)
                        {
                                ROS_INFO("遍历的元素:%s",name.c_str());
                        }
        return 0;
}

配置修改

在这里插入图片描述

add_executable(demo02_param_gat src/demo02_param_gat.cpp)

target_link_libraries(demo02_param_gat
  ${catkin_LIBRARIES}
)

程序实现

在这里插入图片描述

删除参数

代码

#include "ros/ros.h"

/*
        需要实现参数的新增与修改
        需求:首先设置机器人的共享参数,类型、半径(0.15m)
                再修改半径(0.2m)
        实现:
                ros::NodeHandle
                        setParam();
                ros::param
                        set();
*/

int main(int argc,char *argv[])
{
        setlocale(LC_ALL,"");
        //初始化ROS节点
        ros::init(argc,argv,"jiqi");
        //创建ROS节点句柄
        ros::NodeHandle nh;
        ROS_INFO("成功操作参数服务器");
        //参数增------------------------------
        //方案一:nh
        nh.setParam("type1","xiaohong");
        nh.setParam("radius1",0.15);
        //方案二:ros::param
        ros::param::set("type2","xiaobai");
        ros::param::set("radius2",0.2);
        //参数改------------------------------
        //方案一:nh
        nh.setParam("radius1",0.35);
        //方案二:ros::param
        ros::param::set("radius2",0.4);
        return 0;
}

配置修改

在这里插入图片描述

add_executable(demo03_param_del src/demo03_param_del.cpp)

target_link_libraries(demo03_param_del
  ${catkin_LIBRARIES}
)

程序实现

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值