ROS 是 Robot Operating System 的缩写,即 机器人操作系统。
ROS实际上是一个面向机器人硬件场景的系统框架,可运行在Linux内核以及其他兼容POSIX接口的操作系统内核之上。
作为一个操作系统的系统框架,ROS提供了一系列面向机器人场景应用的系统级服务,抽象了底层复杂的异构硬件资源,还提供了应用之间交互以及应用与服务之间交互的IPC机制。
层次架构图如图:

ROS 可以分为 基础设施层、通信层 和 应用层。
基础设施层 包括ROS中的Python、C++等运行环境、 ROS文件系统 与 ROS包管理机制等。
在基础设施层 之上运行了ROS的通信层,提供基础的ROS IPC 机制以及ROS数据分发服务(Data Distribution Service, DDS)等。
ROS 应用层是基于一个个节点所构成的计算图,这些节点可以使用ROS的通信层直接进行相互调用,或者通过对一些 话题(topic) 发布消息 或者 订阅消息 以进行间接通信。
ROS节点与计算图
ROS采用计算 图的形式 来组织各种服务。 每个服务构成一个节点,每个节点执行一个具体的计算处理(包括机器人中所需的感知、融合、规划与控制等)。
运行在ROS上的应用可以被表示成一个“图” 的关系结构,不同的节点表示不同的应用(它们既可以是信息接收者,也可以是信息发布者)。 ROS上常见的应用包括:接收、发布、处理来自传感器(sensor)的数据, 以及对处理过程进行控制的节点与计划节点等。
与微内核设计的思想类似,ROS同样将其系统框架分解为多个服务,不同的服务之间通过ROS提供的IPC进行通信。 这种 解耦式的架构 使得ROS易于部署,甚至可以部署在一个分布式系统上。
服务与动作
ROS每个组件的设计是 以服务为中心 的: 一个服务接收一个请求,执行该请求,然后回复。 一个节点 可以向另一个提供服务的节点发送请求,然后等待一个结果。 服务的模型是一次性的同步通信,即当服务的请求和回复完成后,连接会被断开; 进行下一次交互必须再次建立连接。 一个节点还可以提供 动作(Action)。 动作和服务类似,主要的区别在于动作的假设是服务端处理请求的时间会很长,并且可能需要在处理的过程中就获取一些中途的返回值。 在实际的使用中,一般通过动作来让机器人执行相对复杂的任务。
话题
话题 的 方式是ROS中比较新的处理方式,是一类 单向的异步通信机制。 话题机制将通信的双方称为 发布者(publisher) 和 订阅者(subscriber)。 发布者节点首先需要向主节点(一个特殊的全局节点)注册一个话题, 之后该发布者会以消息的形式发布关于该话题的新内容。 在话题模式下,发布者和订阅者是多对多的关系,即单个节点可以成为多个话题的发布者,也可以成为多个话题的订阅者。
数据分发服务
ROS2.0引入了 数据分发服务(Data Distribution Service, DDS) 以支持实时性。 从架构的角度, DDS可以被看作一个系统中间件,处于ROS应用层和ROS基础设施层之间。 DDS提供了上面介绍的ROS基本通信接口和语义, 如话题方式的发布者和订阅者模型或服务类型的IPC等。 之所以将DDS分离出来,是为了对性能有重要影响的通信进行加速。 不同的硬件厂商可以针对自己的机器人环境实现DDS的中间件,只要最终这些DDS的实现能够满足对应的协议接口即可。这些DDS的实现是针对特定硬件进行的,因此可以进行针对性的优化。
DDS内部可以利用共享内存的方式来传递本地数据。 在ROS2.0中, ROS会将数据交接给DDS层。 在DDS层,具体的DDS实现可以使用一些如共享内存的方式,在建立了连接的不同节点之间共享数据。 在传输后,可以直接将序列化后的数据放在共享区域中,这样可以极大地提升传输性能。
计算图架构与 ROS IPC
ROS系统框架的设计将计算任务组件化与服务化,形成独立的ROS节点; 各个节点通过ROS IPC(如话题、 服务、 动作等方式 )进行通信。 DDS的引入能够在支持多种通信方式的情况下,尽可能地优化底层通信性能。
ROS的官方文档地址: ROS 2 Documentation — ROS 2 Documentation: Kilted documentation
862

被折叠的 条评论
为什么被折叠?



