什么是ROS?
ROS(Robot Operating System) 是一个在计算机上对机器人进行操作的一个开源系统。ROS系统通常由大量节点组成,其中任何一个节点均可以通过发布/订阅的方式与其他节点进行通信。举例来说,机器人上的一个位置传感器如雷达单元就可以作为ROS的一个节点,雷达单元可以以信息流的方式发布雷达获得的信息,发布的信息可以被其他节点如导航单元、路径规划单元获得。
为什么使用ROS?
ROS作为一个灵活的操作系统,其上的节点具有很大的随意性,它们可以位于不同的计算机上,甚至可以位于不同的网络上。举例来说,我们可以使用一个Arduino作为一个节点发布信息,使用一台笔记本电脑作为一个节点订阅上述信息以及使用一台手机作为一个节点驱动电机等。上述灵活性使得ROS可以适应很多不同场合的应用,另外,ROS还是一个开源的系统,由专门的社区维护。
ROS的一些基本概念
首先我们从宏观的角度观察ROS系统的构成。
ROS首先包含一个超级管理员ROS Master, ROS Master管理系统中所有节点,包括节点之间的相互通信。下图为ROS系统的基本结构。

那么ROS节点之间是如何相互通信的呢?
ROS各个节点之间通过发布消息与订阅消息进行相互通信。
举例来说,我们的机器人上有一个摄像头,我们希望能够从机器人图像处理单元以及另外一台计算机上观察摄像头的图像,我们应该怎么办呢?

首先,我们有一个管理员ROS Master管理我们的整个系统,然后我们需要建立三个节点,分别是摄像头节点、机器人中的图像处理节点以及计算机上的显示节点,如上图。
然后,在ROS Master的管理下,摄像头节点(Camera Node)发起一个会话(Topic)发送图像信息,同时,另外两个节点订阅这个会话(Topic)。
这样,当摄像头节点从摄像头获得一帧新的图像时,它将立刻将获得的图像发送给另外两个节点(使用网络协议TCP/IP)。
那么,接下来我们可能会想,如果机器人图像处理节点需要在某一个特定的时刻向摄像头节点请求一个信息,怎么办呢? 这里,ROS采用一种请求服务机制(Service Request)。
此时,图像处理节点可以告诉ROS Master,我需要向摄像头节点请求一项服务,然后ROS Master 将在摄像头节点和图像处理节点之间建立一个请求服务/应答的联系通道。如下图。

在上图中,图像处理节点将首先请求图像信息,然后摄像头节点将收集所需要的信息发送给图像处理节点。
评论(0)