特别声明:本系列文章,源自猛狮团队赵虚左老师,博客发布过程中略有改动,并添加了一些自己的笔记和理解,希望更多的人能学习到这项先进的机器人技术,为祖国的智能化事业舔砖加瓦!
1.1.1 ROS2发展历程
1.起源
2007年,一家名为柳树车库(Willow Garage)的机器人公司发布了ROS,ROS集开源、免费、高复用、低耦合、工具丰富等等诸多优势于一身,一经推出便迅速吸引了大量的开发者、科研人员、硬件供应商的加入,形成了稳定且多样的机器人生态,水到渠成的ROS也成为了机器人领域的主流软件框架并流行至今。
但是自ROS诞生的十几年来,不管是机器人相关软件、硬件还是ROS社区都发生了天翻地覆的变化,加之ROS1存在一些设计上的先天性缺陷,各种内外因素叠加下,导致ROS1在许多应用场景下都已经显得力不从心了。此背景下,官方于2017正式推出了新一代机器人操作系统——ROS2,ROS2基于全新的设计框架,保留了ROS1的优点并改进其缺陷,ROS2的目标是适应新时代的新需求。
2.发行版本
ROS发行版是一组版本化的ROS功能包,它类似于Linux发行版(例如 Ubuntu)。ROS发行版的目的是让开发人员可以在一个相对稳定的代码库上工作,直到新的发行版推出。
以下列表为ROS2各不同发布版本的简单说明。
发行版 | 发布日期 | 标识 | 停止维护日期 |
---|---|---|---|
Iron Irwini | 2023 年 5 月 23 日 | 待定 | 2024 年 11 月 |
Humble Hawksbill | 2022 年 5 月 23 日 | ![]() | 027 年 5 月 |
Galactic Geochelone | 2021 年 5 月 23 日 | ![]() | 2022 年 11 月 |
Foxy Fitzroy | 2020 年 6 月 5 日 | ![]() | 2023 年 5 月 |
Eloquent Elusor | 2019 年 11 月 22 日 | ![]() | 2020 年 11 月 |
Dashing Diademata | 2019 年 5 月 31 日 | ![]() | 2021 年 5 月 |
Crystal Clemmys | 2018 年 12 月 14 日 | ![]() | 2019 年 12 月 |
Bouncy Bolson | 2018 年 7 月 2 日 | ![]() | 2019 年 7 月 |
Ardent Apalone | 2017 年 12 月 8 日 | ![]() | 2018 年 12 月 |
beta3 | 2017 年 9 月 13 日 | 2017 年 12 月 | |
beta2 | 2017 年 7 月 5 日 | 2017 年 9 月 | |
beta1 | 2016 年 12 月 19 日 | 2017 年 7 月 | |
alpha1 - alpha8 | 2015 年 8 月 31 日 | 2016 年 12 月 |
ROS2版本发布特点:
- 发布版本与Ubuntu版本对应,生命周期也有Ubuntu保持一致,正常情况下偶数年份发布长支持版(5年),奇数年份发布短支持版(2年);
- 版本名称由形容词+名词的格式组成,这一点与Ubuntu版本名称规则一致;
- 正常情况下,每年的5月23日,世界海龟日发布新版本。
需要另外说明的是:
官方于2020年发布了ROS1的最终版本,并将于2025年终止ROS1的维护。而早在2017年就已经推出了ROS2的第一个正式版本,并且随着ROS2的不断完善,于2022年又推出ROS2的第一个5年长支持版。对于ROS而言,这是一个里程碑式的事件,这意味着自此开始,ROS2将全面取代ROS1。
1.1.2 ROS2组成体系
整个ROS生态由通信(Plumbing)、工具(Tools)、功能(Capabilities)与社区(Community)四大部分组成。
通信(Plumbing)
通信是整个ROS系统的核心实现,是ROS内置的一个消息传递系统,通常称之为middleware(中间件)或Plumbing(管道)。
在构建新的应用程序或使用与硬件交互的软件时,如何实现通信是首当其冲的问题,为此ROS提供了专门的消息传递系统,它可以管理不同节点之间的通信细节,提高开发者的工作效率。这套消息传递系统使用了“面向接口”的编程思想,可以通过清晰规范的接口,将不同模块分离,从而也将故障隔离。使得ROS系统更易于维护、扩展性更强且保证了程序的高复用性。
接口规范可以由开发者自行定义。同时为了方便使用,在ROS中也提供了许多标准的接口,这些标准接口有着广泛应用,比如:将雷达或摄像头数据传输到可视化的用户界面或是传输到定位算法模块,都会使用到标准接口。
工具(Tools)
构建机器人应用程序极具挑战性。开发者除了会遇到一些传统的软件开发问题之外,还需要通过传感器或执行器与物理世界进行异步交互。显而易见的,良好的开发工具可以提高应用程序的开发效率,在ROS中就内置了launch、调试、可视化、绘图、录制回放等一系列工具。这些工具不光可以提高开发效率,还可以在发布产品时直接包含在产品之中。
功能(Capabilities)
ROS生态系统是机器人软件的聚宝盆。无论开发者需要用于GPS的设备驱动程序、用于四足仿生机器人的步行和平衡控制器,还是用于移动机器人的地图系统,ROS都能满足你的需求。从驱动程序到算法,再到用户界面,ROS都提供了相关实现,开发者只需专注于自身应用程序即可。
ROS的目标是提供一站式的技术支持,降低构建机器人应用程序的门槛。ROS希望任何开发者都可以将自己的“创意”变为现实,而无需了解底层软件和硬件的所有内容。
社区(Community)
ROS社区规模庞大、多样且全球化,从学生和业余爱好者到跨国公司和政府机构,各行各业的人和组织都在推动着ROS项目的发展。
该项目的社区中心和中立管家是Open Robotics,它托管共享在线服务(例如ROS官网:ROS: Home),创建和管理分发版本(包括您安装的二进制包),并开发和维护大部分ROS核心软件。 Open Robotics还提供与 ROS 相关的工程服务。
1.1.3 ROS2优势
1.ROS与其他机器人软件框架比较
ROS是构建机器人的最快捷方式!
1.1 开源
ROS一直是开源的,并且将永远是开源的,以确保全世界的爱好者、开发人员可以自由、不受限制地访问高质量、一流、功能齐全的机器人SDK。另外官方也在其他开源项目之上构建ROS,ROS会尽可能的利用并遵循开放标准(例如OMG的DDS)。
1.2 免费
官方鼓励用户对ROS做出开源贡献,也欢迎提出宝贵意见,但不干涉开发者将ROS集成进非开源软件,不反对将ROS集成进专有产品。
1.3 多平台支持
ROS2支持Linux、Windows和macOS以及各种嵌入式平台(通过micro-ROS)并且不同平台都已经通过了官方测试,这意味着通过ROS2可以实现开发、部署后端管理系统和用户界面的无缝衔接。分层支持模型还允许将ROS2移植到诸如实时和嵌入式操作系统等新平台上,以便在获得关注和投资时将ROS2引入和推广到这些新平台中。
1.4 应用领域广泛
ROS可以在各种机器人应用中使用,从室内到室外,从家用到汽车,从水下到太空,从消费市场到工业领域,ROS都可以独当一面。
1.5 全球化社区
十多年来,ROS项目通过培育由数百万开发人员和用户组成的全球化社区,为机器人技术做出贡献和改进,从而产生了一个庞大的机器人软件生态系统。 ROS由该社区开发并为该社区服务,该社区将成为其未来的管理者。
1.6 可缩短产品上市时间
ROS提供了开发机器人应用程序所需的工具、库和功能,使开发者可以将更多的时间花费在与自身业务相关的工作上。由于它还是开源的,所以开发者可以决定何时何处使用ROS,甚至还可以根据自身需求修改ROS。另外ROS是友好的,不具排他性,开发者可以在ROS和其他机器人软件框架之间自由选择,或者也可以将ROS与其他软件框架集成,以取长补短。
1.7 广泛的行业支持
业界对ROS的支持非常强大。除了在ROS上开发产品外,来自世界各地的大大小小的公司都在投入资源为ROS做出开源贡献。
1.8 业界肯定
整个机器人行业都依赖于ROS。ROS是教授机器人技术的标准,是大多数机器人研究的基础,从单个学生项目到多机构合作再到大型竞赛,ROS都占据着主导地位。世界各地不计其数的机器人内部都运行着ROS,仅在自主移动机器人 (AMR) 中,ROS就帮助创造了数十亿美元的价值。
2.ROS2较之于ROS1的优势
ROS2是全新一代机器人操作系统,不只是功能增强的ROS1。
2.1 去中心化
在ROS1中使用master节点管理调度ROS系统,这存在极大的安全隐患,一旦master节点异常退出,那么会导致整个系统的崩溃。在ROS2中采用了去中心化,各个节点之间无需通过master关联,各个节点都是等态的,可以相互发现彼此。
2.2 全新通信底层实现
秉着不重复发明轮子的原则,ROS2不再自实现通信底层,而是直接更换为DDS通信,这使得ROS2较之于ROS1无论是通信的实行性、可靠性还是连续性都有大幅度提升。
2.3 应用场景更为广泛
ROS1在设计之初有着天生的硬件优势以及局限性:
- 单机;
- 工作站级的计算资源;
- 无实时性要求(有此类需求也可以以特殊方式满足);
- 出色的网络连接(有线或近距离高带宽无线);
- 主要用于学术界;
- 灵活有余而约束不足。
这导致了它的一些先天性缺陷,不能适应新时代的需求,比如:
- 对多机器人编队支持欠佳;
- 小型嵌入式平台不能很好的支持ROS;
- 实时性差;
- ROS之间的数据传输受网络质量影响严重;
- 产品不易落地。
随着ROS2的推出,上述场景的缺陷都得到很大程度的修复。
2.4 大量采用新技术、新的设计理念
随着ROS十数年的发展,大量的新技术也产生、改进、成熟并被广泛采用,ROS也开始引入并应用一些新技术,比如:
-
DDS( Data Distribution Service——数据分发服务);
-
Zeroconf;
-
ZeroMQ;
-
Redis;
-
WebSockets。
这些新技术为ROS带来了更多的便利,比如:更少的维护成本,却有着更多的功能拓展,并且随着第三方库的升级而持续受益。
此外,ROS2还重构了API系统,改进了ROS1的API在设计上的不足。