网站首页 > 技术文章 正文
介绍完通信架构之后就是节点间通信方式的介绍,这是ros最核心的内容。主要有主题topic,服务service,参数服务器parameter server和动作库actionlib
Topic和Msg
首先介绍主题topic,这是用到最多的通信方式。在两个节点首先定义好共同话题。一个发布一个订阅即可完成通信。节点A向频道发送主题,节点B从频道订阅主题。
这是一种异步通信方式,节点A不停发送话题到topic频道,不用管是否被订阅。节点B也是只管订阅不用管谁发送。即publish()和subscribe()方法执行后立即返回不用等待处理结果
一个topic也可以同时被多个节点订阅,如再有node C也可以订阅这个topic,当然也可以多个节点向一个topic发送信息。
topic有很严格的格式要求,即Message,它是topic内容的数据类型或者叫格式标准,如rgb信息要严格遵守ros的rgb数据的标准。message定义在*.msg文件中。message即“类”,发送订阅的massage是“对象”。基本的massage有如下类型,类似c++的类型
例子。
rgb图像的topic遵循以上massage的规范。sensor_msgs/Image是ros定义好的数据类型。massage定义类似于c语言的结构体,或者叫做一个“类”,每次发布的内容就是“对象”。整个massage定义好了一帧图像的格式。
常用指令如下
Service和srv
服务service是一种同步通信方式。两个节点间通过请求request和响应reply的方式进行通信。一个节点是服务器server一个是客户端client,服务器提供服务service,客户端来请求服务。服务没有调用就不执行,请求才会执行,节省计算资源。
同步的意思是client发送一个request会一直等待,知道服务器server返回结果,客户端node A才会继续向下执行。
两种通信方式对比如下
srv文件类似于上面的msg文件
举例如下
srv文件可以嵌套msg文件,不能在嵌套srv。msg可以自定义数据类型,也可以继续嵌套msg文件。这个例子中第一个srv文件用bool型判断检测,三个短线隔开,返回自定义数据类型HumanPose[],这里就是嵌套了msg文件HumanPose.msg,HumanPose也继续嵌套了JointPos.msg文件。
自己定义完msg或srv后要修改功能包package的两个基本文件,如下。即指定编译或运行时的依赖项
常用命令
Parameter Server
前面提到,roscore命令即启动了参数服务器。参数服务器维护着一个存储各种参数的字典,相对于前两种,它更静态。
字典即一个个键值对,关键词key和值value成对出现。key是唯一的,不能重复
可以命令行设置参数,文件遵循yaml格式
在launch文件中读写参数
此外在ros源代码里也可以设置,即rospy和roscpp里,即利用API设置参数。
Action
action是最复杂的通信方式,相对于升级版的service,用户可以取消请求,服务器可以发送反馈。
action文件之于action通信方式,类似srv文件至于service通信方式,msg文件之于topic通信方式
两个例子如下
action分三段,同样由---隔开,分别定义目标goal,结果result和反馈feedback
参考资料
https://www.icourse163.org/course/ISCAS-1002580008?tid=1002759011
- 上一篇: 几万条群离线消息,如何高效拉取,会不会丢?
- 下一篇: 群消息,究竟存一份还是多份?
猜你喜欢
- 2024-09-22 群消息,究竟存1份还是多份?
- 2024-09-22 初试RocketMQ消息中间件
- 2024-09-22 PDM通知时间超长处理方法
- 2024-09-22 如何解决消息队列的延时以及过期失效问题
- 2024-09-22 深入了解 ActiveMQ
- 2024-09-22 别的老师一定不会教的,如何查看或撤消excel保护密
- 2024-09-22 群消息,究竟存一份还是多份?
- 2024-09-22 几万条群离线消息,如何高效拉取,会不会丢?
- 2024-09-22 EXCEL工作表保护密码破解
- 2024-09-22 “IT小百科”之“Windows自带的服务和系统进程详解”
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)