极氪软件及电子核心王阳明

前言

ROS是机器人操作系统(Robot Operating System)的英文缩写。ROS是用于编写机器人软件程序的一种具备高度灵活性的软件架构。ROS的原型源自斯坦福大学的STanford Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)我的项目。
机器人的工业界和学术界在软件工具的应用上是有显著的一致的。因为机器人的工业界并不像消费类电子这样出货量微小,所以相对高的技术壁垒和关闭的生态是非常常见的。为了进步本人的技术壁垒,这些公司往往会本人设计一整套关闭的软硬件,以达到让其他人(竞争对手或开发者)无奈用本人的工具替换之的目标。而学术界,学生和老师们为了缩小反复造轮子的工作,往往会拥抱开源社区,抉择现有的工具进行开发和钻研,最广为人知的便是ROS(Robot Operating System)

ROS是什么

ROS/ROS 2并不是一个软件,而是一系列软件的汇合。个别咱们称之为软件解决方案堆栈。蕴含如硬件驱动程序、网络模块、通信架构和机器人算法实现等等。ROS将所有这些性能包放在一个保护伞下,因而开发人员无需从新造轮子。
ROS并不是一个操作系统,而个别称之为元操作系统,即基于操作系统以上的类操作系统。
ROS并不是一个中间件,因为它实现了包含感知、导航、管制、静止布局和仿真等多种性能。

ROS
ROS1.0版本公布于2010年,基于PR2机器人开发了一系列机器人相干的根底软件包。随后ROS版本迭代频繁,ROS的版本个别会随着Ubuntu零碎长期反对(LTS)版本而更新,其中ROS目前最新的版本都曾经适配到Ubuntu 20.04 LTS。ROS仅在Ubuntu上进行CI测试,然而社区成员积极支持其余Linux版本、Mac OS X、Android、Windows,使得ROS能够兼容,但仅提供有限制性的性能反对。
ROS的历史版本
ROS版本 公布工夫 Ubuntu版本
ROS Noetic Ninjemys
May 23rd, 2020 Ubuntu 20.04(Focal)
ROS Melodic Morenia
May 23rd, 2018 Ubuntu 18.04(Bionic)
ROS Lunar Loggerhead
May 23rd, 2017 Ubuntu 17.04(Zesty)
ROS Kinetic Kame
May 23rd, 2016 Ubuntu 16.04(Xenial)
ROS Jade Turtle
May 23rd, 2015 Ubuntu 15.04 (Vivid)
ROS Indigo Igloo
July 22nd, 2014 Ubuntu 14.04 (Trusty)
ROS Hydro Medusa
September 4th, 2013 Ubuntu 12.04 (Precise)
ROS Groovy Galapagos
December 31, 2012 Ubuntu 12.04(Precise)
ROS Fuerte Turtle
April 23, 2012 Ubuntu 10.04(Lucid)
ROS Electric Emys
August 30, 2011 Ubuntu 10.04(Lucid)
ROS Diamondback
March 2, 2011 Ubuntu 10.04(Lucid)
ROS C Turtle
August 2, 2010 Ubuntu 9.04(Lucid)
ROS Box Turtle
March 2, 2010 Ubuntu 8.04(Hardy)
ROS的优缺点比照
ROS为咱们开发机器人带来了许多不便,然而它也的确存在一些问题:
长处 毛病
涣散耦合的机制提供框架 通信实时性能无限
丰盛的机器人性能库 零碎稳定性尚不满足工业级要求
宏大的用户群体 安全性上没有防护措施
收费开源 仅反对Linux(Ubuntu)
便当的数据记录、剖析、仿真工具 外围机制的性能没有优化占用资源
ROS的成熟案例
ROS曾经走过十个年头,随同着机器人技术的大倒退,ROS也失去了极大的推广和利用。只管ROS还存在不少局限性,但无奈覆盖ROS的矛头,社区内的性能包还是呈指数级逐年上涨,为机器人开发带来了微小的便当。不少开发者和钻研机构还针对ROS的局限性进行了改进,但这些部分性能的改善往往很难带来整体性能的晋升,在行业内也积攒了大量成熟的利用:

机械臂控制器中领军企业KEBA,他们的控制器曾经反对ROS

美国NASA基于ROS开发的Robonaut 2

百度apollo无人车的底层是基于ROS开发的

总体来说,ROS更适宜科研和开源用户应用,如果在工业场景利用(例如无人驾驶)还须要做优化和定制,目前ROS曾经进行更新,机器人开发者对新一代ROS的呼声越来越大,ROS2.0的音讯也不绝于耳。

ROS 2
ROS无奈真正进入产业界,也天然无奈产品化。为了解决这一问题,社区提出了ROS 2。使得ROS具备产品化的个性,包含实时性、适应于全平台、实用于性能低的硬件(MCU+RTOS)、分布式、数据加密和古代编程语言的反对。

ROS 2的历史版本
ROS 版本 公布工夫 Ubuntu版本
Humble Hawksbill
May 23rd, 2022 TBD
Galactic Geochelone
May 23rd, 2021 Ubuntu 20.04(Focal)
Foxy Fitzroy
June 5th, 2020 Ubuntu 20.04(Focal)
Eloquent Elusor
November 22nd, 2019 Ubuntu 18.04 (Bionic)
Dashing Diademata
May 31st, 2019 Ubuntu 18.04 (Bionic)
Crystal Clemmys
December 14th, 2018 Ubuntu 16.04 (Xenial)
Bouncy Bolson
July 2nd, 2018 Ubuntu 16.04 (Xenial)
Ardent Apalone
December 8th, 2017 Ubuntu 16.04 ( Xenial)
实时化与分布式
为了解决音讯间通信的去中心化和实时性问题,ROS 2引入了Data Distribution Service(DDS),一种曾经广泛应用于国防、民航、工业管制等畛域,成为分布式实时零碎中数据公布/订阅的规范解决方案。如下图所示,右边是ROS 1,左边是ROS 2。

在ROS 1中,用户的每个节点,无论是同一设施还是不同设施,必须已知Master节点的IP,并且全副依赖于Master节点进行通信,一旦Master节点产生故障或该设施产生故障,则整个环境的所有节点性能尽失。无奈复原。也正因为这一点,ROS 1无奈利用于正式的产品。
ROS 2引入了基于DDS的去中心化的数据通讯形式,不同节点能够通过未知IP的形式进行通信,也进而有助于解决多机器人零碎的问题。并且ROS 2也引入了 Quality of Service的机制,通过设定不同的服务质量来保障某些较差网络环境下也能够具备良好的通信成果。

实时性
而对于实时性,因为DDS在诸多工业和产业有诸多利用,具备良好的生态,其性能毋庸置疑。如下图的测试后果:
测试设施为两台PowerEdge R330 e34s
OS: Ubuntu 18.04.2 LTS bionic
Architecture: x86_64
CPU(s): 8
Thread(s) per core: 2
Model name: Intel(R) Xeon(R) CPU E3-1230 v6 @ 3.50GHz

        以Fast-RTPS为例,能够看到从延时上,在该双设施间通信中能够稳固在100s以下,而吞吐量的带宽也达到了750Mbit/s以上。具体的跑分数据能够参考Fast-RTPS vs Cyclone DDS vs OpenSplice DDS进行理解,且同设施内的通信效率会远超该后果。 

数据加密
ROS 2在DDS的根底之上引入了SROS的概念,设计文档参考ROS 2 DDS-Security integration,即所有的ROS 2音讯均可通过SROS进行加解密、鉴权、受权管制、Log和数据标记的权限管制等。基于ROS 2的本来设计逻辑,咱们甚至能够将数据的密钥生成和存储放到ARM TEE OS中,以实现较高平安的数据保障

古代编程语言的反对
因为ROS 1的最后发行版在2007年,长期以来的反对和泛滥开发库的反对导致很多语言的新个性并不能良好地利用。比方对于Python,直至2020年公布的Noetic版本中才首次反对了Python 3,而Python 2在2020年1月便曾经进行进行反对了。再如C++,ROS 1是基于C++ 03实现的,对于C++ 11的反对并不好,更不必谈C++ 14和C++ 17的反对。
ROS 2则齐全反对Python 3,并基于古代C++编写。并基于其松耦合的形式,还反对Java和Rust等编程语言。如下图User Application上面那一行所示,只有开发者违心,能够反对任何编程语言。

灵便的机制
ROS 2提供了一种基于生命周期的管理模式, 即每个节点的运行状态是齐全可控的。参考设计文档Managed nodes的论述。所有Managed节点都能够在运行时进行实时配置、治理、敞开和启动,并在出错时能够由治理节点进行唤醒和重置。这种形式保障了整个零碎的稳定性和鲁棒性,也进步了零碎出错后复原到失常的能力。
ROS 2在运行时能够更换DDS中间件,也能够在不同DDS中间件的实现间进行通信。

5G的反对
ROS 2在Ericsson的推动下,正在切磋5G的ROS 2通信计划的制订和实现。

全新的生态
继承ROS 1博大的开源生态资源,ROS 2的公布激发了大家对于ROS产品化的激情,许多公司都向ROS 2奉献计划和代码,包含但不限于Intel、NVIDIA、Ericsson等。
除了奉献新的代码,ROS 1的优良工具也都被齐全继承到ROS 2里,如Moveit、Rviz和rosbag等。并且有些模块,如navigation(导航),在开发者的改良中降级为navigation2,改善了诸多问题,进步了应用的便利性。

多种通信形式
ROS 2 Topic通信节点和节点之间进行通信的桥梁,节点能够同时公布和接管话题,节点和话题之间是多对多关系

Service(服务)是ROS图上节点通信的另一种办法,服务基于呼叫响应模型,而不是主题的发布者-订阅者模型。服务端和客户端之间,是一对一或一对多关系

Action是ROS 2中用于长时间运行工作的通信类型之一,它们由三局部组成:指标,后果和反馈

ROS 2的成熟案例
美军投资的Ghost Robotics,其四足机器人应用了Eloquent版本的ROS 2进行开发,DDS计划选用的是商用的Cyclone DDS

Mission Robotics的水下机器人(ROV),应用了Foxy版本的ROS 2进行开发

总结
汽车产业真正的反动曾经开始,软件定义汽车的时代曾经到来。汽车正减速从从机械设备向高度数字化、信息化的智能终端转变,波及畛域宏大并且简单。一辆主动驾驶的汽车,从某种意义上来说,也是一个主动驾驶的机器人,天经地义的能够是应用ROS 2进行开发,ROS 2提供了大量根底组件,大大便当了包含导航算法、主动驾驶算法和一些AI算法的部署。当然ROS 2依然有很多缺点,ROS 2的调度模型无奈抢占,有时候优先级高的调度实例可能被低优先级的调度阻塞,还没有一家汽车行业公司利用ROS 2将产品落地。
面对这些挑战,极氪的软件及电子核心大胆尝试,基于ROS 2的通信框架和平台架构,进行基于SOA架构的汽车操作系统的开发,并且获得不错的测试成果。极氪的软件及电子核心的在始终在前沿技术方面做深刻摸索,致力于打造ZEEKR OS整车操作系统,也欢送各位有志之士退出咱们,独特摸索下一代汽车操作系统。