【ROS参数服务器增删改c++操作2】

在plumbing_param_server下面的src新建文件
命名demo01__param_get.cpp
编辑cmakelist.txt

参数查询:

演示参数查询
实现:

 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与上面一样的。

输入以下代码:

#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 radius = nh.param ( "radius" ,0.5);
ROS_INFO( "radius = %.2f" , radius ) ;   
    return 0;
}

完毕之后ctrl+shift+b进行编译。
然后ctrl+alt+t打开终端
输入roscore启动ros。
然后新开两个终端,分别运行以下:
rosrun plumbing_param_server demo01_param_set
rosrun plumbing_param_server demo02_param_get
【ROS参数服务器增删改c++操作2】_第1张图片
运行结果:
【ROS参数服务器增删改c++操作2】_第2张图片
如果出现以下报错,有可能是话题名字不对,重新输入话题名字即可。
【ROS参数服务器增删改c++操作2】_第3张图片

// 2.getParam

double radius2 = 0.0;
bool result = nh.getParam( "radius" , radius2);
if ( result)
{
ROS_INFO("获取的半径是:%.2f" , radius2);
}else {
ROS_INFO("被查询的变量不存在。");
}

【ROS参数服务器增删改c++操作2】_第4张图片
分别运行以下:
rosrun plumbing_param_server demo01_param_set
rosrun plumbing_param_server demo02_param_get

运行结果:
【ROS参数服务器增删改c++操作2】_第5张图片

//3.getParamCached

与getParam类似,只是性能上有提升,一般测试下,看不出来。结果一样。

 bool result = nh.getParimCached ( " radius" , radius2);
 if ( result)
{
ROS_INFO("获取的半径是:%.2f" , radius2);
}else {
ROS_INFO("被查询的变量不存在。");
}

【ROS参数服务器增删改c++操作2】_第6张图片
结果一样:
【ROS参数服务器增删改c++操作2】_第7张图片

// 4.getParamNames

std::vector<std::string>names;
nh.getParamNames(names ) ;
for (auto &&name : names)
{
ROS_INFO("遍历的元素:%s " , name.c_str());
}

运行结果:
【ROS参数服务器增删改c++操作2】_第8张图片

// 5.hasParam

bool flag1 = nh.hasParam( "radius" );
bool flag2 = nh.hasParam( "radiusxxx" );
ROS_INFO( " radius 存在吗? %d" ,flag1);
ROS_INFO( " radiusxx 存在吗?%d" , flag2);

运行结果:可以先rosparam list列出当前打开的节点,如果存在flag1=1,为真,如果不存在flag1=0,为假。
【ROS参数服务器增删改c++操作2】_第9张图片

// 6.searchParam

std::string key;
nh. searchParam ( "radius" , key);
ROS_INFO("搜索结果:%s" , key.c_str());

运行结果:
存在输出
【ROS参数服务器增删改c++操作2】_第10张图片不存在输出
【ROS参数服务器增删改c++操作2】_第11张图片

ros::param -------与上述同理,单独演示以下两个。

double radius param = ros : :param::param( "radius",100.5);
ROS_INFO( " radius_param = %.2f" , radius_param);

运行结果:
【ROS参数服务器增删改c++操作2】_第12张图片

std::vector<std::string> names_param;
ros::param::getParamNames (names_param);
for (auto &&name : names_param)
{
ROS_INFO("键:%s" , name.c_str());
 }

运行结果:
【ROS参数服务器增删改c++操作2】_第13张图片

你可能感兴趣的:(Ubuntu系统,#,学习笔记,人工智能,服务器,c++,运维,linux,ubuntu)