ROS 1 (Robot Operating System 1) 和 ROS 2 (Robot Operating System 2) 虽然名字相似,但ROS 2 并不是 ROS 1 的简单升级,而是一次彻底的重构。它们在设计理念、底层架构、通信机制和应用场景上有着本质的区别。
可以将ROS 1比作“实验室时代的快速原型工具”,而ROS 2则是“面向工业级、商业化落地的分布式系统”。
以下是两者的深度对比分析:
1. 核心架构差异:中间件的根本变革
这是两者最大的区别,决定了它们的性能上限和应用边界。
表格
| 特性 | ROS 1 | ROS 2 |
|---|---|---|
| 底层通信中间件 | 自定义协议 (TCPROS/UDPROS) 基于 XML-RPC 进行服务发现,基于 TCP/UDP 传输数据。 | DDS (Data Distribution Service) 基于 OMG 标准的工业级实时通信中间件 (如 Fast DDS, Cyclone DDS)。 |
| 中心节点 (Master) | 有 (roscore) 所有节点注册依赖唯一的 Master 节点。单点故障:Master 挂了,整个系统瘫痪。 | 无 (Decentralized) 利用 DDS的自动发现机制 (Discovery),节点间直接通信。去中心化,无单点故障。 |
| 实时性 (Real-Time) | 非实时 受限于 Linux 非实时内核和自定义协议,难以保证微秒级延迟和确定性。 | 支持硬实时 实时操作系统 (RTOS, 如 VxWorks, QNX, RT-Linux),可实现确定性低延迟通信。 |
| 网络适应性 | 局域网友好,广域网困难 依赖 Master 节点,跨网段、跨防火墙配置极其复杂,不支持动态网络变化。 | 原生支持多网段/广域网 DDS 天生支持多播发现,轻松跨越子网、甚至通过互联网通信(需配置)。 |
| 语言支持 | 主要支持 C++ 和 Python。其他语言支持较弱或非官方。 | 多语言原生支持 基于 IDL (接口定义语言),天然支持 C++, Python, Java, C#, Go, Rust 等,异构系统互通更容易。 |
2. 功能与生态对比
A. 服务质量 (QoS) 策略
- ROS 1:几乎没有 QoS 概念。消息要么发送,要么丢失,无法灵活配置可靠性、持久化、截止时间等。
- ROS 2:核心优势。提供丰富的QoS 策略(可靠性、持久性、历史深度、截止时间、寿命周期等)。
- 场景:你可以设置雷达数据为“尽力而为”(丢失几帧没关系,追求速度),而设置刹车指令为“可靠传输”(必须送达,哪怕重传)。
B. 生命周期管理 (Lifecycle)
- ROS 1:节点启动即运行,状态不可控。难以管理复杂的启动顺序和错误恢复。
- ROS 2:引入了受管节点 (Managed Nodes)概念,定义了明确的状态机(未配置 -> 非激活 -> 激活 -> 关闭)。
- 优势:可以精确控制哪个节点先启动、何时开始处理数据、出错后如何优雅重启。这对工业安全至关重要。
C. 安全性 (Security)
- ROS 1:裸奔。默认无加密、无身份验证。任何连接到网络的设备都可以发布虚假指令控制机器人,极易被攻击。
- ROS 2:内置安全 (SROS2)。基于 DDS 的安全规范,支持身份认证 (Authentication)、访问控制 (Access Control) 和数据加密 (Encryption)。
D. 构建系统与包管理
- ROS 1:使用
catkin构建系统,依赖rosdep。 - ROS 2:使用
colcon(Common Object Oriented Build for Robots)。更现代、更灵活,支持混合构建 (CMake, Python, Gradle 等),编译速度更快,结构更清晰。
3. 优缺点总结
ROS 1 (Noetic Ninjemys 是最后一个版本,已停止新功能开发)
- 优点:
- 生态成熟:拥有过去10年积累的海量教程、开源包、社区问答。
- 简单易学:架构简单,上手快,适合教学和快速验证想法。
- 工具链丰富:rqt, rviz (旧版) 等工具非常稳定。
- 缺点:
- 单点故障:Master 节点是致命弱点。
- 无法量产:缺乏实时性、安全性和稳定性,难以通过工业安全认证。
- 网络受限:难以部署在复杂的分布式网络或云端。
- 停止维护:官方已不再添加新功能,仅维持安全补丁直到2025年(Noetic)。
ROS 2 (Humble, Jazzy, Rolling 等长期支持版)
- 优点:
- 工业级就绪:实时性、安全性、可靠性满足商业落地需求。
- 去中心化:系统更健壮,支持大规模分布式集群。
- 跨平台:完美支持Linux, Windows, macOS, 以及嵌入式 RTOS。
- 未来导向:结合AI、自动驾驶、云机器人的首选架构。
- 缺点:
- 学习曲线陡峭:概念多(QoS, Lifecycle, DDS, colcon),调试相对复杂。
- 生态迁移中:虽然主流包已迁移,但部分老旧或小众的 ROS 1 包尚未移植到 ROS 2。
- 资源消耗:默认配置下,DDS 的内存和 CPU 占用略高于 ROS 1 的轻量级协议(但在可接受范围内)。
4. 选型建议:该用哪个?
表格
| 场景 | 推荐选择 | 理由 |
|---|---|---|
| 高校教学 / 入门学习 | ROS 1 (Noetic)或ROS 2 | 如果教材老旧选 ROS 1; 如果是新课,强烈建议直接学 ROS 2,因为它是未来。 |
| 科研快速原型 (Proof of Concept) | ROS 1(若依赖旧包) 或ROS 2 | 如果算法包只有 ROS 1 版本,可用 ROS 1 快速验证;否则首选 ROS 2。 |
| 工业机器人 / 商业产品 | ROS 2 | 必须具备实时性、安全性和无单点故障能力,ROS 1 无法满足量产要求。 |
| 自动驾驶 / 无人车 | ROS 2 | 需要处理多传感器融合、高实时性要求和复杂的网络环境,ROS 2 是行业标准。 |
| 嵌入式资源受限设备 | ROS 2 (Micro-ROS) | Micro-ROS允许在 MCU (如 Arduino, STM32) 上运行 ROS 2 节点,直接连接 DDS 网络,这是 ROS 1 做不到的。 |
| 跨平台开发 (Windows/Mac) | ROS 2 | ROS 1 在 Windows 上支持极差(基本不可用),ROS 2 原生支持多平台。 |
5. 迁移与共存
目前处于过渡期,很多团队采用桥接 (Bridge)方案:
- 使用
ros1_bridge包,可以在同一个系统中让 ROS 1 节点和 ROS 2 节点互相通信。 - 策略:核心控制、感知、决策模块用ROS 2重构;暂时无法迁移的老旧算法或特定驱动保留在ROS 1容器中,通过桥接通信。
结论
ROS 1 是过去的辉煌,ROS 2 是现在的标准和未来的方向。
如果你现在开始一个新的机器人项目,请毫不犹豫地选择 ROS 2。
除非你被特定的、未迁移的遗留代码库死死绑定,否则没有理由再在新项目中引入 ROS 1。
ROS 2 解决的正是阻碍机器人从“实验室玩具”走向“工业产品”的核心痛点。