ros入门教程(四)-- 通信架构(下)


本节沿上节继续介绍通信架构方面的内容

通信方式(接上)

Service

之前所说的topic是采用发布订阅的方式,但有些时候这种单向的消息传输不能满足我们的需求。

ROS中的同步通信方式,Node之间可以通过request-reply的方式通信。

Request
Reply
Client
/Service
Server

此处服务器Server会给外界提供一个服务Service,别的node就可以通过请求Request来调用这个服务。如果没有人调用,这个服务便不会被执行。

适用于一些场景,如一个node想不定时地获得人体坐标。此时如果我们用Service的方式来通信的话,便不需要传感器一直获取人体坐标信息并发送,只在有请求时才执行。

注意:同步通信即表明,在Client发送完请求后会阻塞,直到服务器端返回了结果,Client才会继续执行。

Topic VS Service

在这里插入图片描述

Callback 和 RPC 的理解不清楚

srv

Service通信的数据类型或者说是格式标准,定义在*.srv文件中。

Request
Reply
node
/pose
node

srv文件写法如下
在这里插入图片描述

路径固定,同时横线上是请求服务要求的格式,横线下是应答返回的格式。请求的消息应该尽量简单。而srv里面就只能嵌套msg文件了,在HumanPose[]里的文件格式就由下面的格式要求规范了。

注意

在自己定义和修改完msg或srv之后,要修改package.xmlCMakeList.txt文件。可见下图中红色的部分。

常用命令

在这里插入图片描述

Parameter Server

参数服务器其实在执行roscore指令时,系统就已经自动帮我们启动好了。它是ROS里面有别于同步通信和异步通信的一种通信方式。该方式较之前topic和service更为静态。通常情况下,我们把一些不常改变的参数放在PS里,以便于读写。同时,我们可以用命令行,launch文件和node(API)对其进行读写操作。

PS维护着一个存储各种参数的键值对字典,字典里存储了各种参数和配置。
在这里插入图片描述

在命令行中的操作

在这里插入图片描述
loaddump中,都必须采用YAML的格式,如下

name:'ZHANGSAN'
age:20
gender:'M'
score:{Chinese:80,Math:90|
在launch文件中的操作

在这里插入图片描述

在API修改

详见roscpp和rospy部分

Action

对于同步通信的方式,Service在发出请求后需要阻塞等待结果。某些结果可能需要的时间比较长,但此时对于client来说,它并不知道server是在执行还是死机了。所以我们希望server可以提供反馈,对进度有一个实时的跟进。同时,当server在提供服务中,我们也可能希望打断该服务做别的操作,那此时service这种通信方式就不满足需求了。对此问题,Action应运而生。

Action 类似于Service,带有状态反馈的通信方式。通常用在长时间(如移动一段距离),可抢占(做到一半可以被打断)的任务中。

在这里插入图片描述
goal:即request
cancel:中断指令
status:server所处的状态
result:动作处理完之后返回的结果
feedback:实时状态

action

Action通信的数据格式,定义在*.action文件中。
在这里插入图片描述
action要分为三段:

  • 第一段:goal
  • 第二段:result (动作执行完回传,只传一次)
  • 第三段:feedback(实时的状态,所以可能多次或一直回传)
举例

在这里插入图片描述

转载请注明出处。
本文总结于中国大学MOOC《机器人操作系统入门》
链接: link.
图片来自于课程视频截图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值