1、ROS2与自动驾驶概述:自动驾驶技术栈全景、ROS2在自动驾驶中的角色、课程大纲与学习路径

大家好,我是你们的老朋友。今天咱们正式开篇,聊聊自动驾驶和ROS2。

说实话,我入行那会儿,自动驾驶还是个挺科幻的词。记得2016年我第一次在实车上跑ROS节点,车在停车场里歪歪扭扭画了个8字,全组人激动得跟过年似的。现在回头看,那代码写得真叫一个惨不忍睹。但正是这些经历,让我对技术栈有了切身的理解。

这一章,我们不敲代码,先搭骨架。把自动驾驶技术栈的全景看清楚,搞清楚ROS2到底扮演什么角色,再给你一条清晰的学习路径。嗯,磨刀不误砍柴工嘛。

1.1 自动驾驶技术栈全景

自动驾驶不是单一技术,而是一整套系统的集成。你想想看,一辆车要自己看懂路、自己决策、自己控制,这背后涉及感知、定位、规划、控制、通信、硬件等多个领域。

我个人习惯把技术栈分成四层:

层级 核心模块 典型技术
感知层 摄像头、激光雷达、毫米波雷达、超声波 目标检测、语义分割、多传感器融合
决策规划层 行为预测、路径规划、运动规划 A*、DWA、EM Planner、Lattice Planner
控制层 横向控制、纵向控制 PID、MPC、LQR
系统与中间件层 操作系统、通信框架、时间同步 Linux、ROS2、DDS、CyberRT

这里我要强调一下:系统与中间件层是承上启下的关键。没有它,感知的数据传不到规划模块,规划的命令下不到控制器。我在项目中遇到过好几次,算法模型跑得挺好,一上车就崩,最后查出来是通信延迟和丢帧的问题。说白了,中间件选型没做好,上层再牛也白搭。

核心观点:自动驾驶的工程难点,往往不在算法本身,而在系统集成。ROS2的价值,恰恰体现在这里。

下面这张图,是我自己梳理的自动驾驶技术栈全景图。你可以把它当作整个课程的地图。

自动驾驶技术栈全景图 感知层 摄像头 · 激光雷达 · 毫米波雷达 · 超声波 · 多传感器融合 目标检测 | 语义分割 | 跟踪 | 3D点云处理 决策规划层 行为预测 · 全局路径规划 · 局部路径规划 · 运动规划 A* | DWA | EM Planner | Lattice Planner | 行为树 控制层 横向控制 · 纵向控制 · 车辆动力学模型 PID | MPC | LQR | 油门/刹车/转向控制 系统与中间件层 操作系统 · 通信框架 · 时间同步 · 硬件抽象 Linux | ROS2 | DDS | CyberRT | 实时调度 数据流 决策流 控制指令 传感器数据 行为决策 控制信号

学习建议:别急着钻算法细节。先把这张图刻在脑子里,知道每个模块解决什么问题、依赖什么输入、输出什么结果。后面30章,我们一层一层把它填满。

1.2 ROS2在自动驾驶中的角色

好,问题来了:为什么自动驾驶要用ROS2?直接用Linux进程通信不行吗?

行,当然行。但你会发现,自己写通信、写序列化、写时间同步、写日志系统……写着写着就变成了在重新造一个ROS2。我在早期项目里就干过这事,折腾了三个月,最后发现还不如直接用ROS2稳定。

ROS2在自动驾驶中扮演的角色,我总结为三点:

  1. 通信骨架:基于DDS的发布/订阅模型,让感知、规划、控制各模块解耦。你改一个模块,不影响其他模块。
  2. 生态工具链:Rviz2可视化、bag包录制回放、tf坐标变换、参数动态配置……这些工具能帮你省掉大量调试时间。
  3. 硬件抽象层:通过驱动节点,把不同厂商的传感器、执行器统一成标准接口。换一个激光雷达,只需要换驱动,上层代码不用动。

避坑指南:我曾经在一个项目里,为了追求“极致性能”,自己用共享内存写了一套通信。结果每次换传感器就要改接口,调试时还得自己写可视化工具。后来老老实实切回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核心概念 节点/话题/服务 参数/动作 DDS与QoS launch文件 tf坐标变换 bag包录制 Rviz2可视化 核心篇 第6-15章 传感器驱动 相机/激光雷达 IMU/GNSS 多传感器融合 定位与建图 路径规划 控制算法 车辆模型 进阶篇 第16-25章 行为预测 决策规划 MPC控制 实时性优化 功能安全 系统监控 仿真测试 性能调优 实战篇 第26-30章 完整项目搭建 仿真环境部署 实车调试 问题排查 性能评估 代码优化 部署上线 项目总结

具体来说,每个阶段的核心内容:

  • 基础篇(第1-5章):ROS2环境搭建、核心概念、通信机制、工具链使用。这部分是地基,一定要亲手敲一遍代码。
  • 核心篇(第6-15章):传感器驱动、定位建图、路径规划、控制算法。每个模块我都会带着你从原理到代码实现。
  • 进阶篇(第16-25章):行为预测、MPC控制、实时性优化、功能安全。这部分偏工程,很多是踩坑经验。
  • 实战篇(第26-30章):完整项目搭建、仿真测试、实车调试。最后我们会跑通一个mini自动驾驶系统。

学习建议:我的建议是,每章学完后,自己动手把代码跑一遍,然后试着改一改参数,看看效果变化。别怕把车开翻——在仿真里翻车,总比在实车上翻车强。

重要提醒:ROS2版本迭代很快。本课程基于ROS2 Humble(Ubuntu 22.04)。如果你用的是其他版本,个别API可能有差异。我会在每章开头注明版本兼容性。

好了,第一章就到这里。内容不多,但都是干货。从下一章开始,我们就要动手装环境、写代码了。准备好你的Linux电脑,咱们实战见。

可可精品资料库