| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> ROS通信机制~参数服务器·笔记4 -> 正文阅读 |
|
[系统运维]ROS通信机制~参数服务器·笔记4 |
相关系列文章: ROS开发(ubuntu)笔记·1_嘻·嘻的博客-CSDN博客 ROS通信机制~话题通信(Publisher&Subscriber)·笔记2_嘻·嘻的博客-CSDN博客 ROS通信机制~服务通信(server&client)·笔记3_嘻·嘻的博客-CSDN博客 参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据,一般适用于存在数据共享的一些应用场景。 作用 存储一些多节点共享的数据,类似于全局变量。 参数服务器模型中涉及到三个角色:
ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。 案例 实现参数增删改查操作: 整个流程由以下步骤实现: 1.Talker 设置参数 Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。 2.Listener 获取参数 Listener 通过 RPC 向参数服务器发送参数查找请求,请求中包含要查找的参数名。 3.ROS Master 向 Listener 发送参数值 ROS Master 根据步骤2请求提供的参数名查找参数值,并将查询结果通过 RPC 发送给 Listener。 参数可使用数据类型:
?对于iso8601 dates,就是用来表示时间的, ?对于boolean 当转换其他的数值类型为?boolean?值时,0 会转成 False,而其他的值则变成 True。当转换?boolean?值为其他的数据类型时,False 成为 0,而 True 成为 -1。 在 C++ 中实现参数服务器数据的增删改查,可以通过两套 API 实现:
?【1】参数服务器新增(修改)参数
?上图中出现的setParam函数有多种重载,使用了这两种,现给出源码: 下一步就是配置CMakelists.txt了(下图是把3个cpp文件都配置了)? Ctrl+Shift+B编译一下,没有出现ERROR的话,就可以打开终端运行1了 在一个终端rosrun启动设置参数, 另一个终端可以输入rosparam list ,就可以列出现有的参数(有我们自己创建的,也有系统创建的) 再输入rosparam get 自己设的参数名 就可以查看自己设的值(没加上修改的代码之前) ?加上修改的代码后
【2】?参数服务器获取参数 自己创建一个新的cpp文件实现提交参数的作用 ? ? ? ? ? ?2. ?getParam(键,存储结果的变量) ? ? ? ? ? ? ? ?3.getParamCached(键,存储结果的变量)---提高变量获取效率 该函数可以完成本地参数的缓存,命令参数服务器一旦参数变化就立即通知这个节点。可以大大提高速度(首次调用之后),但是为了防止重载,应该谨慎使用。 ? ? ? ? ? ?4.getParamNames(std::vector<std::string>) ? ? ? ? ? ?5.hasParam(键) ? ? ? ? ? ?6.serachParam(参数1,参数2) ? ? ? ? ros::param ----与ros::NodeHandle的函数功能几乎相同-------------------------------------------
?c_str():生成一个const char*指针,指向以空字符终止的数组。返回一个指向正规C字符串的指针常量, 内容与本string串相同。 1.首先是前4个函数(param,getParam,getParamCached,getParamNames)的运行结果 ?2.然后是第5个函数(hasParam)的运行结果: ?3.然后是第6个函数(serachParam)的运行结果:
?如果搜索不到某个参数,就无输出。 【3】参数服务器删除参数
先执行删除名为radius的键,运行结果: ?再重复一遍操作,因为上一步已经删过了,所以运行结果如图: ?下一步,我们再输入rosparam list,就会发现radius键已经无了,再进行下一步删除radius_param 运行结果: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 5:53:49- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |