1. 课程导论与基础知识
大家好,欢迎来到这门课。
说实话,自动驾驶这个领域,我摸爬滚打也有七八年了。从最早在实验室里调一个激光雷达点云,到后来在量产车上处理各种corner case,踩过的坑真不少。今天这第一节课,咱们不急着写代码,先把地基打牢。
你想想看,一辆车要在路上跑,它得先知道「周围有什么」。这就是障碍物检测要干的事。而知道了「有什么」之后,还得知道「这是不是刚才那个家伙」,这就是目标关联。这两件事,是感知系统的左膀右臂。
1.1 障碍物检测概述
障碍物检测,说白了就是回答三个问题:有没有东西?在哪儿?是什么?
我在早期项目里,曾经只用单目摄像头做检测。结果有一次,一个白色的卡车车厢横在路中间,算法愣是没认出来——因为纹理太少了。嗯,从那以后我就明白,单一传感器总有盲区。
现在的检测方法,大致分两类:
- 传统方法:基于几何特征,比如激光雷达的聚类、摄像头的边缘检测。鲁棒性差,但可解释性强。
- 深度学习方法:端到端,比如YOLO、PointPillars。效果好,但有时候「死得不明不白」。
我个人习惯是,量产项目里两者结合。用深度学习做初检,用传统方法做校验和兜底。
1.2 目标关联的定义
目标关联,也叫数据关联。它解决的是「同一性」问题。
举个例子:上一帧在50米处有个行人,这一帧在48米处又出现一个行人。你怎么知道他们是同一个人?
这其实是个匹配问题。常用的方法有:
- 最近邻法:找距离最近的。简单,但容易跟丢。
- 匈牙利算法:全局最优匹配。我当年第一次实现这个算法时,debug了整整两天,最后发现是代价矩阵算错了。
- 概率数据关联:考虑所有可能性,加权平均。精度高,但计算量大。
你可能会问:为什么不用深度学习直接做?其实现在也有端到端的方法,但工业界用得最多的还是传统方法。为什么?因为稳定、可调试。
1.3 传感器介绍
自动驾驶的三大主力传感器,各有各的脾气。
| 传感器 | 优点 | 缺点 | 我的经验 |
|---|---|---|---|
| 激光雷达 | 测距准,3D信息丰富 | 贵,受天气影响大 | 雨雪天点云会「糊」,得做滤波 |
| 摄像头 | 纹理信息丰富,便宜 | 缺乏深度,受光照影响大 | 逆光时检测率会掉10%以上 |
| 毫米波雷达 | 测速准,全天候 | 角度分辨率低,点稀疏 | 对静止目标容易「视而不见」 |
我个人建议,别指望任何一个传感器「包打天下」。融合才是王道。
1.4 坐标系与空间变换
这是最容易出错的地方,没有之一。
一辆车上,至少有这几个坐标系:
- 传感器坐标系:每个传感器自己的「眼睛」
- 车体坐标系:通常以后轴中心为原点
- 世界坐标系:比如UTM坐标
空间变换,就是在这几个坐标系之间来回转换。核心公式就一个:
// 齐次坐标变换
// P_world = T_vehicle_to_world * T_sensor_to_vehicle * P_sensor
// 示例:将激光雷达点云转换到车体坐标系
Eigen::Matrix4d T_sensor_to_vehicle;
T_sensor_to_vehicle <<
0.999, -0.017, 0.017, 0.5,
0.017, 0.999, 0.017, 0.0,
-0.017, -0.017, 0.999, 1.2,
0.0, 0.0, 0.0, 1.0;
Eigen::Vector4d p_sensor(1.0, 0.0, 0.5, 1.0);
Eigen::Vector4d p_vehicle = T_sensor_to_vehicle * p_sensor;
这里有个坑:旋转矩阵的顺序。是先绕X轴转,还是先绕Z轴转?不同厂家给的标定参数,顺序可能不一样。我吃过这个亏,结果点云全飞了。
知识体系总览
下面这张图,是我自己梳理的本章知识结构。你可以把它当作一张「地图」,后面每节课都会回到这里。
这张图把今天的内容串起来了。你看,障碍物检测和目标关联是「上下层」关系,传感器是「输入」,坐标系变换是「桥梁」。后面每一章,都会在这张图上添砖加瓦。
好了,第一节课就到这里。内容不多,但都是后面所有章节的基石。你把这些概念吃透了,后面学起来会轻松很多。