一、ROS2前世今生:从ROS1到ROS2的进化之路

1.1 为什么我们需要ROS2?

先说说我的个人经历吧。2015年我接手一个机器人项目,用的还是ROS1。当时觉得这东西真香——节点通信、消息发布订阅,写起来特别顺手。但做到一半,问题来了:机器人需要实时控制,ROS1的通信延迟动不动就几十毫秒,根本扛不住。

说白了,ROS1的设计初衷是给科研用的,不是给产品用的。它有几个硬伤:

  • 单点故障:ROS1的Master节点一旦挂了,整个系统就瘫痪。我在现场调试时遇到过,Master崩溃,所有节点失联,机器人直接原地罢工。
  • 实时性差:ROS1基于TCP/UDP,没有实时调度能力。工业机器人要求毫秒级响应,ROS1做不到。
  • 跨平台困难:ROS1强依赖Linux,Windows和RTOS基本没法用。但很多嵌入式设备跑的是RTOS,你总不能为了用ROS1去换系统吧?
  • 安全性缺失:ROS1没有加密、认证机制。我见过有人直接在公网上跑ROS1,结果被隔壁实验室的节点乱发指令,机器人差点撞墙。

嗯,这些痛点催生了ROS2。ROS2不是ROS1的简单升级,而是从底层重新设计。它要解决的核心问题就三个:实时性、可靠性、跨平台。

核心观点:ROS1适合原型验证,ROS2适合产品落地。如果你做的是科研demo,ROS1够用;但如果你要做商业机器人,ROS2是唯一选择。

1.2 ROS2的核心设计理念

ROS2的设计理念,我总结为四个关键词:

  1. 去中心化:没有Master节点,节点之间直接通信。一个节点挂了,不影响其他节点。
  2. 实时通信:底层用DDS(数据分发服务),支持QoS策略。你可以控制消息的可靠性、延迟、历史记录等。
  3. 跨平台:支持Linux、Windows、macOS、RTOS。我最近在树莓派上跑ROS2,配合FreeRTOS做电机控制,效果不错。
  4. 安全性:支持加密、认证、访问控制。适合多机器人协作的场景。

你想想看,这些特性对工业机器人、自动驾驶、医疗机器人来说,简直是刚需。ROS2的架构图如下:

应用层 机器人控制、导航、感知、规划等用户节点 ROS2中间件层 rcl(ROS客户端库)、rclcpp/rclpy 话题、服务、动作、参数等通信机制 DDS数据分发服务层 Fast DDS / Cyclone DDS / RTI Connext 操作系统层:Linux / Windows / RTOS

1.3 ROS2架构概览

ROS2的架构分四层,我习惯从下往上理解:

层级 组件 作用
应用层 用户节点、launch文件 实现具体功能,如导航、机械臂控制
中间件层 rcl、rclcpp、rclpy 提供统一的API,屏蔽DDS差异
DDS层 Fast DDS、Cyclone DDS等 负责数据发布/订阅、QoS策略
操作系统层 Linux、Windows、RTOS 提供底层调度、网络、文件系统

这里有个关键点:DDS是ROS2的通信基石。ROS1的通信是中心化的,所有消息经过Master转发。ROS2的DDS是点对点的,每个节点直接和DDS全局数据空间交互。这样做的好处是:

  • 没有单点故障,一个节点挂了不影响全局
  • 支持QoS,你可以设置消息的可靠性(RELIABLE vs BEST_EFFORT)、持久性、延迟预算等
  • 自动发现机制,节点上线后自动找到对方,不需要手动配置

避坑指南:我曾经在项目中遇到DDS发现失败的问题。两台机器在同一个网段,但节点就是互相找不到。后来发现是防火墙阻断了DDS的发现端口(默认是7400-7500)。解决办法:关闭防火墙,或者手动指定发现端口。

1.4 ROS1 vs ROS2:关键差异对比

我整理了一个对比表,方便你快速理解:

特性 ROS1 ROS2
通信架构 中心化(Master) 去中心化(DDS)
实时性 不支持 支持(通过DDS实时QoS)
跨平台 仅Linux Linux/Windows/macOS/RTOS
安全性 无 支持加密、认证、访问控制
编程语言 C++03、Python2 C++14/17、Python3
消息序列化 自定义(rosmsg) 使用DDS的IDL
节点生命周期 手动管理 支持生命周期管理(启动/停止/重启)

说白了,ROS2就是ROS1的「工业加强版」。如果你还在用ROS1做产品,我建议尽早迁移。虽然迁移成本不低,但长期来看是值得的。

注意:ROS2和ROS1的API不兼容。你不能直接把ROS1的代码复制到ROS2里用。需要重写节点、消息定义、launch文件等。不过ROS2提供了ros1_bridge工具,可以实现ROS1和ROS2的混合通信,适合逐步迁移。

1.5 我的个人建议

如果你刚开始学ROS,我建议直接学ROS2。别在ROS1上浪费时间了。ROS1已经停止维护,新功能都在ROS2上开发。我带的团队从2020年开始全面转向ROS2,现在所有新项目都用ROS2。

嗯,这里有个小故事。2021年我帮一家公司做AGV调度系统,他们坚持用ROS1。结果部署到工厂后,Master节点每隔3小时崩溃一次,导致AGV全部停摆。后来换成ROS2,用了DDS的RELIABLE模式,再也没出过问题。你想想看,工厂里几十台AGV同时跑,Master挂了就是灾难。

所以我的结论很明确:ROS2是机器人开发的未来。接下来的章节,我会带你一步步搭建ROS2环境、写第一个节点、理解通信机制。准备好了吗?我们开始吧。

本章小结:

  • ROS1的痛点:单点故障、实时性差、跨平台困难、安全性缺失
  • ROS2的核心设计:去中心化、实时通信、跨平台、安全性
  • ROS2架构:应用层 → 中间件层 → DDS层 → 操作系统层
  • DDS是ROS2的通信基石,支持QoS和自动发现
  • 建议直接学习ROS2,避免走ROS1的弯路

可可精品资料库