1. ROS2与自动驾驶概述
大家好,我是你们的老朋友。今天咱们正式开篇,聊聊自动驾驶和ROS2。
说实话,我入行那会儿,自动驾驶还是个挺科幻的词。记得2016年我第一次在实车上跑ROS节点,车在停车场里歪歪扭扭画了个8字,全组人激动得跟过年似的。现在回头看,那代码写得真叫一个惨不忍睹。但正是这些经历,让我对技术栈有了切身的理解。
这一章,我们不敲代码,先搭骨架。把自动驾驶技术栈的全景看清楚,搞清楚ROS2到底扮演什么角色,再给你一条清晰的学习路径。嗯,磨刀不误砍柴工嘛。
1.1 自动驾驶技术栈全景
自动驾驶不是单一技术,而是一整套系统的集成。你想想看,一辆车要自己看懂路、自己决策、自己控制,这背后涉及感知、定位、规划、控制、通信、硬件等多个领域。
我个人习惯把技术栈分成四层:
| 层级 | 核心模块 | 典型技术 |
|---|---|---|
| 感知层 | 摄像头、激光雷达、毫米波雷达、超声波 | 目标检测、语义分割、多传感器融合 |
| 决策规划层 | 行为预测、路径规划、运动规划 | A*、DWA、EM Planner、Lattice Planner |
| 控制层 | 横向控制、纵向控制 | PID、MPC、LQR |
| 系统与中间件层 | 操作系统、通信框架、时间同步 | Linux、ROS2、DDS、CyberRT |
这里我要强调一下:系统与中间件层是承上启下的关键。没有它,感知的数据传不到规划模块,规划的命令下不到控制器。我在项目中遇到过好几次,算法模型跑得挺好,一上车就崩,最后查出来是通信延迟和丢帧的问题。说白了,中间件选型没做好,上层再牛也白搭。
核心观点:自动驾驶的工程难点,往往不在算法本身,而在系统集成。ROS2的价值,恰恰体现在这里。
下面这张图,是我自己梳理的自动驾驶技术栈全景图。你可以把它当作整个课程的地图。
学习建议:别急着钻算法细节。先把这张图刻在脑子里,知道每个模块解决什么问题、依赖什么输入、输出什么结果。后面30章,我们一层一层把它填满。
1.2 ROS2在自动驾驶中的角色
好,问题来了:为什么自动驾驶要用ROS2?直接用Linux进程通信不行吗?
行,当然行。但你会发现,自己写通信、写序列化、写时间同步、写日志系统……写着写着就变成了在重新造一个ROS2。我在早期项目里就干过这事,折腾了三个月,最后发现还不如直接用ROS2稳定。
ROS2在自动驾驶中扮演的角色,我总结为三点:
- 通信骨架:基于DDS的发布/订阅模型,让感知、规划、控制各模块解耦。你改一个模块,不影响其他模块。
- 生态工具链:Rviz2可视化、bag包录制回放、tf坐标变换、参数动态配置……这些工具能帮你省掉大量调试时间。
- 硬件抽象层:通过驱动节点,把不同厂商的传感器、执行器统一成标准接口。换一个激光雷达,只需要换驱动,上层代码不用动。
避坑指南:我曾经在一个项目里,为了追求“极致性能”,自己用共享内存写了一套通信。结果每次换传感器就要改接口,调试时还得自己写可视化工具。后来老老实实切回ROS2,开发效率提升了至少3倍。ROS2的实时性确实不如裸写共享内存,但你要想清楚:你的瓶颈到底在通信延迟,还是在算法迭代速度?
ROS2和ROS1最大的区别,我简单说一下:
| 对比项 | ROS1 | ROS2 |
|---|---|---|
| 通信中间件 | 自定义TCP/UDP | DDS(Data Distribution Service) |
| 实时性 | 不支持 | 支持(通过DDS的QoS策略) |
| 多机器人 | 单Master,单点故障 | 去中心化,天然支持分布式 |
| 安全性 | 无 | 支持DDS安全规范 |
| 跨平台 | Linux为主 | Windows、macOS、RTOS |
说白了,ROS2就是为工业级、产品级场景设计的。ROS1更适合科研原型验证,但真要上车跑,ROS2是更稳妥的选择。
1.3 课程大纲与学习路径
这门课一共30章,我按「基础→核心→进阶→实战」四个阶段来组织。你跟着走,不会迷路。
下面这个图,就是整个课程的知识体系结构:
具体来说,每个阶段的核心内容:
- 基础篇(第1-5章):ROS2环境搭建、核心概念、通信机制、工具链使用。这部分是地基,一定要亲手敲一遍代码。
- 核心篇(第6-15章):传感器驱动、定位建图、路径规划、控制算法。每个模块我都会带着你从原理到代码实现。
- 进阶篇(第16-25章):行为预测、MPC控制、实时性优化、功能安全。这部分偏工程,很多是踩坑经验。
- 实战篇(第26-30章):完整项目搭建、仿真测试、实车调试。最后我们会跑通一个mini自动驾驶系统。
学习建议:我的建议是,每章学完后,自己动手把代码跑一遍,然后试着改一改参数,看看效果变化。别怕把车开翻——在仿真里翻车,总比在实车上翻车强。
重要提醒:ROS2版本迭代很快。本课程基于ROS2 Humble(Ubuntu 22.04)。如果你用的是其他版本,个别API可能有差异。我会在每章开头注明版本兼容性。