3. 目标级融合的数据结构与消息模型

目标级融合的核心不是“把两个检测框画在一起”,而是把来自毫米波雷达、摄像头、激光雷达等不同传感器的目标,统一表达为同一种可计算、可传递、可校验的数据对象。Bosch ADAS 的目标级融合通常围绕一个标准化的融合目标(Fused Object)展开:每个目标携带位置、速度、加速度、分类、存在概率和协方差等属性,再由目标列表(Object List)组织成帧级消息,通过明确的输入输出接口在感知节点与融合节点之间流转。理解这套数据结构,是后续做关联、滤波、航迹管理和功能安全校验的前提。

一、融合目标对象的属性构成

一个融合目标可以理解为一个带时间戳和坐标系约束的结构体。以车辆坐标系为参照,通常定义 x 轴指向车辆正前方,y 轴指向左侧,z 轴指向上方,速度与加速度的正负号与坐标轴方向一致。若输入来自图像坐标系或雷达极坐标,必须在接口层完成转换并记录来源,避免融合过程中参照系混用。

位置属性一般包括纵向距离 x、横向距离 y,必要时还有高度 z;速度属性包括纵向速度 vx、横向速度 vy;加速度属性包括 ax、ay。分类属性用于描述目标类型,例如乘用车、卡车、两轮车、行人、未知障碍物等,通常以枚举值加置信度表达。存在概率表示该目标真实存在的可能性,取值范围为 0 到 1,用于抑制虚警和支撑后续功能降级判断。协方差则描述状态估计的不确定度,位置、速度、加速度各自带有方差以及相互之间的协方差,构成一个对称矩阵。

这些属性不是孤立字段,而是共同决定目标是否可用。例如一个目标存在概率为 0.95、纵向距离 42.3 m、纵向速度 −1.8 m/s、分类为乘用车,但横向位置协方差很大,说明横向估计不可信,此时融合输出应保留该目标,但在横向控制类功能中降低其权重或标记为不可用。

二、目标列表的组织方式

单帧融合结果通常组织为“目标列表 + 帧头”的消息结构。帧头包含时间戳、坐标系标识、传感器来源集合、目标数量、消息版本号等元信息;目标列表则是若干融合目标的数组。每个目标拥有唯一且在同一段航迹内稳定的 ID,便于跨帧跟踪和下游模块引用。

目标列表的组织需要处理三个实际问题。第一是生命周期:新目标进入、已有目标更新、目标丢失后进入待删除状态,通常用状态字段区分,例如 NEW、TRACKED、COASTED、DELETED。第二是排序与索引:可按纵向距离、危险程度或 ID 排序,但排序规则必须在接口中固定,避免下游按不同假设解析。第三是容量与截断:消息中应声明最大目标数,超出时按优先级截断,并记录被截断数量,防止下游误以为目标列表完整。

下面给出一个融合目标列表的字段示例,字段命名和取值仅用于说明结构,实际项目应按接口规范调整。

FusedObjectList {
  header: {
    timestamp_ns: 1234567890,
    frame_id: "vehicle_rear_axle",
    source_sensors: ["radar_front", "camera_front", "lidar_front"],
    object_count: 3,
    max_objects: 64,
    truncated_count: 0,
    version: "1.2"
  },
  objects: [
    {
      id: 101,
      state: "TRACKED",
      x: 42.30, y: -1.75, z: 0.40,
      vx: -1.80, vy: 0.05,
      ax: -0.20, ay: 0.01,
      class: "CAR",
      class_confidence: 0.93,
      existence_probability: 0.95,
      covariance: {
        xx: 0.25, yy: 0.09, vxvx: 0.04, vyvy: 0.02,
        xy: 0.01, xvx: -0.02, yvy: 0.00
      }
    }
  ]
}

三、融合输入输出接口设计

输入接口面向各传感器目标列表,输出接口面向融合后的目标列表。输入侧的关键约定包括:每个传感器目标必须带时间戳和坐标系,必须声明自身量测类型(位置、速度、分类、存在概率等),并给出对应的不确定度。若某传感器只提供位置不提供速度,融合节点不能默认速度为零,而应把速度协方差设得足够大,表示“未知”。

输出侧的关键约定包括:融合目标列表必须带帧头、目标状态、协方差和来源信息。来源信息可以记录每个融合目标由哪些传感器支持,例如 radar_front 与 camera_front 同时支持,用于后续置信度评估和故障排查。接口还应定义更新周期、最大延迟和丢帧处理策略,例如融合节点在 100 ms 内未收到某传感器数据时,应使用预测值继续跟踪,并在消息中标记该传感器为降级。

接口设计中最容易被忽略的是“单位与符号约定”。距离用米、速度用米每秒、角度用弧度还是度、加速度正负号如何定义,都必须在接口文档中写清楚,并在所有传感器适配层统一执行。否则融合结果会出现难以定位的符号错误。

四、从属性到消息的完整链路

把上述内容串起来,可以看到一条清晰的数据链路:传感器原始目标经过坐标转换和字段映射,进入融合输入接口;融合节点完成时间对齐、关联、状态估计和航迹管理,生成融合目标;融合目标按列表组织并附带帧头,通过输出接口发送给下游的 AEB、ACC、LKA 等功能模块。每个环节都依赖统一的数据结构,任何字段缺失或语义不一致都会在链路末端放大为功能异常。

目标级融合数据结构与消息模型 毫米波雷达目标 距离 / 速度 / 角度 摄像头目标 分类 / 位置 / 置信度 激光雷达目标 点云聚类 / 尺寸 融合输入接口 时间戳对齐 坐标系转换 字段映射与校验 不确定度声明 融合处理节点 数据关联 状态估计与滤波 航迹管理 存在概率更新 协方差传播 融合输出接口 目标列表 帧头元信息 来源标记 降级与截断标志 融合目标对象属性 位置 x, y, z 速度 vx, vy 加速度 ax, ay 分类 类别 + 置信度 存在概率 0 ~ 1 协方差矩阵:位置 / 速度 / 加速度的方差与互协方差 下游:AEB / ACC / LKA 等功能模块按统一接口消费融合目标列表

在实际工程中,建议把上述结构固化为接口定义文件或 IDL,并在集成测试中重点检查三类问题:字段是否齐全、单位与符号是否一致、协方差是否被正确传播。只有数据结构稳定,融合算法和下游功能才能在同一套语义上协同工作。