ROS学习(二):消息通信介绍

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

ROS学习(二):消息通信介绍_第1张图片

 话题

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

ROS学习(二):消息通信介绍_第2张图片

服务

    服务消息通信是指请求服务的服务客户端与负责服务响应的服务服务器之间的同步 双向服务消息通信,如图4-3所示。前述的发布和订阅概念的话题通信方法是一种异步方 法,是根据需要传输和接收给定数据的一种非常好的方法。然而,在某些情况下,需要一 种同时使用请求和响应的同步消息交换方案。因此,ROS提供叫做服务的消息同步方法。 一个服务被分成服务服务器和服务客户端,其中服务服务器只在有请求(request) 的时候才响应(response),而服务客户端会在发送请求后接收响应。与话题不同,服 务是一次性消息通信。因此,当服务的请求和响应完成时,两个连接的节点将被断开。该 服务通常被用作请求机器人执行特定操作时使用的命令,或者用于根据特定条件需要产生 事件的节点。由于它是一次性的通信方式,又因为它在网络上的负载很小,所以它也被用 作代替话题的手段,因此是一种非常有用的通信手段。例如,如图4-3所示,当客户端向 服务器请求当前时间时,服务器将确认时间并作出响应。

ROS学习(二):消息通信介绍_第3张图片

 

 动作

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

ROS学习(二):消息通信介绍_第4张图片

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

ROS学习(二):消息通信介绍_第5张图片

 

 参数

     信息通信主要分为话题、服务和动作,而从大的框架来看,参数也可以看作一种消息 通信。可以认为参数是节点中使用的全局变量。参数的用途与Windows程序中的*.ini配 置文件非常类似。默认情况下,这些设置值是指定的,有需要时可以从外部读取或写入参 数。特别是,由于可以通过使用来自外部的写入功能来实时地改变设置值,因此它是非常 有用的,因为它可以灵活地应对多变的情况。 尽管参数严格的来说并不是消息通信,但笔者认为它们属于消息通信的范畴,因为它 们使用消息。例如,用户可以设置要连接的USB端口、摄像机色彩校正值以及速度和命令 的最大值和最小值。

 

你可能感兴趣的:(嵌入式)