当前位置: 首页 > news >正文

【自动驾驶】ROS中参数服务器通信(c++)

目录

  • 通信过程
  • 新建参数服务器包
  • 编写测试文件
  • 修改cmakelist:
  • 搭配launch文件
  • 启动测试及结果

通信过程

1.Talker 设置参数
Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。

2.Listener 获取参数
Listener 通过 RPC 向参数服务器发送参数查找请求,请求中包含要查找的参数名。

3.ROS Master 向 Listener 发送参数值
ROS Master 根据步骤2请求提供的参数名查找参数值,并将查询结果通过 RPC 发送给 Listener。

参数可使用数据类型:

32-bit integersbooleansstringsdoublesiso8601 dateslistsbase64-encoded binary data

新建参数服务器包

catkin_create_pkg paramservice std_msgs rospy roscpp

编写测试文件

#include "ros/ros.h"
#include <vector>
#include <map>
int main(int argc, char *argv[])
{//使得中文可以生效setlocale(LC_ALL,"");ros::init(argc,argv,"set_update_param");std::vector<std::string> stus;stus.push_back("这是元素1");stus.push_back("这是元素2");std::map<std::string,std::string> friends;friends["key"] = "value";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);// getParam 函数int param_int_value;double param_double_value;bool param_bool_value;std::string param_string_value;std::vector<std::string> param_stus;std::map<std::string, std::string> 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());}//  首次调用getCached,这里会订阅参数值,通过缓存获取数据,当数据变化时,将通知节点自动更新ros::param::getCached("param_int",param_int_value);ROS_INFO("通过缓存获取数据:%d",param_int_value);//输出所有的变量名std::vector<std::string> 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());//删除相关的参数bool r2 = ros::param::del("param_int");ROS_INFO("param 删除结果:%d",r2);return 0;}

修改cmakelist:

add_executable(${PROJECT_NAME}_node src/paramservice.cpp)
target_link_libraries(${PROJECT_NAME}_node${catkin_LIBRARIES}
)

搭配launch文件

<launch><node name="myservice" pkg="service" type="service_node" output="screen"/>
</launch>

启动测试及结果

roslaunch paramservice start.launch

[ INFO] [1723529188.541091451]: getParam获取的结果:20000,3.14,Hello Param,0
[ INFO] [1723529188.541155371]: stus 元素:这是元素1
[ INFO] [1723529188.541178505]: stus 元素:这是元素2
[ INFO] [1723529188.541192963]: map 元素:key = value
[ INFO] [1723529188.542024132]: 通过缓存获取数据:20000
[ INFO] [1723529188.542419343]: 名称解析name = /run_id
[ INFO] [1723529188.542439561]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__34167
[ INFO] [1723529188.542458326]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__41769
[ INFO] [1723529188.542474146]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__45931
[ INFO] [1723529188.542489685]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__45545
[ INFO] [1723529188.542505965]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__44877
[ INFO] [1723529188.542524019]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__42835
[ INFO] [1723529188.542541943]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__46297
[ INFO] [1723529188.542559517]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__41351
[ INFO] [1723529188.542576629]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__43881
[ INFO] [1723529188.542594843]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__43899
[ INFO] [1723529188.542612596]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__34115
[ INFO] [1723529188.542630069]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__39145
[ INFO] [1723529188.542647101]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__43455
[ INFO] [1723529188.542664524]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__33051
[ INFO] [1723529188.542682467]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__35169
[ INFO] [1723529188.542700181]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__46493
[ INFO] [1723529188.542718104]: 名称解析name = /roslaunch/uris/host_yisu_64fc150f8284e__39659
[ INFO] [1723529188.542735557]: 名称解析name = /rosversion
[ INFO] [1723529188.542753210]: 名称解析name = /rosdistro
[ INFO] [1723529188.542771264]: 名称解析name = /param_double
[ INFO] [1723529188.542789378]: 名称解析name = /param_string
[ INFO] [1723529188.542806159]: 名称解析name = /param_bool
[ INFO] [1723529188.542823351]: 名称解析name = /param_vector
[ INFO] [1723529188.542840955]: 名称解析name = /param_map/key
[ INFO] [1723529188.542858317]: 名称解析name = /param_int
[ INFO] [1723529188.542878054]: ----------------------------
[ INFO] [1723529188.543220015]: 存在 param_int 吗? 1
[ INFO] [1723529188.543525068]: 存在 param_intttt 吗? 0
[ INFO] [1723529188.543831122]: 搜索键:/param_int
[ INFO] [1723529188.544247053]: param 删除结果:1

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • R语言文本挖掘-万字详细解析tm包
  • Android 开发中常用的布局类型及其选择指南
  • Hadoop之DataNode启动源码解析
  • Mybatis XML 数据源为 Oracle 之批量插入或更新 Merge Into 的具体介绍与使用
  • Android MediaRecorder 视频录制及报错解决
  • 【ubuntu24.04】docker安装
  • 7za解压缩工具
  • 常见漏洞描述及修复建议
  • SSv2数据集
  • QML基础学习
  • C++ 126类和对象_面像对像_继承
  • matlab 音频音量处理(音量大小按照dB调节)
  • 硬件工程师必须掌握的MOS管详细知识
  • QT stackwidget控件支持上下,左右手势滑动,触摸屏
  • Rust 面向对象编程
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 2018一半小结一波
  • CentOS6 编译安装 redis-3.2.3
  • Centos6.8 使用rpm安装mysql5.7
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Flannel解读
  • Github访问慢解决办法
  • github指令
  • JavaScript HTML DOM
  • log4j2输出到kafka
  • 大整数乘法-表格法
  • 当SetTimeout遇到了字符串
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 深度解析利用ES6进行Promise封装总结
  • 消息队列系列二(IOT中消息队列的应用)
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (16)Reactor的测试——响应式Spring的道法术器
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (接口封装)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十五)使用Nexus创建Maven私服
  • (十一)图像的罗伯特梯度锐化
  • (转)C#调用WebService 基础
  • (转)Scala的“=”符号简介
  • (转)创业的注意事项
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core跨平台微服务学习资源
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)