一、ROS2概述与生态

1.1 ROS2的历史与发展

说起ROS2,得先聊聊它的前身ROS1。ROS1是2007年斯坦福大学和Willow Garage公司搞出来的,初衷是给机器人研究提供一个好用的框架。说实话,ROS1确实很成功,我在2015年刚接触机器人开发时,用的就是ROS1的Indigo版本。

但ROS1有个硬伤——它太依赖网络了。你想想看,ROS1的通信机制是基于TCP/UDP的,一旦网络不稳定,整个系统就可能崩掉。我在一个项目中遇到过,机器人跑到信号不好的区域,节点直接断连,差点撞到人。嗯,这就是ROS1的局限性。

ROS2从2015年开始设计,2017年发布了第一个正式版。它最大的变化是底层通信换成了DDS(数据分发服务)。DDS这东西,说白了就是一套工业级的实时通信协议,能保证数据不丢、不重、不乱序。我个人的习惯是,只要涉及多机器人协作或实时控制,首选ROS2。

关键时间节点:

  • 2007年:ROS1诞生
  • 2015年:ROS2项目启动
  • 2017年:ROS2 Ardent Apalone(第一个正式版)
  • 2022年:ROS2 Humble Hawksbill(长期支持版)
  • 2024年:ROS2 Jazzy Jalisco(最新长期支持版)

1.2 ROS2与ROS1的核心区别

很多初学者问我:「老师,我该学ROS1还是ROS2?」我的回答很直接:除非你维护老项目,否则直接上ROS2。为什么?我列几个核心区别你就明白了。

对比项 ROS1 ROS2
通信中间件 自定义TCP/UDP DDS(工业级标准)
实时性 不支持 支持(通过DDS配置)
多机器人支持 弱(需额外配置) 原生支持(DDS发现机制)
跨平台 主要Linux Linux/Windows/macOS/RTOS
安全性 支持DDS安全插件
生命周期管理 手动管理 内置节点生命周期

这里我特别想强调一点:ROS2的DDS机制。ROS1的通信是中心化的,所有数据都要经过Master节点。一旦Master挂了,整个系统就瘫痪了。ROS2没有Master,每个节点通过DDS自动发现其他节点。我曾经在一个项目中,需要让5台机器人协同工作,ROS1的方案需要搭建复杂的网络拓扑,而ROS2开箱即用。

避坑指南:我曾经在ROS2迁移项目中犯过一个低级错误——直接把ROS1的launch文件拿过来用。ROS2的launch系统完全重写了,用的是Python脚本而不是XML。记得先看官方迁移指南。

1.3 ROS2的发行版与选型建议

ROS2的发行版命名很有意思,全是按字母顺序来的。从A到J,每个版本对应一个动物名。我个人习惯是:生产环境选LTS(长期支持)版,开发环境可以尝鲜最新版。

截至2024年,主流的ROS2发行版有:

  • Humble Hawksbill(2022年LTS):稳定,支持到2027年。适合工业项目。
  • Iron Irwini(2023年):非LTS,但有一些新特性。
  • Jazzy Jalisco(2024年LTS):最新LTS,支持到2029年。我建议新项目直接上这个。

选型时,你还需要考虑硬件平台。比如在树莓派上跑ROS2,Humble版对ARM架构支持得更好。我在一个边缘计算项目中,用Jetson Nano跑ROS2 Jazzy,性能表现不错。

注意:ROS2的版本和Ubuntu版本是绑定的。比如Jazzy只支持Ubuntu 24.04。别装错了系统,否则你会遇到一堆依赖问题。

1.4 ROS2的社区与资源

ROS2的社区生态,说实话比ROS1时期成熟多了。官方文档(docs.ros.org)写得非常详细,每个API都有示例代码。我刚开始学ROS2时,就是靠官方教程入门的。

常用的资源渠道:

  • 官方论坛(discourse.ros.org):遇到问题先搜这里,90%的问题都能找到答案。
  • GitHub仓库:ROS2的核心代码都在github.com/ros2下,可以看源码学习。
  • ROS2 Design文档:如果你想深入理解设计理念,这个文档是必读的。
  • 中文社区:比如古月居、鱼香ROS,有很多中文教程和实战案例。

我个人建议,初学者先看官方教程的「ROS2 Basics」系列,大概花一周时间就能上手。然后去GitHub上找一些开源项目,比如Navigation2、MoveIt2,看看别人是怎么组织代码的。

学习路径建议:

  1. 安装ROS2并跑通官方示例(1天)
  2. 理解节点、话题、服务、动作四大通信机制(3天)
  3. 学习launch文件和参数管理(2天)
  4. 实战一个小项目,比如控制一个仿真机器人(3天)

嗯,第一章的内容就到这里。记住,ROS2不是ROS1的简单升级,而是一次彻底的重新设计。下一章我们会深入ROS2的通信机制,看看DDS到底是怎么工作的。