在博文《复习笔记之——ROS(robot operating system)》中介绍ROS的文件框架时已经介绍过部分消息通信的机制了,此处详细的再介绍一下ROS的消息通信机制
参考资料为:http://wiki.ros.org/Books/ROS_Robot_Programming_English
目录
ROS是以节点的形式开发的,而节点是根据其function细分的可执行程序的最小单元。整个ROS系统运作起来,关键就在于节点之间的消息通信。ROS消息通信分为三种:单向消息发送/接收方式的话题(topic);双向消息请求/响应方式的服务
(service);双向消息目标(goal)/结果(result)/反馈(feedback)方式的动作(action)。另外,节点中使用的参数可以从外部进行修改。
话题
话题消息通信是指发送信息的发布者和接收信息的订阅者以话题消息的形式发送和接收信息。希望接收话题的订阅者节点接收的是与在主节点中注册的话题名称对应的发布者节点的信息。基于这个信息,订阅者节点直接连接到发布者节点来发送和接收消息。
话题是单向的,适用于需要连续发送消息的传感器数据,因为它们通过一次的连接连续发送和接收消息。另外,单个发布者可以与多个订阅者进行通信,相反,一个订阅者可以在单个话题上与多个发布者进行通信。
服务
服务消息通信是指请求服务的服务客户端与负责服务响应的服务服务器之间的同步双向服务消息通信。对于话题,通信方法是一种异步的方法,是根据需要传输和接收给定数据的一种非常好的方法。然而,在某些情况下,需要一种同时使用请求和响应的同步消息交换方案。因此,服务是一种消息同步方法。
一个服务被分成服务服务器和服务客户端,其中服务服务器只在有请求(request)的时候才响应(response),而服务客户端会在发送请求后接收响应。与话题不同,服务是一次性消息通信。因此,当服务的请求和响应完成时,两个连接的节点将被断开。该服务通常被用作请求机器人执行特定操作时使用的命令,或者用于根据特定条件需要产生事件的节点。(一次性的通信方式,在网络上的负载很小)
动作
所谓的动作就是服务器收到请求后直到响应所需的时间较长,且需要中途反馈值。所以动作相比起服务还多出了反馈这一环节。
参数
参数也可以看作是一种消息的通信,也可以看作是节点使用的全局变量。
默认情况下,某些配置的文件中设置值是指定的,有需要时可以从外部读取或写入参数。特别是,由于可以通过使用来自外部的写入功能来实时地改变设置值,因此它是非常有用的,因为它可以灵活地应对多变的情况。
消息通信的过程
运行主节点
大多数情况下,发布者、订阅者、服务服务器、服务客户端、动作服务器和动作客户端都存在于不同的节点中,这些节点需要连接才能进行消息通信。这时候,主节点是帮助节点之间的连接。主节点就像节点名称、话题和服务、动作名称、URI地址和端口以及参数们的名称服务器。换句话说,节点同时向主节点注册自己的信息,并从主节点获取其他节点希望通过主节点访问的节点的信息。然后,节点和节点直接连接进行消息通信。
故此,在ROS中,首先需要运行主节点。ROS 主节点使用roscore命令来运行,并使用XMLRPC运行服务器。主节点为了节点与节点的连接,会注册节点的名称、话题、服务、动作名称、消息类型、URI地址和端口,并在有请求时将此信息通知给其他节点。
roscore
运行订阅者节点
订阅者节点使用rosrun或roslaunch命令来运行。订阅者节点在运行时向主节点注册其订阅者节点名称、话题名称、消息类型、URI地址和端口。主节点和节点使用XMLRPC进行通信。
rosrun PACKAGE_NAME NODE_NAME
roslaunch PACKAGE_NAME LAUNCH_NAME
运行发布者节点
发布者节点(与订阅者节点类似)使用rosrun或roslaunch命令来运行。发布者节点向主节点注册发布者节点名称、话题名称、消息类型、URI地址和端口。主节点和节点使用XMLRPC进行通信。
通知发布者信息
主节点向订阅者节点发送此订阅者希望访问的发布者的名称、话题名称、消息类型、URI地址和端口等信息。主节点和节点使用XMLRPC进行通信。
订阅者节点的连接请求
订阅者节点根据从主节点接收的发布者信息,向发布者节点请求直接连接。在这种情况下,要发送的信息包括订阅者节点名称、话题名称和消息类型。发布者节点和订阅者节点使用XMLRPC进行通信。
发布者节点的连接响应
发布者节点将TCP服务器的URI地址和端口作为连接响应发送给订阅者节点。发布者节点和订阅者节点使用XMLRPC进行通信。
TCPROS连接
订阅者节点使用TCPROS创建一个与发布者节点对应的客户端,并直接与发布者节点连接。节点间通信使用一种称为TCPROS的TCP/IP方式。
发送消息
发布者节点向订阅者节点发送消息。节点间通信使用一种称为TCPROS的TCP/IP方式。
上述内容相当于消息通信中的话题。话题消息通信是只要发布者或订阅者不停止,会持续地发布和订阅。至于服务及动作,此处就不再深入介绍,有兴趣的读者可以自行阅读参考材料