3、传感器数据融合基础:数据融合层级、卡尔曼滤波原理、坐标系对齐

各位同学,欢迎来到第三章。

前两章我们把ADAS系统的整体架构和传感器特性捋了一遍。从这章开始,要进入一个核心话题——数据融合。

说白了,就是让摄像头、毫米波雷达、激光雷达这些“各说各话”的传感器,能协同工作,输出一个统一、可靠的环境模型。我做了这么多年ADAS,可以负责任地告诉你:融合做不好,后面所有的决策、控制都是空中楼阁。

3.1 数据融合的三个层级

数据融合不是一股脑把所有原始数据倒在一起。根据处理阶段的不同,业界通常分为三个层级。我习惯用一个比喻来理解:“拼图”。

  • 数据级融合:相当于把几幅拼图的碎片直接混在一起,再拼。信息最完整,但计算量巨大,而且对传感器的时间同步、分辨率一致性要求极高。
  • 特征级融合:先各自拼出局部图案(提取特征),再把局部图案拼成完整画面。这是目前ADAS的主流做法。
  • 决策级融合:各自拼完整幅图,然后投票决定最终结果。容错性好,但会丢失底层细节。

我在项目中遇到过最典型的案例:某Tier1的方案用了数据级融合,把64线激光雷达的点云和2M摄像头的像素直接对齐。效果确实好,但算力消耗直接翻了三倍,最后量产时不得不降级到特征级融合。所以,选哪个层级,本质是精度与算力的博弈。

融合层级 处理对象 优点 缺点 典型应用
数据级 原始像素/点云 信息损失最小 计算量大、带宽高、同步难 高精度建图
特征级 目标边界框/点云簇 平衡精度与算力 特征提取可能丢失细节 目标检测与跟踪
决策级 目标类别/置信度 系统鲁棒性强 无法利用底层互补信息 多传感器投票
我的建议: 对于量产ADAS项目,优先考虑特征级融合。它既能利用不同传感器的互补特性(比如雷达的测距精度+相机的类别识别),又不会让嵌入式平台“爆缸”。

3.2 卡尔曼滤波原理:从“猜”到“准”

融合的核心,是状态估计。你想想看,传感器都有噪声,雷达测距可能跳变,摄像头检测框会抖动。怎么从这些不完美的观测中,得到目标最真实的位置和速度?

卡尔曼滤波就是干这个的。它不复杂,本质上是一个“预测-更新”的循环。

  1. 预测:根据上一帧的状态(位置、速度),用运动模型猜一下这一帧目标在哪。
  2. 更新:拿到传感器这一帧的观测值,结合“猜的结果”和“观测结果”,各自带一个权重(卡尔曼增益),算出最优估计。

嗯,这里要注意:卡尔曼增益是动态计算的。如果传感器噪声小,我就更相信观测;如果模型预测得准,我就更相信预测。我曾经调试过一个项目,毫米波雷达的噪声方差标定错了,导致卡尔曼滤波完全跟着噪声跑,目标轨迹像喝醉了酒。后来重新标定了噪声协方差矩阵,效果立竿见影。

下面是一个简化的卡尔曼滤波预测-更新流程,我用Python写了个核心骨架,方便你理解。

import numpy as np

# 状态向量: [x, y, vx, vy]
# 观测向量: [x, y]

def kalman_filter(z, F, H, Q, R, x_est, P):
    """
    z: 当前观测值
    F: 状态转移矩阵
    H: 观测矩阵
    Q: 过程噪声协方差
    R: 观测噪声协方差
    x_est: 上一帧最优估计
    P: 上一帧误差协方差
    """
    # ---- 预测 ----
    x_pred = F @ x_est
    P_pred = F @ P @ F.T + Q

    # ---- 更新 ----
    y = z - H @ x_pred          # 残差
    S = H @ P_pred @ H.T + R    # 残差协方差
    K = P_pred @ H.T @ np.linalg.inv(S)  # 卡尔曼增益

    x_est = x_pred + K @ y
    P = (np.eye(len(x_est)) - K @ H) @ P_pred

    return x_est, P
核心要点: 卡尔曼滤波假设系统是线性的、噪声是高斯分布。如果遇到非线性系统(比如车辆转弯),就需要用扩展卡尔曼滤波(EKF)或无迹卡尔曼滤波(UKF)。我在实际项目中,80%的场景用线性KF就够了,只有做泊车轨迹跟踪时才切到UKF。

3.3 坐标系对齐:让传感器“说同一种语言”

这是融合里最基础、也最容易出bug的一步。每个传感器都有自己的坐标系:

  • 摄像头:像素坐标系 (u, v)
  • 毫米波雷达:极坐标系 (距离, 角度, 速度)
  • 激光雷达:笛卡尔坐标系 (x, y, z)
  • 车辆本体:以后轴中心为原点的车身坐标系

不把它们对齐到同一个坐标系下,融合就是鸡同鸭讲。我见过一个案例,因为雷达安装支架的俯仰角标定差了0.5度,导致高速上目标位置偏差了2米,AEB系统差点误触发。

坐标系对齐通常分两步:

  1. 内参标定:传感器自身的参数(如相机焦距、畸变系数)。
  2. 外参标定:传感器之间的相对位置和姿态(旋转矩阵R + 平移向量t)。

下面这张图展示了从传感器原始数据到统一车身坐标系的核心流程。

坐标系对齐与融合流程 摄像头 (u,v) 毫米波雷达 (r,θ) 激光雷达 (x,y,z) 统一车身坐标系 关键变换 内参: 传感器自身校准 外参: R(旋转) + t(平移) 最终: 统一到车辆后轴中心
避坑指南: 我曾经在实车路试时发现,激光雷达检测到的路沿和摄像头看到的车道线总是对不齐。查了三天,最后发现是外参标定板的厚度没考虑进去。记住:外参标定板的物理尺寸、厚度、甚至反光特性,都会影响标定精度。量产前一定要做交叉验证。

3.4 本章小结

这一章我们聊了三件事:

  • 融合层级:数据级、特征级、决策级。量产首选特征级。
  • 卡尔曼滤波:预测+更新,核心是卡尔曼增益的动态计算。
  • 坐标系对齐:内参+外参,把不同传感器的数据统一到车身坐标系。