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?

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

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


评论区