极氪软件及电子核心王阳明
前言
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 为例,能够看到从延时上,在该双设施间通信中能够稳固在 100μs 以下,而吞吐量的带宽也达到了 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 整车操作系统,也欢送各位有志之士退出咱们,独特摸索下一代汽车操作系统。