首页
最新活动
服务器租用
香港服务器租用
台湾服务器租用
美国服务器租用
日本服务器租用
新加坡服务器租用
高防服务器
香港高防服务器
台湾高防服务器
美国高防服务器
裸金属
香港裸金属服务器
台湾裸金属服务器
美国裸金属服务器
日本裸金属服务器
新加坡裸金属服务器
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
CDN
CDN节点
CDN带宽
CDN防御
CDN定制
行业新闻
官方公告
香港服务器资讯
帮助文档
wp博客
zb博客
服务器资讯
联系我们
关于我们
机房介绍
机房托管
登入
注册
帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
联系客服
服务器资讯
/
香港服务器租用
/
香港VPS租用
/
香港云服务器
/
美国服务器租用
/
台湾服务器租用
/
日本服务器租用
/
官方公告
/
帮助文档
ROS参数服务器 理论+实操(C++)
发布时间:2024-03-06 22:03:10 分类:帮助文档
ROS参数服务器 理论+实操(C++) 目录 1.概念 2.作用 3.机制 注意!!! 4.数据类型 注意!!! 5.实操 1.参数服务器新增(修改)参数 2.参数服务器获取参数 3.参数服务器删除参数 1.概念 以共享的方式实现不同节点之间数据交互的通信模式。 2.作用 存储一些多节点共享的数据,类似于全局变量。 3.机制 1.Talker设置变量 Talker使用RPC向ROSMaster发送参数设置数据,包含参数名和参数值;ROS Master会将参数名和参数值保存到参数列表中。 2.Listener查询参数值 Listener通过RPC向ROSMaster发送参数查找请求,包含所要查找的参数名 3.ROS Master向Listener发送参数值 Master根据Listener的查找请求从参数列表中进行查找,查找到参数后,使用RPC将参数值发送给Listener。 注意!!! 如果Talker向Master更新参数值,Listener在不重新查询参数值的情况下是无法知晓参数值已经被更新的。所以在很多应用场景中,需要一种动态参数更新的机制 4.数据类型 参数可使用数据类型: 32-bit integers booleans strings doubles iso8601 dates lists base64-encoded binary data 字典 注意!!! 参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据 5.实操 实现参数增删改查操作 ps: 1.先进行功能包的建立(详情参见: ROS话题通信 理论+实操(C++)-博客) 2.在src/下建立实操(增改删查)cpp文件 3.配置CMake.Lists.txt文件 (详情参见:ROS话题通信 理论+实操(C++)-博客) 在 C++ 中实现参数服务器数据的增删改查,可以通过两套 API 实现: ros::NodeHandle ros::param 1.参数服务器新增(修改)参数 参数服务器操作之新增与修改(二者API一样)_C++实现: 在 roscpp 中提供了两套 API 实现参数操作 ros::NodeHandle setParam("键",值) ros::param set("键","值") 示例:分别设置整形、浮点、字符串、bool、列表、字典等类型参数 修改(相同的键,不同的值) #include "ros/ros.h" int main(int argc, char *argv[]) { ros::init(argc,argv,"set_update_param"); std::vector
stus; stus.push_back("zhangsan"); stus.push_back("李四"); stus.push_back("王五"); stus.push_back("孙大脑袋"); std::map
friends; friends["guo"] = "huang"; friends["yuang"] = "xiao"; //NodeHandle-------------------------------------------------------- ros::NodeHandle nh; nh.setParam("nh_int",10); //整型 nh.setParam("nh_double",3.14); //浮点型 nh.setParam("nh_bool",true); //bool nh.setParam("nh_string","hello NodeHandle"); //字符串 nh.setParam("nh_vector",stus); // vector nh.setParam("nh_map",friends); // map //修改演示(相同的键,不同的值) nh.setParam("nh_int",10000); //param-------------------------------------------------------- ros::param::set("param_int",20); ros::param::set("param_double",3.14); ros::param::set("param_string","Hello Param"); ros::param::set("param_bool",false); ros::param::set("param_vector",stus); ros::param::set("param_map",friends); //修改演示(相同的键,不同的值) ros::param::set("param_int",20000); return 0; } 效果呈现: PS !!! 查询参数列表命令:rosparam list 查询具体参数值:rosparam get /nh_int(举了个栗子) 2.参数服务器获取参数 参数服务器操作之查询_C++实现: 在 roscpp 中提供了两套 API 实现参数操作 ros::NodeHandle param(键,默认值) 存在,返回对应结果,否则返回默认值 getParam(键,参数) 存在,返回 true,且将值赋值给参数 若果键不存在,那么返回值为 false,且不为参数赋值 getParamCached(键,参数)--提高变量获取效率 存在,返回 true,且将值赋值给参数 若果键不存在,那么返回值为 false,且不为参数赋值 getParamNames(std::vector
) 获取所有的键,并存储在参数 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::init(argc,argv,"get_param"); //NodeHandle-------------------------------------------------------- ros::NodeHandle nh; // param 函数 int res1 = nh.param("nh_int",100); // 键存在 int res2 = nh.param("nh_int2",100); // 键不存在 ROS_INFO("param获取结果:%d,%d",res1,res2); // getParam 函数 int nh_int_value; double nh_double_value; bool nh_bool_value; std::string nh_string_value; std::vector
stus; std::map
friends; nh.getParam("nh_int",nh_int_value); nh.getParam("nh_double",nh_double_value); nh.getParam("nh_bool",nh_bool_value); nh.getParam("nh_string",nh_string_value); nh.getParam("nh_vector",stus); nh.getParam("nh_map",friends); ROS_INFO("getParam获取的结果:%d,%.2f,%s,%d", nh_int_value, nh_double_value, nh_string_value.c_str(), nh_bool_value ); for (auto &&stu : stus) { ROS_INFO("stus 元素:%s",stu.c_str()); } for (auto &&f : friends) { ROS_INFO("map 元素:%s = %s",f.first.c_str(), f.second.c_str()); } // getParamCached() nh.getParamCached("nh_int",nh_int_value); ROS_INFO("通过缓存获取数据:%d",nh_int_value); //getParamNames() std::vector
param_names1; nh.getParamNames(param_names1); for (auto &&name : param_names1) { ROS_INFO("名称解析name = %s",name.c_str()); } ROS_INFO("----------------------------"); ROS_INFO("存在 nh_int 吗? %d",nh.hasParam("nh_int")); ROS_INFO("存在 nh_intttt 吗? %d",nh.hasParam("nh_intttt")); std::string key; nh.searchParam("nh_int",key); ROS_INFO("搜索键:%s",key.c_str()); */ //param-------------------------------------------------------- ROS_INFO("++++++++++++++++++++++++++++++++++++++++"); int res3 = ros::param::param("param_int",20); //存在 int res4 = ros::param::param("param_int2",20); // 不存在返回默认 ROS_INFO("param获取结果:%d,%d",res3,res4); // getParam 函数 int param_int_value; double param_double_value; bool param_bool_value; std::string param_string_value; std::vector
param_stus; std::map
param_friends; ros::param::get("param_int",param_int_value); ros::param::get("param_double",param_double_value); ros::param::get("param_bool",param_bool_value); ros::param::get("param_string",param_string_value); ros::param::get("param_vector",param_stus); ros::param::get("param_map",param_friends); ROS_INFO("getParam获取的结果:%d,%.2f,%s,%d", param_int_value, param_double_value, param_string_value.c_str(), param_bool_value ); for (auto &&stu : param_stus) { ROS_INFO("stus 元素:%s",stu.c_str()); } for (auto &&f : param_friends) { ROS_INFO("map 元素:%s = %s",f.first.c_str(), f.second.c_str()); } // getParamCached() ros::param::getCached("param_int",param_int_value); ROS_INFO("通过缓存获取数据:%d",param_int_value); //getParamNames() std::vector
param_names2; ros::param::getParamNames(param_names2); for (auto &&name : param_names2) { ROS_INFO("名称解析name = %s",name.c_str()); } ROS_INFO("----------------------------"); ROS_INFO("存在 param_int 吗? %d",ros::param::has("param_int")); ROS_INFO("存在 param_intttt 吗? %d",ros::param::has("param_intttt")); std::string key; ros::param::search("param_int",key); ROS_INFO("搜索键:%s",key.c_str()); return 0; } 3.参数服务器删除参数 参数服务器操作之删除_C++实现: ros::NodeHandle deleteParam("键") 根据键删除参数,删除成功,返回 true,否则(参数不存在),返回 false ros::param del("键") 根据键删除参数,删除成功,返回 true,否则(参数不存在),返回 false #include "ros/ros.h" int main(int argc, char *argv[]) { setlocale(LC_ALL,""); ros::init(argc,argv,"delete_param"); ros::NodeHandle nh; bool r1 = nh.deleteParam("nh_int"); ROS_INFO("nh 删除结果:%d",r1); bool r2 = ros::param::del("param_int"); ROS_INFO("param 删除结果:%d",r2); return 0; } ps:参数的查和删就不演示了,记得还是要重新编写cpp文件,在CMake.lists.txt里配置,编译(Ctrl+Shift+B)之后再进行操作
上一篇
租用香港的服务器多少钱
下一篇
服务器租用价钱一般多少
相关文章
银河麒麟桌面操作系统V10SP1修复boot分区
用acme.sh给网站域名,申请免费SSL永久证书(自动续期)
2022DIDCTF新生赛-服务器分析题型复现
ssh服务无法启动 报错:job for sshd.service failed
阿里云怎么设置网站关键词
阿里云电脑代理商怎么样
cookie和session对http的作用以及区别
ttp7机箱怎么样
中兴R5300 G4服务器iSAC管理员zteroot密码遗失的重置方法及IPV6地址启用设置
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价
7*24H在线售后
高可用资源,安全稳定
1v1专属客服对接
无忧退款试用保障
德讯电讯股份有限公司
电话:00886-982-263-666
台湾总部:台北市中山区建国北路一段29号3楼
香港分公司:九龙弥敦道625号雅兰商业二期906室
服务器租用
香港服务器
日本服务器
台湾服务器
美国服务器
高防服务器购买
香港高防服务器出租
台湾高防服务器租赁
美国高防服务器DDos
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
行业新闻
香港服务器租用
服务器资讯
香港云服务器
台湾服务器租用
zblog博客
香港VPS
关于我们
机房介绍
联系我们
Copyright © 1997-2024 www.hkstack.com All rights reserved.