第一章:传感器基础回顾
各位同学好,我是你们这门课的主讲。在正式开始讲融合策略之前,我觉得有必要先把传感器的基础拉一遍。你可能会说:“这些我都学过啊!” 嗯,我理解。但说实话,很多坑恰恰就出在基础不牢上。我自己带项目时,见过太多因为对传感器原理理解不透彻,导致融合效果翻车的案例。
所以,这一章我们稳扎稳打。把毫米波雷达、视觉相机、还有标定这三个核心基础再过一遍。我保证,不会讲成枯燥的教科书,咱们就聊聊实际工程中那些“你不得不知道”的事。
1.1 毫米波雷达原理
雷达这东西,说白了就是“我用电磁波照你,然后听回声”。但怎么从回声里算出距离、速度、角度,这里面就有门道了。
1.1.1 FMCW:调频连续波
FMCW,全称是Frequency Modulated Continuous Wave。你想想看,如果雷达一直发一个固定频率的波,那只能测到有没有东西,测不出距离。为什么?因为没有时间标记。
FMCW的做法很聪明:它让发射信号的频率随时间线性变化。就像一个斜坡,频率从低到高扫过去。发射信号和回波信号之间,会有一个频率差。这个频率差,就叫“差频”。
我简单推导一下:
假设调频斜率是 S (Hz/s),目标距离是 R (米)
电磁波往返时间:τ = 2R / c
差频:f_b = S * τ = S * (2R / c)
所以:R = (c * f_b) / (2S)
你看,只要测出差频 f_b,距离 R 就出来了。我在项目中第一次调这个参数时,发现差频信号里总有个直流分量,后来才意识到是发射泄漏直接耦合进了接收通道。嗯,这里要注意,硬件隔离度不够的话,近距目标会被淹没。
核心要点: FMCW 通过发射频率随时间线性变化的连续波,利用发射与回波的频率差来解算距离。这是目前车载毫米波雷达最主流的方案。
1.1.2 多普勒效应:测速的原理
多普勒效应大家高中都学过。火车朝你开过来,汽笛声变尖(频率变高);离你远去,声音变低沉(频率变低)。雷达测速也是这个道理。
但有意思的是,FMCW雷达里,多普勒频移和距离引起的差频是混在一起的。怎么分开?
我习惯的做法是:发射两个不同斜率的调频波(三角波),或者用多个 chirp 组成一帧。通过二维FFT,一个维度解距离,另一个维度解速度。
具体来说:
- 第一个FFT(距离维):把每个 chirp 内的差频算出来,得到距离。
- 第二个FFT(多普勒维):把多个 chirp 之间同一距离门上的相位变化算出来,得到速度。
我曾经踩过一个坑:在高速场景下,目标速度太快,导致多普勒模糊(速度模糊)。说白了就是相位变化超过了π,解出来的速度是错的。解决办法是提高 chirp 的重复频率,或者用多普勒解模糊算法。
避坑指南: 我曾经因为忽略了“距离-速度耦合”问题,导致在目标加速运动时,距离测量值出现了系统性偏差。后来加了运动补偿才解决。如果你做的是高精度测距,务必考虑这一点。
1.2 视觉相机模型
视觉传感器,说白了就是摄像头。但摄像头怎么把三维世界映射到二维图像上?这里面有个数学模型。
1.2.1 针孔模型
针孔模型是最经典的相机模型。想象一个暗箱,前面有个小孔,光线穿过小孔在后面的成像平面上形成倒像。这就是最原始的相机。
数学上,它描述了一个从世界坐标系到像素坐标系的映射关系:
世界坐标 (X, Y, Z) → 相机坐标 (Xc, Yc, Zc) → 图像坐标 (x, y) → 像素坐标 (u, v)
其中:
x = f * Xc / Zc
y = f * Yc / Zc
加上内参矩阵 K:
[u] [fx 0 cx] [Xc]
[v] = [ 0 fy cy] [Yc]
[1] [ 0 0 1] [Zc]
这里 fx, fy 是焦距(以像素为单位),cx, cy 是光心偏移。我刚开始做融合时,总以为内参是出厂就定死的。其实不是,温度变化、镜头松动都会导致内参漂移。所以我建议,每隔一段时间就要重新标定一次。
1.2.2 畸变校正
现实中的镜头不是完美的针孔。为了获得更大视场角,镜头通常带有畸变。主要有两种:
- 径向畸变:图像边缘的直线会变弯,像鱼眼效果。用 k1, k2, k3 三个参数描述。
- 切向畸变:镜头与成像平面不平行导致的。用 p1, p2 两个参数描述。
校正公式长这样:
x_corrected = x * (1 + k1*r^2 + k2*r^4 + k3*r^6) + 2*p1*x*y + p2*(r^2 + 2*x^2)
y_corrected = y * (1 + k1*r^2 + k2*r^4 + k3*r^6) + p1*(r^2 + 2*y^2) + 2*p2*x*y
我个人习惯用 OpenCV 的 cv2.undistort() 来做。但要注意,校正后的图像边缘会被裁剪掉一部分。如果你需要保留全视场,可以用 cv2.initUndistortRectifyMap() 配合 cv2.remap(),并设置合适的 alpha 参数。
小技巧: 我在做雷达与视觉融合时,通常先对图像做畸变校正,然后再投影雷达点。如果不校正,你会发现远处的雷达目标在图像上的位置偏差很大,尤其是画面边缘。
1.3 传感器标定基础
标定,说白了就是“对齐”。把不同传感器的坐标系统一到一个参考系下。这是融合的前提,也是最容易出问题的地方。
1.3.1 为什么要标定?
你想想看,雷达告诉你“前方10米处有个目标”,相机告诉你“图像坐标(320, 240)处有个目标”。这两个信息怎么对应起来?
必须知道:
- 雷达坐标系相对于车辆坐标系的位置和姿态
- 相机坐标系相对于车辆坐标系的位置和姿态
- 以及雷达和相机之间的相对位姿
这些参数,就是标定要解决的问题。
1.3.2 标定的两种方式
| 标定类型 | 方法 | 精度 | 我个人的经验 |
|---|---|---|---|
| 离线标定 | 使用标定板、角反射器等已知目标 | 高(亚像素级) | 适合量产前的精确标定,但耗时 |
| 在线标定 | 利用自然特征点(车道线、路牌)自动估计 | 中等 | 适合运行中的微调,但不能完全替代离线标定 |
我建议的做法是:先用离线标定得到一个初始值,然后在实际运行中,用在线标定做持续补偿。因为车辆行驶中的振动、温度变化都会导致外参漂移。
1.3.3 雷达与相机联合标定的难点
雷达和相机的数据特性完全不同。雷达是稀疏的、带噪声的点云;相机是稠密的、带纹理的图像。怎么找到对应点?
我常用的方法是:
- 在场景中放置角反射器(雷达能强烈反射)
- 同时用相机拍摄,手动标注角反射器在图像中的位置
- 收集多组对应点,用PnP算法求解外参
这里有个坑:角反射器在雷达图像中是一个点,但在相机图像中可能因为光照、遮挡而看不清。我曾经因为角反射器表面反光太强,导致相机过曝,标定失败。后来我改用哑光材质的角反射器,并在阴天进行标定,问题就解决了。
总结一下: 标定不是一劳永逸的。我见过太多项目,标定完就再也不管了,结果跑了几个月后,融合精度直线下降。定期标定、在线补偿,才是工程上的正确姿势。
好了,这一章的基础回顾就到这里。下一章我们开始正式进入决策级融合的策略设计。到时候我会结合一个实际的项目案例,带大家一步步搭建融合框架。咱们下章见。