浅谈ROS2.0的机制与优势
2021-08-10

本文主要介绍ROS2.0中的DDS 数据分发服务机制,对ROS1.0进行介绍回顾,并与ROS2.0进行比较,最后分享了ROS2.0的应用现状。

1、ROS1.0存在的问题

  • 多机器人系统——没有构建多机器人系统的标准方法

  • 跨平台——无法适用于windows、RTOS等系统

  • 实时性——缺少实时性方面的设计

  • 网络连接——需要良好的网络环境保证数据的完整性

  • 产品化——从科学研究到消费产品的过渡欠佳

  • 项目管理——无法胜任完整生命周期下项目管理

2、基于DDS的ROS2.0的发布

虽然不少开发者和研究机构针对以上部分问题进行了改良,但这些局部功能的改善往往很难带来整体性能的提升,机器人开发者对新一代ROS的呼声越来越大,ROS 2.0的消息也不绝于耳。

终于,在ROSCon 2014上,新一代基于DDS的ROS的设计架构(Next-generation ROS: Building on DDS)正式公布。

DDS,全称Data Distribution Service (数据分发服务),由对象管理组(OMG®)发布和维护,是一个中间件协议和API标准,采用发布/订阅体系架构,强调以数据为中心,提供丰富的QoS服务质量策略,以保障数据进行实时、高效、灵活地分发,可满足各种分布式实时通信应用需求。

2015年8月第一个ROS 2.0的alpha版本落地;2016年12月19日,ROS 2.0的beta版本正式发布;2017年12月8日,万众瞩目的ROS 2.0终于发布了第一个正式版——Ardent Apalone。

2018年7月2日,第二个正式版——Bouncy Bolson发布,保持半年更新一个版本的节奏。

2018年12月,第三个正式版——Crystal Clemmys发布。

众多新技术和新概念应用到了新一代的ROS之中,不仅带来了整体架构的颠覆,更是增强了ROS 2.0的综合性能。

3、ROS2.0相比于ROS1.0的进步

相比ROS 1,ROS 2的设计目标更加丰富:

(1)支持多机器人系统

ROS 2增加了对多机器人系统的支持,提高了多机器人之间通信的网络性能,更多多机器人系统及应用将出现在ROS社区中。

(2)铲除原型与产品之间的鸿沟

ROS 2不仅针对科研领域,还关注机器人从研究到应用之间的过渡,可以让更多机器人直接搭载ROS 2系统走向市场。

(3)支持微控制器

ROS 2不仅可以运行在现有的X86和ARM系统上,还将支持MCU等嵌入式微控制器,比如常用的ARM-M4、M7内核。

(4)支持实时控制

ROS 2还加入了实时控制的支持,可以提高控制的时效性和整体机器人的性能。

(5)跨系统平台支持

ROS 2不止能运行在Linux系统之上,还增加了对Windows、MacOS、RTOS等系统的支持,让开发者的选择更加自由。

诞生于2007年的ROS经过十余年的高速发展,已经成为机器人领域的事实标准。2014年在ROSCon 2014上,Open Source Robotics Foundation正式发布了新一代ROS的设计架构(Next-generation ROS: Buildingon DDS),DDS正式成为ROS2的重要的组成部分。ROS对于使用哪家厂商的DDS的不做硬性规定,用户根据自身需要选择适合的DDS(详见http://design.ros2.org中“ROS Built on DDS”小节)。

ROS不与DDS供应商绑定

4、ROS1与ROS2的对比

ROS1与ROS2整体架构的对比

对于嵌入式设备结构如下:

在基于机器人操作系统的机器人应用中弥补资源受限的微控制器和更大处理器之间的差距


对于ROS1、ROS2二者整体架构进行分析可知:

(1)ROS1主要构建于Linux系统之上,而ROS2支持构建的系统包括Linux、windows、Mac、RTOS,甚至没有操作系统的裸机。

(2)ROS1的通讯系统基于TCPROS/UDPROS,强依赖于master节点的处理,一旦master异常,将导致全系统通信故障。ROS2的通讯系统是基于DDS(一种分布式实时系统中数据发布/订阅的标准解决方案),同时在ROS2内部提供了DDS的抽象层实现,用户不需要关注底层DDS的提供厂家。

ROS1 通讯系统图片


ROS2 通讯系统

(3)ROS中最重要的一个概念就是“节点”,基于发布/订阅模型的节点使用,可以让开发者并行开发低耦合的功能模块,并且便于进行二次复用。得益于DDS的加入,ROS2的发布/订阅模型也会发生改变。

(4)ROS1的架构中Nodelet和TCPROS/UDPROS是并列的层次,都是负责通讯的,实际上Nodelet是为同一个进程中的多个节点提供一种更优化的数据传输方式。ROS2中也保留了这种数据传输方式,叫“Intra-process”,同样也是独立于DDS。

相比ROS1,ROS2带来了几个好处。一个好处是托管启动,你可以指定节点启动顺序。另一个好处是数据分发服务(DDS)通信协议,它可以以零拷贝的方式传递消息,节省了CPU和内存资源。在开发方面,他们花了更多的精力来增加测试覆盖率,提供更多更好理解的文档,以及更多持续集成,以便实现软件的认证。 说了那么多ROS2的优点,但是在版本稳定性,和社区支持程度(尤其是相关程序包,如MoveIt及相关教程)来讲还是不如ROS,对于独立开发者或者科研人员来讲,个人觉得还是先从ROS基础进行原型开发,开发成熟之后再考虑代码移植(ROS->ROS2)或者平台移植(Linux->Windows)问题。

DDS 及ROS API 层

ROS1与ROS2之间的桥梁

ROS2虽然重新设计了架构实现,但是也考虑到了与ROS1的兼容,专门开发了一个功能包——ros1_bridge,来完成ROS2与ROS1之间的通讯。但是目前ros1_bridge这个包的功能有限,还不提供python实现,而且仅支持ros2/common_interfaces repository中列出的通讯类型,如果要支持自己定义的接口,还需要自己编译ros1_bridge包。


5、引入DDS后,使得ROS2在通信方面有如下提升:

(1)实时性:DDS通过优化的内核机制,实现微秒级的数据传输;纯分布式的系统结构,保证系统内不存在影响实时性的瓶颈节点。

(2)可靠性:DDS提供点到点的信息交互服务,在系统中不存在集中式的代理或服务进程,从而保证整个系统服务不存在单点故障的风险;同时提供可靠传输策略(Reliability QoS),通过重发机制确保数据可靠地传输。

(3)持续性:ROS1尽管存在数据队列的概念,但是还有很大的局限,订阅者无法接收到加入网络之前的数据;DDS可以通过相应的QoS为ROS提供数据历史的服务,新加入的节点也可以获取发布的所有历史数据。

(4)灵活性:应用系统可以根据应用场景需求,灵活选择多种DDS提供的应用级QoS策略(例如可靠性传输、数据过滤、优先级排序等等),以满足系统的灵活性需求。

(5)扩展性:DDS使用“订阅/发布”机制进行数据交互,建立全局的虚拟数据空间,在通信层面将应用逻辑与节点的物理信息解耦合,使系统能够方便的实现节点增减或系统本身的分割/合并,满足系统的扩展性需求;运行时由DDS自动发现并连接设备和应用程序,即插即用,无需系统管理或目录服务。

(6)异构网络支持:DDS通过适配底层多种异构架构网络,对上层提供无差别的通信服务,使通信软硬件层对应用层完全透明。

(7)DDS解决了ROS通信层面的问题,这使操作系统的开发者、应用的开发者得以集中精力专注于业务的研究。


ROS中DDS的性能现状

2016年论文《Exploring the Performance of ROS2》中,作者针对ROS1和ROS2在延时、吞吐量、线程数、内存消耗等几个方面的性能进行了量化对比,数据量从256byte到4M,实验条件覆盖了ROS分布式的多种使用场景,具有一定的参考价值,也是目前对ROS2性能方面量化分析的唯一论文,不过需要注意的是论文使用的ROS2是Alpha版本,根据作者的对比数据,可得到如下结论(原文参见http://www.guyuehome.com/805):

(1)ROS2的性能在不同数据量的场景下,表现呈指数级变化,应该是大数据在底层传输的一些处理时间导致的。

(2)不同厂商的DDS产品性能表现,相差巨大,应该根据不同的应用场景选用最佳的DDS产品。

(3)QoS提供了多种配置选项,需要根据不同的应用场景,选择最适合自己的配置。

(4)ROS1会丢失初始数据,而ROS2有显著改进。

(5)ROS2目前的整体性能(论文中使用的Alpha版本)并不如ROS1,毕竟还处于开发阶段,而且对DDS的特性支持有限,但是具有巨大潜力。

No.1908 Building A,Optics Valley Times Square,Wuhan City,Hubei Province,China
Tel:027-87522899,027-87522877

合作与咨询

商务合作:

amy@jingtianrobots.com

渠道合作:
lxw@jingtianrobots.com

网站备案号:鄂ICP备17004685号-1 | 技术支持 | 联系我们 | 服务条款与隐私权 | 网站地图