ROS中的消息通信

ROS是以节点的形式开发的,而节点是根据其目的细分的可执行程序的最小单位。节点则通过消息(message)与其他的节点交换数据,最终成为一个大型的程序。这里的关键概念是节点之间的消息通信,它分为三种。单向消息发送/接收方式的话题(topic);双向消息请求/响应方式的服务(service);双向消息目标(goal)/结果(result)/反馈(feedback)方式的动作(action)。另外,节点中使用的参数可以从外部进行修改。这在大的框架中也可以被看作消息通信。消息通信可以用一张图来说明,如图所示,而不同之处总结在了表中。在对ROS进行编程时,为每个目的使用合适的话 题、服务、动作和参数是很重要的。

 话题(topic)

话题消息通信是指发送信息的发布者和接收信息的订阅者以话题消息的形式发送和接收信息。希望接收话题的订阅者节点接收的是与在主节点中注册的话题名称对应的发布者节点的信息。基于这个信息,订阅者节点直接连接到发布者节点来发送和接收消息。例如,通过计算移动机器人的两个车轮的编码器值生成可以描述机器人当前位置的测位(odometry)信息,并以话题信息(x, y, i)传达,以此实现异步单向的连续消息传输话题是单向的,适用于需要连续发送消息的传感器数据,因为它们通过一次的连接连续发送和接收消息。另外,单个发布者可以与多个订阅者进行通信,相反,一个订阅者可以在单个话题上与多个发布者进行通信。当然,这两家发布者都可以和多个订阅者进行通信。

服务(service)

服务消息通信是指请求服务的服务客户端与负责服务响应的服务服务器之间的同步双向服务消息通信。前述的发布和订阅概念的话题通信方法是一种异步方法,是根据需要传输和接收给定数据的一种非常好的方法。然而,在某些情况下,需要一种同时使用请求和响应的同步消息交换方案。因此,ROS提供叫做服务的消息同步方法。

一个服务被分成服务服务器和服务客户端,其中服务服务器只在有请求(request)的时候才响应(response),而服务客户端会在发送请求后接收响应。与话题不同,服务是一次性消息通信。因此,当服务的请求和响应完成时,两个连接的节点将被断开。该服务通常被用作请求机器人执行特定操作时使用的命令,或者用于根据特定条件需要产生事件的节点。由于它是一次性的通信方式,又因为它在网络上的负载很小,所以它也被用作代替话题的手段,因此是一种非常有用的通信手段。

动作(action)

动作消息通信是在如下情况使用的消息通信方式:服务器收到请求后直到响应所需的时间较长,且需要中途反馈值。这与服务非常相似,服务具有与请求和响应分别对应的目标(goal)和结果(result)。除此之外动作中还多了反馈(feedback)。收到请
求后需要很长时间才能响应,又需要中间值时,使用这个反馈发送相关的数据。消息传输方案本身与异步方式的话题(topic)相同。反馈在动作客户端(action client)和动作服务器(action server)之间执行异步双向消息通信,其中动作客户端设置动作目标(goal),而动作服务器根据目标执行指定的工作,并将动作反馈和动作结果发送给动作客户端。例如,当客户端将家庭服务器设置为服务器时,服务器会时时地通知客户端洗碗、洗衣和清洁等进度,最后将结果值发送给客户端。与服务不同,动作通常用于指导复杂的机器人任务,例如发送一个目标值之后,还可以在任意时刻发送取消目标的命令。

 在这种情况下,发布者、订阅者、服务服务器、服务客户端、动作服务器和动作客户端都存在于不同的节点中,这些节点需要连接才能进行消息通信。这时候,主节点是帮助节点之间的连接。主节点就像节点名称、话题和服务、动作名称、URI地址和端口以及参数们的名称服务器。换句话说,节点同时向主节点注册自己的信息,并从主节点获取其他节点希望通过主节点访问的节点的信息。然后,节点和节点直接连接进行消息通信。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值