第四节:传感器模型与数据融合

各位同学,今天我们来聊聊自动驾驶的“眼睛”和“大脑”。

传感器是车的眼睛,数据融合就是大脑。没有融合,每个传感器看到的都是片面的世界。我做了这么多年系统,见过太多因为融合没做好而出事的案例。嗯,咱们一步步来。

4.1 摄像头模型

摄像头,说白了就是模仿人眼。但它有个致命弱点——怕黑、怕雨、怕逆光。

摄像头模型的核心是针孔模型。它把三维世界投影到二维图像上。公式很简单:

// 针孔相机投影模型
// (X, Y, Z) 是世界坐标,(u, v) 是像素坐标
// fx, fy 是焦距,cx, cy 是主点偏移

u = fx * X / Z + cx
v = fy * Y / Z + cy

我在项目中遇到过一个问题:摄像头标定没做好,导致车道线检测偏差了10厘米。10厘米啊,在高速上就是生与死的距离。

注意:摄像头标定必须定期做。温度变化、振动都会让内参漂移。我建议每次换季都重新标定一次。

4.2 激光雷达模型

激光雷达,我习惯叫它LiDAR。它用激光束扫描周围环境,直接给你一个点云。

LiDAR的模型核心是光束传播模型。每个点包含距离、角度、反射强度。公式如下:

// 激光雷达点云生成模型
// θ 是水平角,φ 是垂直角,r 是距离

x = r * cos(φ) * cos(θ)
y = r * cos(φ) * sin(θ)
z = r * sin(φ)

你想想看,LiDAR的好处是什么?它直接给你三维坐标,不需要像摄像头那样去“猜”深度。但坏处也很明显——贵,而且怕雨雪。

个人经验:我曾经在雨夜测试,LiDAR的点云密度直接掉了60%。所以别迷信LiDAR,它也不是万能的。

4.3 毫米波雷达模型

毫米波雷达,这是我最喜欢的传感器。为什么?因为它稳定。雨雪雾天照样工作。

它的模型基于多普勒效应。不仅能测距离,还能测速度。核心公式:

// 毫米波雷达测量模型
// f_d 是多普勒频移,v_r 是径向速度,λ 是波长

f_d = 2 * v_r / λ
r = c * Δt / 2   // 距离测量

但毫米波雷达有个问题——分辨率低。它只能告诉你“那里有个东西”,但说不清“那是什么”。所以它必须和摄像头配合使用。

关键点:毫米波雷达的角分辨率通常在1°-3°之间。这意味着在100米外,它只能区分相距1.7米以上的两个物体。记住这个数字,做融合时有用。

4.4 IMU/GNSS模型

IMU(惯性测量单元)和GNSS(全球导航卫星系统)是定位的黄金搭档。

IMU的模型是积分模型。它测量加速度和角速度,然后积分得到位置和姿态。但积分会累积误差,这就是为什么需要GNSS来修正。

// IMU积分模型(简化版)
// a 是加速度,ω 是角速度,dt 是时间步长

v_new = v_old + a * dt
p_new = p_old + v_new * dt
θ_new = θ_old + ω * dt

GNSS的模型就简单了——它直接给你经纬度和高度。但精度受环境影响很大。高楼遮挡、多径效应,都会让定位漂移。

避坑指南:我曾经在隧道里只靠IMU,结果积分了30秒后位置漂了50米。所以记住:IMU只能短时使用,必须定期用GNSS或视觉来修正。

4.5 卡尔曼滤波融合

好了,现在我们有四个传感器。每个都有优点和缺点。怎么把它们结合起来?

卡尔曼滤波,说白了就是加权平均。但它不是简单的平均,而是根据每个传感器的置信度来动态调整权重。

核心公式分两步:预测和更新。

// 卡尔曼滤波核心公式
// 预测步骤
x_pred = A * x_prev + B * u
P_pred = A * P_prev * A^T + Q

// 更新步骤
K = P_pred * H^T * (H * P_pred * H^T + R)^(-1)
x_new = x_pred + K * (z - H * x_pred)
P_new = (I - K * H) * P_pred

这里面的关键参数:

  • Q:过程噪声协方差。代表你对模型的信任程度。
  • R:测量噪声协方差。代表你对传感器的信任程度。
  • K:卡尔曼增益。它决定了你更相信预测还是测量。
实战经验:调Q和R是门艺术。我刚开始做时,把Q设得太小,结果滤波器反应迟钝。后来把R设得太小,又导致噪声太大。最后我总结了一个经验:先根据传感器手册给初始值,然后在实车上微调。

4.6 融合策略实战

在实际项目中,我通常用松耦合策略。什么意思?就是每个传感器先自己做目标检测,然后我把它们的结果融合起来。

举个例子:

  1. 摄像头检测到前方有车,距离50米,置信度0.8
  2. 毫米波雷达检测到前方有目标,距离48米,速度10m/s,置信度0.9
  3. LiDAR检测到前方有车,距离49米,置信度0.95

卡尔曼滤波会怎么做?它会根据置信度加权平均。LiDAR的置信度最高,所以它的权重最大。最终融合结果是距离49.2米。

小技巧:我习惯在融合前先做时间对齐。因为不同传感器的采样频率不同。摄像头是30Hz,LiDAR是10Hz,毫米波雷达是20Hz。不对齐的话,融合结果会乱套。

4.7 总结与避坑

好了,这一节的内容就这些。我最后给你几个实用建议:

  • 别过度依赖单一传感器。每个传感器都有盲区,多传感器融合是必须的。
  • 卡尔曼滤波不是万能的。在非线性系统中,要用扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)。
  • 调试时先看数据。我见过太多人一上来就调参数,结果发现是传感器坏了。先可视化数据,再动手调参。
最后提醒:我曾经在项目交付前一周发现融合结果有偏差,排查了两天才发现是时间戳没对齐。所以,时间同步是融合的基础,千万别忽视。

下一节我们会讲控制算法。到时候你会看到,没有好的感知融合,控制算法再牛也没用。嗯,今天就到这里。