高实时高可靠高带宽混合实时ROS架构

ROS概述

ROS 是用于机器人的一种开源“后操作系统”。它提供了类似操作系统所提供的功能,包括硬件抽象描述、设备管理与控制、通用功能实现、程序间消息传递,以及包管理等。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

ROS的主要设计目标是便于机器人研发过程中的代码复用。因此ROS采用了一种分布式架构,各个软构件可以独立的设计,松散、即时地组合起来。

ROS的运行架构是一种基于Socket网络连接的松耦合架构。在ROS架构中,一切可执行的程序被抽象为节点(node),它可以是传感器数据采集程序、执行器控制程序、规划算法程序、视觉识别程序等等。各个节点之间均使用ROS提供的消息传递机制进行通信。ROS支持多种类型的通信,包括基于服务的同步RPC通信、基于Topics的异步数据流通信以及用于数据存储的参数服务器(Parameter Server)。

目前ROS1.0已经发行多个版本,同时ROS2.0也已经发行。ROS2.0的改进主要是为了让ROS能够符合工业级的运行标准,采用工业级别的DDS(数据分发服务)中间件来负责可靠通信,通信节点动态发现,并用共享内存方式使得通信效率更高。下图所示为ROS2与ROS1整体架构的对比,下表所示为ROS2与ROS1的优缺点对比。

  • ROS1主要构建于Linux系统之上。但是ROS2支持构建的系统包括Linux、Windows、Mac、RTOS,甚至没有操作系统的裸机。
  • ROS1的通讯系统基于TCPROS/UDPROS,强依赖于Master节点的处理,一旦Master故障,将导致整个系统将崩溃。ROS2的通讯系统基于DDS,所有节点的通信拓扑结构都依赖于动态P2P的自发现模式,去掉了Master中心节点,同时在ROS2内部提供了DDS的抽象层实现,用户不必关注底层使用哪个厂商的DDS中间件。
  • ROS中最重要的一个概念就是“节点”,基于发布/订阅模型的节点使用,可以让开发者并行开发低耦合的功能模块,并且便于进行二次复用。ROS2得益于DDS的加入,其发布/订阅模型提升了ROS2的实时性、持续性和可靠性。
  • 在ROS1的架构中Nodelet和TCPROS/UDPROS是并列的层次,也是负责通讯的。 Nodelet是为同一个进程中的多个节点提供一种更优化的数据传输方式。ROS2中叫“Intra-process”,独立于DDS。

ROS2是建立在DDS程序的基础上的,DDS被用来发现节点、序列化和传递信息。DDS是一个被很多公司实现的工业标准。比如RTI的实现Connext DDS和eProsima的实现Fast-RTPS DDS。为了能够在ROS2中使用一个DDS实现,需要一个ROS中间件(ROS Middleware interface,RMW),使用DDS或RTPS实现的API和工具实现抽象ROS中间件接口。支持的RMW实现如下表:

工业机器人是机器人中非常重要的一个部分,在工业领域应用广泛而且成熟。ROS针对工业机器人专门开发了一套系统ROS-Industrial(ROS-I)。为了促进其推广与应用,14家公司成立了ROS-Industrial联盟(RIC)。经过不断发展,ROS-Industrial联盟现已经规模壮大,包括美洲联盟、亚太联盟和欧洲联盟三大组织,此外还有从多的企业参与其中,如下图2所示。

ROS-Industrial(ROS-I)开源项目由Motoman机器人、美国西南研究所和Willow Garage发起,意在实现工业自动化的ROS应用。ROS-Industrial拥有BSD/Apache 2.0证书。它提供了一个通用的工业机器人框架,并且集成了ROS丰富的资源,通过Simple Message协议与不同厂家的机器人控制器通讯,实现控制目的。ROS-Industrial体系结构如下图所示。

  • GUI:上层UI分为两个部分:一个部分是ROS中现在已有的UI工具(ROS GUI);另外一个部分是专门针对工业机器人通用的UI工具(ROS-I GUI)。
  • ROS Layer:ROS基础框架,提供核心通讯机制。
  • MoveIt! Layer:为工业机器人提供规划、运动学等核心功能。
  • ROS-I Application Layer:处理工业生产的具体应用。
  • ROS-I Interface Layer:接口层,包括工业机器人的客户端,可以通过 simple message协议与机器人的控制器通信。客户端节点实际上是作为遵循简单消息协议机器人的驱动程序。
  • ROS-I Simple Message Layer:ROS客户端与工业机器人之间的通信协议,负责打包和解析通信数据。
  • ROS-I Controller Layer:机器人厂商开发的工业机器人控制器。
  • ROS-I Configuration: urdf、paramets、ROS-I conventions。

混合实时ROS架构

ROS最初是为科研而设计,虽然功能丰富,但缺乏实时性。对于工业、军用等领域,实时性属于基本要求,所以为ROS增强实时性非常有必要。针对ROS的实时性,提出混合实时ROS架构。

将ROS运行在多核处理器上,可以形成混合实时体系架构,它由两部分组成:一部分是实时子系统RTOS,另一部分为非实时子系统GPOS。它们分别占用不同的CPU,通过共享内存实现通信。其中GPOS由运行在非实时内核上的ROS节点组成,RTOS由运行在实时操作系统内核上的实时节点组成。非实时节点主要负责运动规划、图像处理、语音识别等上层算法和智能化的处理;实时节点主要负责运动控制,可以在实时节点中完成机器人的关节插补、运动学求解、坐标变换等功能。

混合实时系统体系结构如下图所示。在应用层,ROS节点被分为实时和非实时节点,ROS之间的通信分为核内通信和核间通信,核间通信通过共享内存实现。在操作系统内核层中,GPOS和RTOS分别驻留在不同的硬件资源上,包括处理器核、内存、中断和相关硬件资源。

混合实时ROS系统的实时子系统也可独立运行在低端嵌入式设备。为低端嵌入式设备提供了一种无缝融入ROS分布式通信系统的解决方案,在有低成本低功耗要求的机器人开发场景下具有很高的现实意义。

RTOS实时操作系统可以采用Nuttx、RT-Thread、Zephyr等功能丰富的开源实时操作系统。实时子系统主要支持DDS通信层、DDS接口抽象层、ROS客户端以及运行控制功能组件包。运动控制功能组件包包括tarc-ik、tf、ros_control。各个层及组件描述如下:

  • DDS通信层:集成开源的Fast-RTPS通信中间件。
  • RMW接口抽象层:针对不同的DDS进行接口抽象封装。
  • ROS2客户端:客户端库提供ROS2编程的库与API的概念类似。提供建立node节点、发布/订阅消息、调试服务等功能,不需要从TCP/UDP层去实现,而是直接调用客户端库。
  • trac-ik:一种基于数值解的机器人运动学求解器库。根据机器人各关节变量值,计算出机器人末端抓手的位姿方程,称为机械手的运动分析或者正向运动学。反之,为了使机器人所握工具相对参考系的位姿满足给定的要求,计算相应的关节变量,该过程称为逆解算,运动学逆解算是机器人运动规划和轨迹控制的基础。
  • tf2:拥有机械臂或者人形态的机器,往往会伴随有机械臂、底盘、头部等运动,这会涉及不同坐标系和运动控制。tf、tf2程序包在不同的坐标系之间进行坐标变换。
  • ros_control:为用户提供的应用与机器人之间的中间件,包含一系列控制器接口、传动装置接口、硬件接口、控制器工具箱。

ROS 2.0未来将成为机器人应用程序开发的主流,因为它使用更先进的分布式架构,更高的可靠性,以及对实时性和嵌入式设备的支持。因此混合实时ROS系统的实时子系统采用ROS2.0架构。

Apollo 3.5彻底摒弃ROS,改用自研的Cyber RT作为底层通讯与调度平台,实时性与灵活性更为突出。Apollo的底层通信和节点发现机制也是基于开源软件eProsima Fast-RTPS。由于混合实时ROS架构的实时子系统的底层OS采用嵌入式实时操作系统,因此实时性天然就比Apollo高,因为不管Cyber RT用户态怎样实现调度机制,本身Linux底层就不具备实时性。

混合实时ROS架构采用Hyper架构,使其具有强的隔离性和可靠性。不同系统间通信通过共享内存使其系统具有高带宽特性。因此混合实时ROS架构具有强实时、高可靠、高带宽等特性。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();