Skip to content

第三章:ROS2 的前身 ROS1——知道它从哪来

在前两章,我们已经知道:

  • ROS2 是什么
  • ROS2 在系统中能干什么

这一章我们要回答一个 很多新手都会问的问题:

常见疑问

既然已经有 ROS1,为什么还要搞一个 ROS2?

理解这一章,你就会明白:

ROS2 不是"升级版 ROS1",而是一次从底层设计开始的重构。


3.1 ROS1 是怎么来的

ROS1(通常直接叫 ROS)诞生于 2007 年,

由 斯坦福大学 和 Willow Garage 公司联合开发。


当年的真实困境

当时机器人领域面临一个非常严重的问题:

行业痛点

每个实验室、每个团队都在重复造轮子。

具体表现:

  • 同样的导航算法,不同团队各写一份
  • 接口不统一,代码无法复用
  • 研究成果难以共享

ROS1 的历史贡献

ROS1 的出现,第一次在机器人领域做了三件事:

1. 统一通信方式

定义了标准的节点间通信协议

2. 统一代码组织结构

规范了功能包的组织方式

3. 推动大规模开源协作

建立了全球性的开发者社区


历史地位

ROS1 让机器人领域第一次有了 "通用语言"。


ROS1 的发展成果

随着时间发展,ROS 社区:

  • 累积了 数千个功能包
  • 拥有 数十万开发者
  • 成为机器人研究和教学的 事实标准

3.2 ROS1 的先天问题

ROS1 很成功,但它的很多问题并不是"Bug",

而是 在最初设计阶段就无法避免的限制。

核心矛盾

这些问题,在实验室还能忍,

但在工程和工业场景中会 非常致命。


3.2.1 单点故障问题(roscore)

什么是 roscore

ROS1 有一个核心组件叫 roscore。

  • 所有节点都要通过它才能互相找到
  • 一旦 roscore 挂掉,整个系统立刻瘫痪

为什么这是问题

工程级问题

在真实机器人系统中,单点故障是不可接受的。

实际场景:

在工厂里,机器人突然全停了,那得损失多少钱?


3.2.2 不支持实时系统

很多工业机器人对时间非常敏感:

实时性要求

  • 10 ms 内必须响应
  • 延迟过大会直接导致安全问题

ROS1 的局限

现实限制

ROS1 在设计时并没有考虑实时性需求,

这使它难以进入工业级应用。


3.2.3 安全性几乎为零

ROS1 的默认设计

  • 只要能连上网络
  • 谁都可以发布、订阅、控制机器人

安全隐患

严重问题

在公网或工业网络中,

这是 严重的安全风险。

可能的后果:

  • 恶意控制
  • 数据泄露
  • 系统破坏

3.2.4 平台支持受限

ROS1 的限制

  • 几乎只能在 Linux(Ubuntu)上完整运行
  • Python 依赖 Python 2(已停止维护)

时代局限

这些问题,随着时间推移越来越难以接受。


3.3 ROS2 是如何解决这些问题的

ROS2 并不是在 ROS1 上"打补丁",

而是 推倒重来,从架构层重新设计。


解决方案一:去中心化通信(没有 roscore)

技术基础

ROS2 基于 DDS(数据分发服务)


核心变化

架构革新

节点之间 直接发现、直接通信,

不再依赖中心节点。


带来的好处

  • ✓ 没有单点故障
  • ✓ 系统更稳定
  • ✓ 更适合分布式部署

解决方案二:支持实时系统

ROS2 的设计考虑

  • 实时调度
  • 确定性通信
  • 工业控制需求

应用场景拓展

这使 ROS2 能进入:

  • 工业机器人
  • 自动化生产线
  • 对安全性要求极高的场景

解决方案三:引入安全机制

ROS2 的安全特性

  • 加密通信
  • 身份认证
  • 权限控制(DDS-Security)

质的飞跃

ROS2 从"实验室工具",

进化成 可进入真实工程环境的系统框架。


解决方案四:真正的跨平台

ROS2 原生支持

  • ✓ Linux
  • ✓ Windows
  • ✓ macOS

语言支持

  • ✓ Python 3
  • ✓ C++

彻底摆脱历史包袱。


3.4 ROS1 和 ROS2 的核心区别(对比表)

对比项 ROS1 ROS2
通信架构 roscore 中心化 DDS 去中心化
单点故障 有 无
实时性 不支持 支持
安全性 无 内置安全机制
平台支持 Linux 为主 真正跨平台
Python 版本 Python 2 Python 3
维护状态 已停止维护 持续活跃开发

3.5 应该学 ROS1 还是 ROS2?

直接结论

直接学 ROS2,不要犹豫。


原因很简单

1. ROS1 已停止支持

  • ROS1 在 2025 年停止官方支持
  • 新项目几乎全部基于 ROS2

2. ROS2 设计更现代

  • 符合现代软件工程理念
  • 更适合工程化应用

3. 学习路径更优

学习建议

先学 ROS2 再回头看 ROS1,会更轻松


唯一的例外

特殊情况

只有在你需要维护 历史 ROS1 项目 时,

才需要了解 ROS1。

即便如此,也建议:

  1. 先学 ROS2
  2. 再按需了解 ROS1 的差异

3.6 ROS1 到 ROS2 的迁移

为什么要迁移

如果你的实验室或公司有 ROS1 项目:

现实考虑

  • ROS1 不再维护
  • 安全性问题
  • 新功能无法享受

迁移到 ROS2 是必然趋势。


迁移难度

实际情况

  • 概念基本相同
  • API 有一定变化
  • 需要重新编译
  • 部分功能包可能需要重写

官方迁移指南

ROS2 官方提供了详细的迁移文档:

  • 概念对照表
  • API 变化说明
  • 常见问题解答
  • 自动化迁移工具

本章小结

通过这一章,你应该已经理解:

  1. ROS1 的历史价值
  2. 统一了机器人领域的开发方式
  3. 建立了强大的开源社区

  4. ROS1 的问题无法通过"小修小补"解决

  5. 单点故障
  6. 不支持实时限

  7. ROS2 是一次系统级重构

  8. 去中心化架构
  9. 实时性支持
  10. 内置安全机制
  11. 真正跨平台

  12. 当前和未来的机器人开发,应优先选择 ROS2


下一章预告

下一章我们会进入一个 非常现实、也最容易踩坑的话题:

为什么要选择 Ubuntu 20.04 / 22.04?

我们会从系统、版本、兼容性角度,

帮你避开新手最常掉进去的坑。


评论区