ROS可以说是目前机器人相关开源社区最流行的项目之一,它是一个易用且完备的机器人开发框架、生态乃至社区,海量的机器人开源项目(涵盖感知、规划、控制、定位、SLAM和建图、可视化等几乎所有机器人领域)均使用ROS作为基础。以自动驾驶汽车为代表的新的机器人应用场景对于中间层和开发框架在实时性、可靠性、伸缩性、跨平台可移植等方面提出了大量新的需求,ROS显然不能满足这些需求,ROS2因此产生,在经历了若干年的迭代后,ROS2项目目前已经相对完备和稳定,对于我们开发者而言,是时候拥抱ROS2了。
为什么转向ROS2
ROS自2007年发布以来,为机器人社区提供了一套相对完善的中间层、工具、软件乃至通用的接口和标准,可以说,凭借ROS,机器人工业领域的开发者能够快速开发系统原型并做测试和验证。自动驾驶本质上是机器人研究的一个应用领域,在产品原型快速开发的过程中也通常会采用ROS。
如果说ROS1为科研和原型开发提供了很好的生态的话,那么ROS2就是用于实际产品的部署环境的开发架构和相应工具链。
ROS1的天然缺陷
ROS1项目的初衷是为了给科研机器人Willow Garage PR2提供一个开发环境和相应的工具,为了让这套软件在更多的机器人上运行,ROS为机器人开发构建了应用层的抽象和通用的消息接口,最终在机器人社区中广为使用并发展为目前最流行的机器人软件生态体系之一。然而,ROS1研发的初衷就注定了该架构存在以下缺陷:
- 无实时性(real-time)
- 嵌入式设备不友好
- 对于网络通信的重依赖(需要大带宽且稳定的网络连接)
- 多用于学术应用
- 超高的灵活性带来的不规范的编程模式
- 原生的ROS仅支持单机器人
然而如今ROS已在大量工业领域的应用,包括科研机器人、工业机器人、轮式机器人、自动驾驶汽车乃至航天无人驾驶设备,其原来的功能设计已经不能满足海量应用对于某些性能(如实时性、安全性、嵌入式移植等)的需求,ROS2即在这样的背景下被设计和开发。
ROS2相较于ROS1的提升和改进
相较于ROS1,ROS2在设计之初就考虑了在产品环境下面临的一些挑战,具体来说,ROS2采用(或者计划采用)以下策略以提升其在产品环境的适用度:
- 支持多机器人
- 对小型嵌入式设备和微控制器的支持
- 实时系统:支持实时控制,包括进程间和机器间通信的实时性
- 支持非理想网络环境:在低质量高延迟等网络环境下系统仍然能够工作
- 对产品环境的支持的能力
- 规范的编程模型以支持基于ROS的大规模目的构建、开发和部署