作者:极氪软件及电子中心王阳明
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版本 | 发布时间 | 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) |
优点 | 缺点 |
松散耦合的机制提供框架 | 通信实时性能有限 |
丰富的机器人功能库 | 系统稳定性尚不满足工业级要求 |
庞大的用户群体 | 安全性上没有防护措施 |
免费开源 | 仅支持Linux(Ubuntu) |
便利的数据记录、分析、仿真工具 | 核心机制的性能没有优化占用资源 |
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 1中,用户的每个节点,无论是同一设备还是不同设备,必须已知Master节点的IP,并且全部依赖于Master节点进行通讯,一旦Master节点发生故障或该设备发生故障,则整个环境的所有节点功能尽失。无法恢复。也正因为这一点,ROS 1无法应用于正式的产品。
ROS 2引入了基于DDS的去中心化的数据通讯方式,不同节点可以通过未知IP的方式进行通讯,也进而有助于解决多机器人系统的问题。并且ROS 2也引入了 Quality of Service的机制,通过设定不同的服务质量来保障某些较差网络环境下也可以具备良好的通讯效果。
以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下面那一行所示,只要开发者愿意,可以支持任何编程语言。