ROS 1(Robot Operating System 1)和 ROS 2(Robot Operating System 2)是机器人开发中两个不同版本的框架,它们在设计理念、架构和功能上有显著区别。以下是两者的核心差异总结:

1. ​底层通信机制

特性ROS 1ROS 2
通信协议基于自定义的 TCPROS/UDPROS基于 ​DDS(Data Distribution Service)​​(如 Fast DDS、Cyclone DDS)
实时性弱实时性,适合实验室环境强实时性,支持硬实时系统(如工业机器人)
可靠性单点故障(依赖 ROS Master)去中心化,无单点故障
网络支持局域网内通信为主支持广域网、NAT 穿透、多机器人协同

2. ​架构设计

ROS 1
  • 中心化架构:依赖 roscore(ROS Master)协调节点通信,Master 宕机会导致系统崩溃。
  • 单线程模型:回调函数在单线程中执行,高负载时易阻塞。
  • 语言支持:主要支持 C++ 和 Python。
ROS 2
  • 去中心化架构:无中心节点,节点通过 DDS 直接通信,支持分布式系统。
  • 多线程支持:内置多线程执行器(Multi-threaded Executor),提升并发性能。
  • 跨语言支持:全面支持 C++、Python、Rust、Java 等。

3. ​核心功能改进

通信机制
  • ROS 1:仅支持话题(Topic)和服务(Service)。
  • ROS 2:新增 ​动作(Action)​​ 和 ​参数(Parameter)​​ 的标准化接口,支持:
    • 服务质量(QoS)​:可配置通信可靠性(如丢包容忍、超时策略)。
    • 生命周期管理:明确节点的初始化、激活、销毁流程。
网络层优化
  • ROS 2​ 支持:
    • 多播(Multicast)和单播(Unicast)混合通信。
    • 动态节点发现(Discovery),无需手动配置 IP 和端口。
    • 加密通信(DDS-Security),适合工业级安全需求。

4. ​跨平台与部署

特性ROS 1ROS 2
操作系统支持主要支持 Linux支持 Linux、Windows、macOS、RTOS(如 VxWorks)
硬件兼容性依赖 PC 或嵌入式 Linux 设备支持微控制器(MCU)和实时操作系统(RTOS)
部署场景实验室、原型开发工业机器人、自动驾驶、无人机等实际场景

5. ​工具链与生态系统

工具ROS 1ROS 2
可视化工具RViz、rqtRViz2、rqt(逐步迁移中)
仿真工具GazeboGazebo 和 Ignition(新一代仿真)
编译系统catkinament 和 colcon
包管理rosdeprosdep + vcs(多仓库管理)

6. ​开发体验

  • ROS 1
    • 依赖 roscore,开发流程简单但扩展性差。
    • 调试工具成熟(如 rosbagrostopic)。
  • ROS 2
    • 支持 ​DDS 可插拔,可针对场景优化通信协议。
    • 命令行工具更强大(如 ros2 topic list --qos-profile 可过滤 QoS 配置)。

7. ​典型应用场景

  • ROS 1:适合教学、研究和小型机器人原型开发。
  • ROS 2:适合工业机器人、自动驾驶、多机器人协作等对 ​实时性​ 和 ​可靠性​ 要求高的场景。

8. ​迁移与兼容性

  • ROS 1 → ROS 2:官方提供迁移工具(如 ros1_bridge),但需重写部分代码(尤其是通信逻辑)。
  • 混合使用:可通过 ros1_bridge 实现 ROS 1 和 ROS 2 节点共存。

总结:如何选择?

  • 选择 ROS 1
    • 快速验证算法原型。
    • 依赖现有 ROS 1 生态(如大量开源包)。
  • 选择 ROS 2
    • 需要实时性、分布式部署或工业级应用。
    • 长期维护和新项目开发。

随着 ROS 2 生态的完善,新项目建议直接使用 ROS 2,尤其是涉及实际落地的机器人系统。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐