写点什么

【Zeekr_Tech】ROS/ROS 2 介绍

作者:Zeekr_Tech
  • 2022 年 4 月 22 日
  • 本文字数:3173 字

    阅读完需:约 10 分钟

【Zeekr_Tech】ROS/ROS 2介绍

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

前言

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 的优缺点对比

ROS 为我们开发机器人带来了许多方便,然而它也确实存在一些问题:

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 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 整车操作系统,也欢迎各位有志之士加入我们,共同探索下一代汽车操作系统。

发布于: 刚刚阅读数: 4
用户头像

Zeekr_Tech

关注

还未添加个人签名 2021.12.27 加入

还未添加个人简介

评论

发布
暂无评论
【Zeekr_Tech】ROS/ROS 2介绍_操作系统_Zeekr_Tech_InfoQ写作社区