这份文档用于说明本 ROS2 栏目后续会使用的学习资源和学习方法。
我的目标不是把 ROS2 所有文档从头到尾通读一遍,而是在大约三个月内,把过去对 ROS2 的模糊印象转化成可开发、可调试、可解释框架和源码的工程能力。
所以这套学习方法的核心不是"资料越多越好",而是"项目交付导向":先快速建立基本概念,然后直接上手项目;遇到具体问题时再查官方文档、第三方视频和包索引;最后用技术文档和博客输出倒逼输入。
一、学习原则:改读为查,用输出倒逼输入
AI 时代的学习方式已经变了。
过去学习一个框架,经常是先找一本书或一套教程,从第一章读到最后一章。这个方法扎实,但对工程项目来说不一定高效。尤其 ROS2 这种系统框架,内容横跨安装、通信、构建、launch、QoS、TF、调试、可视化、rosbag、component、DDS 和源码机制,如果试图一次性通读,很容易陷入"看了很多,但不会用"的状态。
更适合当前阶段的方法是:
- 用很短时间过一遍基本概念。
- 直接进入项目,把 ROS2 当作工程工具使用起来。
- 遇到不懂的问题时再查资料。
- 把每次查到的内容写成文档、错题本或博客。
- 通过输出反过来暴露理解盲区。
这就是"改读为查"和"输出倒逼输入"。
对自动驾驶算法工程师来说,这种方法更贴近真实工作。项目不会等你把 ROS2 文档全部看完才开始。我们更需要在开发和调试中逐步建立系统理解:为什么 topic 收不到,为什么 QoS 不兼容,为什么 launch 参数没生效,为什么 RViz 看不到 marker,为什么 TF 时间戳报错。
二、主参考资料:ROS2 Humble 官方文档
本栏目主参考资料是 ROS2 Humble 官方文档:
https://docs.ros.org/en/humble/index.html
Humble 是当前工程中采用的 ROS2 版本,环境组合是 Ubuntu 22.04 + ROS2 Humble。因此涉及安装、命令、API、launch、QoS、package、构建和调试细节时,优先以 Humble 官方文档为准。
官方文档入口主要有几类内容:
- About ROS:解释 ROS/ROS2 是什么。
- Installation:安装 ROS2。
- Tutorials:循序渐进的入门教程。
- How-to Guides:针对具体问题的操作指南。
- Concepts:核心概念解释。
- Package Docs:按包组织的 API 和文档。
- ROS community resources:社区、问答、论坛和 ROS Index 等资源入口。
对初学者来说,最重要的是 Tutorials、How-to Guides 和 Concepts 这三类。
三、Tutorials:建立基本操作直觉
Tutorials 是最适合入门的部分。
官方文档也把 Tutorials 放在 Getting started 里,并说明它适合新用户从这里开始,通过动手样例逐步建立必要技能。
我的理解是:Tutorials 不是百科全书,而是一条最小学习路径。
它的价值在于让我们亲手跑过这些基本动作:
- 配置 ROS2 环境。
- 使用 turtlesim、
ros2CLI 和 rqt。 - 理解 node、topic、service、parameter、action。
- 学会 launch 节点。
- 录制和回放 rosbag。
- 使用 colcon 构建 package。
- 创建 workspace 和 package。
- 写 C++/Python publisher、subscriber、service、client。
- 创建自定义 msg 和 srv。
- 初步接触 component、tf2、RViz 和 testing。
这部分建议不要无限扩展。初学阶段可以快速过一遍,目标是形成"我知道这个东西存在,也知道最小例子怎么跑"的直觉。真正深入理解应该放到项目里完成。
四、How-to Guides:遇到具体问题时查
How-to Guides 的定位和 Tutorials 不同。
Tutorials 是学习路径,How-to Guides 是问题手册。
当你遇到一个具体工程问题时,不应该重新从 Tutorials 第一节开始看,而应该直接进入 How-to Guides。例如:
- 想开发一个 ROS2 package,就查 developing a ROS 2 package。
- 想写 launch 文件,就查 XML/YAML/Python launch 相关指南。
- 想启动 composable nodes,就查 composable node 的 launch 指南。
- 想处理 QoS 或 rosbag2 的兼容问题,就查 QoS override 和 DDS tuning。
- 想分析性能,就查 tracing。
- 想处理 Python package,就查 Python packages with ROS2。
How-to Guides 的价值是把知识组织成"问题 -> 操作步骤"的形式。对项目交付最有帮助。
五、Concepts:实操后的抽象回顾
Concepts 是容易被低估的一部分。
如果没有实操,直接看 Concepts 很容易觉得抽象。但如果你已经跑过 Tutorials,或者在项目里遇到过 topic、QoS、executor、launch、tf2 这些问题,回头看 Concepts 就会很有价值。
Concepts 主要回答这些问题:
- Node 到底是什么。
- Topic、service、action 的边界是什么。
- Parameter 如何进入节点。
- Launch 在系统组织中扮演什么角色。
- QoS 为什么会影响通信是否成立。
- Executor 如何调度回调。
- Composition 为什么能降低进程间通信开销。
- tf2 为什么是机器人系统的时空基准工具。
所以我建议的顺序是:先跑 Tutorials,再做项目,最后用 Concepts 复盘。
这样 Concepts 不再是一堆抽象定义,而是对已经踩过的问题做系统化解释。
六、第三方资料:赵虚左 ROS2 教程
官方文档是主线,但中文第三方资料也很有价值。
我会参考赵虚左老师的 ROS2 教程。我的判断是,这套教程比较贴近官方文档,讲解也比较细致,适合作为中文语境下的辅助学习材料。
但第三方资料的使用要有边界:
- 它适合帮助建立连续理解。
- 它适合在官方文档读起来不顺时补充解释。
- 它不应该替代官方文档。
- 涉及 Humble 的 API、命令、launch、QoS 和包行为时,仍然要回到官方文档和实际项目代码校准。
简单说:第三方教程负责"讲顺",官方文档负责"定准"。
七、ROS Index:按包搜索的官方索引
除了 ROS2 官方文档,还有一个非常好用的网站:
https://index.ros.org/?search_packages=true#humble
ROS Index 是搜索 ROS/ROS2 资源的入口。官方文档中也说明,它可以用来查 package、repository 和 system dependency。
它适合解决这些问题:
- 某个包是否支持 Humble。
- 这个包属于哪个 repository。
- 包的维护者是谁。
- 包的 build type 是什么。
- 包有哪些依赖。
- 包有没有 API 文档、源码仓库或主页。
- 某个系统依赖对应什么 rosdep key。
当你读 Autoware、Nav2、image_pipeline、tf2、pcl_ros 或其他 ROS2 工程时,不可能只靠记忆。看到不熟悉的包,先去 ROS Index 查它的发行版支持、仓库、依赖和文档入口,是非常高效的做法。
在实际工程里,ROS Index 更像"ROS2 软件园区的企业黄页"。你不一定知道每个工厂怎么生产,但你可以先查它在哪里、做什么、依赖什么、有没有文档。
八、结论
ROS2 学习资源很多,但最重要的是使用方法。
官方文档负责给出权威路径,Tutorials 用来建立基本操作,How-to Guides 用来解决具体问题,Concepts 用来做抽象复盘,ROS Index 用来查包和依赖,赵虚左老师的教程作为中文辅助资料帮助把学习过程讲顺。
真正有效的学习方式,是把这些资源嵌入项目交付流程中:先做、再查、再总结、再输出。
这样学习 ROS2,不是为了记住更多名词,而是为了真正具备开发、调试、排查、读包和解释系统的能力。