1.1 ROS2简介
1.1 ROS2简介
场景
机器人是一种高度复杂的系统性实现,机器人设计包含了机械结构设计、机械加工、硬件设计、嵌入式软件设计、上层软件设计等诸多模块,是各种硬件与软件的有机结合,甚至可以说机器人系统是当今工业体系的集大成者。机器人体系是相当庞大的,其复杂度之高,以至于没有任何个人、组织甚至公司能够独立完成系统性的机器人研发生产任务。
那么问题随之而来:既然机器人实现如此困难,那么我们应该如何开展相关工作呢?
一种合适的策略是——合作。让机器人研发者专注于自己擅长的领域,其他模块则直接复用相关领域更专业研发团队的实现,当然自身的研究也可以被他人继续复用。这种基于“复用”的分工协作,遵循了不重复发明轮子的原则,显然是可以大大提高机器人的研发效率的,尤其是随着机器人硬件越来越丰富,软件库越来越庞大,这种复用性和模块化开发需求也愈发强烈。
在此大背景下,便诞生了ROS。ROS是一套机器人通用软件框架,可以提升功能模块的复用性,并且随着ROS2的推出,ROS日臻完善,是机器人软件开发的不二之选。
概念
ROS(Robot Operating System)是用于构建机器人应用程序的软件开发工具包。ROS是开源的,它由一组软件库和若干工具组成。
在机器人领域,ROS是一个标准软件平台,这个平台为开发者提供了构建机器人应用程序所需的各个功能模块,并且开发者能够以“可插拔”的方式组织各个功能模块,无论开发者的程序是用于课堂实验、科学研究、原型设计或是最终产品,ROS都提供了一站式的技术支持。
另外需要注意的是,ROS虽然字面意思是机器人操作系统,但是它并非经典意义上的操作系统,更准确的讲ROS是一个 SDK(Software Development Kit)也即软件开发工具包。
作用
秉着“不要重复发明轮子”的原则,通过ROS可以复用已有功能并方便快捷的拓展新功能。
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 Irwini2023 年 5 月 23 日待定2024 年 11 月Humble Hawksbill2022 年 5 月 23 日2027 年 5 月Galactic Geochelone2021 年 5 月 23 日2022 年 11 月Foxy Fitzroy2020 年 6 月 5 日2023 年 5 月Eloquent Elusor2019 年 11 月 22 日2020 年 11 月Dashing Diademata2019 年 5 月 31 日2021 年 5 月Crystal Clemmys2018 年 12 月 14 日2019 年 12 月Bouncy Bolson2018 年 7 月 2 日2019 年 7 月Ardent Apalone2017 年 12 月 8 日2018 年 12 月beta32017 年 9 月 13 日2017 年 12 月beta22017 年 7 月 5 日2017 年 9 月beta12016 年 12 月 19 日2017 年 7 月alpha1 - alpha82015 年 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官网:https://www.ros.org/),创建和管理分发版本(包括您安装的二进制包),并开发和维护大部分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在设计上的不足。
【课程内容和讲义内容持续更新,详情请关注猛狮集训营知识星球】