第一章:核心传感器原理回顾
各位同学,欢迎来到《感知融合性能瓶颈突破实战》。我是你们的老朋友,一个在自动驾驶感知领域摸爬滚打多年的工程师。
今天咱们先不急着上手调代码,得先把地基打牢。说白了,传感器就是自动驾驶的「眼睛」和「耳朵」。你连它们怎么「看」、怎么「听」都不清楚,后面做融合肯定要踩坑。我个人习惯,每次接手新项目,第一件事就是拉着团队把传感器原理再过一遍。嗯,这步省不了。
1.1 Camera:成像原理与坐标系
Camera 的原理,说白了就是小孔成像。光穿过镜头,打在 CMOS 上,光电转换后变成数字信号。但这里有个关键点——像素坐标系和世界坐标系之间的映射关系。
核心公式: 像素坐标 (u, v) 到相机坐标 (Xc, Yc, Zc) 的转换,离不开内参矩阵 K 和外参矩阵 [R|t]。
// 伪代码:像素到相机坐标
// 假设内参 K = [fx, 0, cx; 0, fy, cy; 0, 0, 1]
// 像素点 (u, v),深度 Zc
Xc = (u - cx) * Zc / fx
Yc = (v - cy) * Zc / fy
Zc = 深度值(来自双目或雷达投影)
我在项目中遇到过一个问题:Camera 的畸变。特别是广角镜头,边缘的桶形畸变能把直线变成弯的。如果不做去畸变,后面投影到鸟瞰图(BEV)时,车道线全歪了。我曾经因为忘了标定畸变参数,导致融合后的目标位置偏差了半米多,排查了整整两天。
避坑指南: 标定 Camera 时,棋盘格一定要贴平。我见过有人用 A4 纸打印棋盘格,贴在弯曲的纸箱上,结果标定出来的内参全是错的。
1.2 LiDAR:点云特性与坐标系
LiDAR 发射激光束,测量反射时间,得到距离。同时记录反射强度(intensity)。点云数据就是一堆 (x, y, z, intensity) 的四维点。
LiDAR 的坐标系通常是右手系:x 轴朝前,y 轴朝左,z 轴朝上。但不同厂家定义可能不同。比如 Velodyne 和 Hesai 的坐标系就不完全一样。你想想看,如果融合时坐标系没对齐,那目标位置能对吗?
点云特性:
- 稀疏性: 64 线 LiDAR 每秒约 130 万个点,但相比图像还是稀疏很多。
- 距离精度高: 毫米级,但受天气影响大(雨、雾、雪)。
- 反射强度: 可以用来区分车道线(高反)和沥青路面(低反)。
我记得有一次做目标检测,点云中的行人点太少,只有 3-4 个点。这时候用传统的聚类算法很容易漏检。后来我改用基于 PointPillars 的检测网络,效果好了不少。说白了,点云稀疏的地方,就得靠算法「脑补」。
注意: LiDAR 的盲区问题。近处 0.5 米以内,激光束打不中目标。所以倒车时,纯 LiDAR 方案容易撞到低矮的障碍物。
1.3 Radar:多普勒效应与坐标系
Radar 发射电磁波,利用多普勒效应测量目标的径向速度。这是 Radar 相比 Camera 和 LiDAR 最大的优势——直接测速。
Radar 坐标系通常是极坐标系:距离 r、方位角 θ、俯仰角 φ(部分 4D Radar 支持)。但注意,Radar 的角度分辨率比较差,一般只有几度。所以 Radar 能告诉你「前方 50 米有个东西在动」,但说不清它到底在哪个车道。
| 传感器 | 测距精度 | 测速能力 | 角度分辨率 |
|---|---|---|---|
| Camera | 中等(依赖深度估计) | 间接(帧间差分) | 高(像素级) |
| LiDAR | 高(毫米级) | 间接(帧间差分) | 中等(线束决定) |
| Radar | 中等(米级) | 直接(多普勒) | 低(几度) |
我在项目中遇到过 Radar 的多径反射问题。比如高架桥下的护栏,Radar 信号会反射多次,产生「鬼影」目标。如果不做滤波,融合模块会以为那里有个静止障碍物,然后急刹车。嗯,这体验可不好。
技巧: 利用 Radar 的RCS(雷达散射截面)可以辅助分类。比如行人的 RCS 通常小于 0 dBsm,而车辆在 10-20 dBsm 之间。虽然不能完全依赖,但可以作为融合时的置信度参考。
1.4 IMU/GNSS:基础与坐标系
IMU(惯性测量单元)提供加速度和角速度。GNSS(全球导航卫星系统)提供绝对位置(经纬度)。两者互补:IMU 短时精度高但会漂移,GNSS 长期稳定但更新频率低(10Hz 左右)。
IMU 的坐标系是载体坐标系(body frame):x 轴朝前,y 轴朝左,z 轴朝上。GNSS 用的是地心地固坐标系(ECEF)或经纬度。融合时,需要把 IMU 数据转换到导航坐标系(比如 ENU)。
融合关键: 卡尔曼滤波(EKF/UKF)是 IMU+GNSS 融合的经典方法。状态量通常包括位置、速度、姿态、以及 IMU 的零偏。
// 简化版 EKF 预测步骤
// 状态向量 x = [px, py, pz, vx, vy, vz, qw, qx, qy, qz, ba_x, ba_y, ba_z, bg_x, bg_y, bg_z]
// 其中 ba 是加速度计零偏,bg 是陀螺仪零偏
// 预测方程(离散化)
x_pred = f(x_prev, u_imu) // u_imu 包含加速度和角速度
P_pred = F * P_prev * F^T + Q // F 是雅可比矩阵,Q 是过程噪声
我曾经在隧道里吃过亏。GNSS 信号丢失,纯靠 IMU 积分,结果 10 秒后位置漂移了 20 多米。后来我加了零速检测(Zupt)和车辆运动约束(比如非完整性约束 NHC),才把漂移控制住。说白了,IMU 不能单独用太久,得靠其他传感器「拉」回来。
注意: IMU 的温漂问题。温度变化会导致零偏漂移。我建议每次上电后做 1-2 分钟的静态初始化,估计初始零偏。
知识体系总览
下面这张图,是我自己整理的传感器融合知识体系。你可以把它当作本章的「地图」。
这张图把四个传感器的核心特性和融合关键点串起来了。你仔细看,每个传感器都有自己的「强项」和「弱项」。Camera 看得清但测不准距离,LiDAR 测距准但稀疏,Radar 能测速但角度分辨率差,IMU/GNSS 提供位姿但会漂移。融合,说白了就是取长补短。
好了,第一章的内容就到这里。这些原理看起来简单,但真正做融合时,每一个细节都可能成为性能瓶颈。下一章,我们会深入讨论时间同步这个老大难问题。到时候见。