2. 自动驾驶数据基础

自动驾驶数据切片检索与场景索引工程的第一步,是理解“被切片的原始数据到底是什么”。自动驾驶车辆不是单一摄像头录屏,而是由相机、激光雷达、毫米波雷达、IMU、GNSS、轮速计等多类传感器同步采集,形成多模态、多频率、多坐标系的数据集合。只有先厘清传感器数据类型、采集链路、标注格式与存储规模,后续的切片、索引、检索才有稳定的数据基础。

一、核心原理:多传感器数据类型与特征

自动驾驶数据通常分为图像数据、点云数据、雷达目标数据、车辆状态数据和定位数据五大类。它们的时间频率、空间表达和语义能力差异很大,直接决定了切片与索引的粒度。

  • 相机图像:前视、环视、侧视等,常见 1920×1080 或 3840×2160,30fps,提供丰富纹理与颜色,但缺少精确深度。
  • 激光雷达点云:机械式或半固态,10~20Hz,每帧数万至数十万点,含 x/y/z、intensity、ring、timestamp,空间精度高。
  • 毫米波雷达:输出目标距离、速度、角度、RCS,频率约 20~50Hz,对运动目标敏感,但点迹稀疏。
  • IMU/GNSS:加速度、角速度、经纬度、航向,频率 100~1000Hz,用于位姿估计与时间对齐。
  • 车辆总线数据:车速、转向角、制动、档位,通常 10~100Hz,是行为语义的重要上下文。
关键点:多传感器数据必须统一到同一时间基准和同一空间坐标系,否则切片会出现“图不对点、点不对时”的问题。

二、数据采集流程:从触发到落盘

采集流程一般包括任务配置、传感器触发、时间同步、数据落盘、元数据记录和回传归档六个环节。工程上最容易被忽视的是时间同步与元数据完整性。

  1. 任务配置:设定采集路线、场景标签、传感器开关、采样频率和存储路径。
  2. 硬件触发:以 PPS 或 GPS 秒脉冲为基准,触发相机曝光、激光雷达旋转和雷达发射。
  3. 时间同步:通过 PTP、gPTP 或硬件触发线,将各传感器时间戳对齐到统一时钟。
  4. 数据落盘:按 rosbag、MCAP、自定义二进制或视频文件写入本地 NVMe。
  5. 元数据记录:记录车辆位姿、天气、光照、场景标签、采集人员与设备编号。
  6. 回传归档:通过边缘脱敏、压缩、校验后上传到数据中心或对象存储。
# 典型采集配置片段(YAML)
sensors:
  camera_front: {type: camera, fps: 30, resolution: [1920, 1080]}
  lidar_top:    {type: lidar,  hz: 10,  channels: 128}
  radar_front:  {type: radar,  hz: 20}
sync:
  master: gps_pps
  mode: hardware_trigger
storage:
  format: mcap
  chunk_size_mb: 512
  path: /data/raw/2025-06-01/run_001

三、数据标注格式:从 2D 框到 3D 场景

标注格式决定了数据能否被检索系统解析。常见格式包括 COCO、KITTI、nuScenes、OpenLABEL 和自定义 JSON。不同格式对目标类别、属性、跟踪 ID、坐标系和可见性的表达不同。

格式主要用途关键字段检索友好度
COCO2D 图像检测/分割bbox、segmentation、category_id中
KITTI3D 目标检测location、dimensions、rotation_y中
nuScenes多传感器 3D 场景sample_data、ego_pose、calibrated_sensor高
OpenLABEL通用多模态标注frame_intervals、objects、attributes高
自定义 JSON项目内闭环track_id、scene_tag、sensor_ts取决于设计

在场景索引工程中,标注不仅是训练标签,更是检索键。例如“夜间、雨天、行人横穿、距离 20 米内”这类查询,需要标注中保留天气、光照、行为、距离等属性字段。

四、数据规模与存储挑战

一辆 L4 测试车每天可产生 2~8TB 原始数据,其中激光雷达和相机占主要部分。若车队规模为 100 辆,日增数据可达数百 TB,年增数据进入 PB 级。存储挑战主要体现在四个方面:

  • 容量与成本:原始数据、中间切片、标注结果和索引副本会形成多份存储,冷热分层是必需策略。
  • 写入带宽:多传感器并发写入要求 NVMe 持续写入能力,否则会丢帧。
  • 元数据管理:没有统一元数据,切片检索只能靠文件名和目录,效率极低。
  • 合规与脱敏:人脸、车牌等敏感信息需要在回传前处理,增加计算与流程复杂度。
常见误区:只关注“存得下”,忽视“找得到”。如果采集时没有记录场景标签、时间同步质量和传感器标定版本,后续切片检索会付出数倍代价。

五、案例与复盘:一次切片检索失败的原因

某项目需要检索“城市道路、右转、外卖骑手横穿”的片段。团队发现原始数据完整,但检索结果极少。复盘发现:采集时未记录“骑手”细分类别,标注只写了“行人”;同时相机与激光雷达时间戳偏差约 80ms,导致切片时目标框与点云错位。修复方案是:在采集端增加场景标签字段,在标注规范中细化两轮车类别,并在入库前执行时间同步校验。

# 入库前时间同步校验示例
for each frame:
  dt = abs(camera_ts - lidar_ts)
  if dt > 50ms:
    mark_as_unsynced(frame)
    exclude_from_index(frame)

这个案例说明,数据基础不是“采集完就结束”,而是采集、同步、标注、元数据和存储策略共同构成的工程体系。只有把这些基础打牢,后续的数据切片、场景索引和检索服务才能稳定运行。

多传感器数据采集与场景索引基础链路 传感器层 相机 30fps 激光雷达 10Hz 毫米波雷达 20Hz IMU/GNSS 100Hz 车辆总线 10-100Hz 采集与同步层 PPS / gPTP 硬件触发 时间戳对齐 ≤50ms MCAP / rosbag 落盘 元数据:天气/光照/场景 标注与索引层 2D/3D 框、跟踪 ID 属性:行为/距离/可见性 场景标签与切片键 索引库 存储挑战: PB 级容量 · 高写入带宽 · 元数据一致性 · 脱敏合规 · 冷热分层 目标:原始数据可存、切片可查、场景可检索、索引可复现