在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
运行结果:
如果出现以下报错,有可能是话题名字不对,重新输入话题名字即可。
double radius2 = 0.0;
bool result = nh.getParam( "radius" , radius2);
if ( result)
{
ROS_INFO("获取的半径是:%.2f" , radius2);
}else {
ROS_INFO("被查询的变量不存在。");
}
分别运行以下:
rosrun plumbing_param_server demo01_param_set
rosrun plumbing_param_server demo02_param_get
与getParam类似,只是性能上有提升,一般测试下,看不出来。结果一样。
bool result = nh.getParimCached ( " radius" , radius2);
if ( result)
{
ROS_INFO("获取的半径是:%.2f" , radius2);
}else {
ROS_INFO("被查询的变量不存在。");
}
std::vector<std::string>names;
nh.getParamNames(names ) ;
for (auto &&name : names)
{
ROS_INFO("遍历的元素:%s " , name.c_str());
}
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,为假。
std::string key;
nh. searchParam ( "radius" , key);
ROS_INFO("搜索结果:%s" , key.c_str());
double radius param = ros : :param::param( "radius",100.5);
ROS_INFO( " radius_param = %.2f" , radius_param);
std::vector<std::string> names_param;
ros::param::getParamNames (names_param);
for (auto &&name : names_param)
{
ROS_INFO("键:%s" , name.c_str());
}