一、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的设计理念,我总结为四个关键词:
- 去中心化:没有Master节点,节点之间直接通信。一个节点挂了,不影响其他节点。
- 实时通信:底层用DDS(数据分发服务),支持QoS策略。你可以控制消息的可靠性、延迟、历史记录等。
- 跨平台:支持Linux、Windows、macOS、RTOS。我最近在树莓派上跑ROS2,配合FreeRTOS做电机控制,效果不错。
- 安全性:支持加密、认证、访问控制。适合多机器人协作的场景。
你想想看,这些特性对工业机器人、自动驾驶、医疗机器人来说,简直是刚需。ROS2的架构图如下:
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的弯路
可可精品资料库