1. 课程导论与预备知识
大家好,我是你们这门课的主讲。在自动驾驶这行摸爬滚打了快十年,从最早的激光雷达点云拼接,到后来做多传感器融合定位,再到用 ROS2 重构整个控制链路,踩过的坑确实不少。今天咱们开始第一讲,先把地基打牢。
说白了,自动驾驶不是玄学,它是一套严谨的工程系统。你想想看,一辆车要在路上跑,得先知道「我在哪」(定位),然后决定「要去哪」(规划),最后控制「怎么去」(控制)。这三件事环环相扣,而 ROS2 就是把这些环节串起来的「通信总线」。
1.1 自动驾驶分级标准
先聊聊分级。很多人觉得 L2 和 L3 就差一个字母,其实差得远了去了。我当年刚入行时,也以为 L3 就是 L2 加个自动变道,结果第一次在高速上测试 L3 系统,差点因为系统降级不及时出事——嗯,从那以后我对分级有了刻骨铭心的理解。
目前行业公认的是 SAE J3016 标准,从 L0 到 L5:
| 等级 | 名称 | 核心特征 | 典型场景 |
|---|---|---|---|
| L0 | 无自动化 | 人类全权驾驶 | 传统手动挡车 |
| L1 | 驾驶辅助 | 单一功能辅助(如定速巡航) | 高速巡航 |
| L2 | 部分自动化 | 同时控制转向+加减速 | 车道居中+ACC |
| L3 | 有条件自动化 | 系统全权驾驶,但需人类接管 | 高速领航 |
| L4 | 高度自动化 | 限定区域内无需人类干预 | Robotaxi 园区 |
| L5 | 完全自动化 | 全场景、全工况 | 任何道路 |
关键点:L3 是个分水岭。L2 出事故责任在驾驶员,L3 出事故责任在系统。所以很多车厂直接跳过 L3 做 L2+,或者直接冲 L4。我个人建议,做工程时别纠结于「我这是 L 几」,而是关注「ODD(运行设计域)是什么」——这才是真正决定系统边界的东西。
1.2 ROS2 核心概念
ROS2 不是 ROS1 的简单升级。我最早用 ROS1 做项目时,最头疼的就是节点挂了整个系统就崩,而且实时性完全没法保证。ROS2 用 DDS 做底层通信,说白了就是给每个节点配了个「独立对讲机」,而不是 ROS1 那种「总机转接」模式。
四个核心概念,我一个个说:
节点(Node)
节点就是 ROS2 里的最小执行单元。你可以把它理解成一个「独立的小程序」。每个节点只干一件事,比如「激光雷达驱动节点」只管发点云,「定位节点」只管算位置。我在项目中遇到过最典型的错误,就是有人把定位、规划、控制全写在一个节点里——调试时改一行代码要重启整个系统,太痛苦了。
话题(Topic)
话题是异步通信的通道。发布者往话题里扔数据,订阅者从话题里拿数据。比如定位节点发布 /odometry 话题,控制节点订阅它。这里有个坑:话题的数据类型必须匹配。我曾经因为把 nav_msgs/Odometry 和 geometry_msgs/PoseStamped 搞混,定位数据一直对不上,查了整整两天。
服务(Service)
服务是同步通信,一问一答。比如「请给我当前地图」——请求发出去,必须等到响应回来才能继续。适合那些需要确认的场景,比如启动某个传感器。
动作(Action)
动作是服务的升级版。它支持「长时间任务 + 中途反馈」。比如「导航到 B 点」,你可以一边执行一边汇报「已走 30%」「已走 60%」。这在自动驾驶里太常用了——规划路径、执行变道,都需要这种机制。
我的习惯:高频数据用话题(比如定位 100Hz),低频确认用服务(比如启动传感器),长时间任务用动作(比如路径规划)。别混用,否则系统会变得很难调试。
1.3 开发环境搭建与验证
环境搭建这块,我建议直接用 Ubuntu 22.04 + ROS2 Humble。为什么选 Humble?因为它是 LTS 版本,稳定,而且社区支持好。我之前用 Rolling 版本踩过坑——今天装的包,明天 API 就变了,太折腾。
安装步骤其实很简单,但有几个细节要注意:
- 设置 locale:确保系统支持 UTF-8,否则中文路径会出问题
- 添加 ROS2 源:别用 apt 默认源,版本太旧
- 安装桌面版:
ros-humble-desktop包含了所有常用工具 - 配置环境变量:每次开终端都要 source,建议写到
.bashrc里
装完之后怎么验证?我一般跑两个命令:
# 终端1:启动 talker 节点
ros2 run demo_nodes_cpp talker
# 终端2:启动 listener 节点
ros2 run demo_nodes_py listener
如果能看到 talker 在发「Hello World」,listener 在收,说明环境没问题。嗯,这里要注意:如果收不到消息,八成是 DDS 配置问题。检查一下 ROS_DOMAIN_ID 是不是一致,或者防火墙有没有关。
避坑指南:我曾经在一台新电脑上装完 ROS2,怎么都跑不通 talker-listener。查了半天,发现是虚拟机网络设置成了 NAT 模式,DDS 的组播通信被挡住了。改成桥接模式,瞬间就好了。所以如果你用虚拟机,记得检查网络模式。
知识体系总览
下面这张图,是我自己梳理的本章知识结构。你可以把它当成一张「地图」,后面每讲一个知识点,都能在这张图上找到位置:
这张图把本章三个核心模块串起来了。你想想看,自动驾驶分级告诉我们「要做什么」,ROS2 核心概念告诉我们「用什么做」,环境搭建告诉我们「在哪做」。三者缺一不可。
好,第一讲就到这里。内容不多,但都是后面实战的基础。尤其是 ROS2 的四个通信方式,后面每一章都会用到。如果你在搭建环境时遇到问题,别急——大概率是 DDS 网络配置或者 locale 设置的问题,翻回去看看避坑指南。
可可精品资料库