多模态数据基础:图像、激光雷达点云、毫米波雷达、IMU、GPS等传感器的数据格式与特性

做多模态融合,第一关就是跟各种传感器打交道。说实话,我刚入行那会儿,光搞明白每个传感器吐出来的数据长什么样,就花了两周。你想想看,如果连数据格式都搞不清楚,后面谈融合、谈同步,全是空中楼阁。

这一章,咱们就把主流传感器的数据格式和特性掰开揉碎讲清楚。我会结合自己踩过的坑,帮你建立一张「传感器数据认知地图」。

核心观点: 每种传感器的数据格式,本质上是其物理测量原理的「数字投影」。理解格式,就是理解传感器能做什么、不能做什么。

2.1 图像传感器(RGB / 双目 / 事件相机)

图像数据,大家最熟悉。但熟悉不等于理解到位。

2.1.1 数据格式

常规RGB图像,就是一个三维数组:[H, W, 3]。H是高度,W是宽度,3是通道数(R、G、B)。每个像素的值范围通常是0-255(uint8)。

但实际工程里,有几点要注意:

  • 颜色空间: 大部分算法用RGB,但有些场景(比如夜间)转成YUV或HSV效果更好。我在一个雨夜的项目里试过,YUV通道分离后做去噪,比RGB直接处理稳定得多。
  • 位深: 工业相机常见12bit或14bit RAW数据。直接用uint8会丢失暗部细节。我建议,如果做高动态范围融合,尽量保留原始位深。
  • 双目/多目: 本质上是多张图像的时间同步和空间对齐。数据格式就是多个[H, W, 3]的堆叠,但需要额外的标定参数文件(内参、外参、基线距离)。

2.1.2 关键特性

特性 说明 工程影响
高分辨率 像素级稠密信息 适合语义分割、目标分类,但计算量大
被动感知 依赖环境光照 夜间、逆光、隧道场景性能骤降
帧率固定 通常30/60fps 高速运动时存在运动模糊
无深度信息 单目无法直接测距 需要结构光或双目视差才能恢复深度
我的经验: 图像数据最容易出问题的是「自动曝光」。融合系统中,如果图像自动曝光导致亮度突变,会严重影响特征匹配。我后来强制锁死曝光参数,才解决了这个坑。

2.2 激光雷达点云(LiDAR)

点云数据,说白了就是一堆三维坐标点。每个点包含 (x, y, z),有些还带反射强度 intensity 或颜色 rgb。

2.2.1 数据格式

常见的点云格式有:

  • PCD(Point Cloud Data): ROS生态常用,支持ASCII和二进制。头部包含点云数量、字段定义。
  • LAS/LAZ: 测绘行业标准,支持分类、回波次数等属性。
  • PLY: 支持顶点和面片,常用于三维重建。
  • BIN(二进制裸数据): 比如KITTI数据集用的格式,直接按[x, y, z, intensity]顺序存储float32。

实际工程中,我建议用二进制格式。ASCII格式在点云数量超过10万时,读写速度会慢到让人崩溃。

2.2.2 关键特性

特性 说明 工程影响
稀疏性 水平分辨率高,垂直分辨率低 远距离目标点云稀疏,容易漏检
主动感知 不受光照影响 夜间、逆光场景依然稳定
精确测距 厘米级精度 适合障碍物检测、SLAM建图
无纹理信息 只有几何和反射强度 无法区分同形状不同颜色的物体
避坑指南: 我曾经遇到过点云「运动畸变」的问题。车辆转弯时,激光雷达旋转一周需要100ms,这期间车辆移动了,导致一帧点云里的物体位置是扭曲的。解决办法是:用IMU数据做运动补偿,或者用「去畸变」算法。

2.3 毫米波雷达(Radar)

毫米波雷达的数据,跟图像和点云完全不是一个路子。它不输出「点」,而是输出「目标列表」或「能量谱」。

2.3.1 数据格式

主流格式有两种:

  • 目标列表(Object List): 每个目标包含距离、速度、方位角、信噪比等。格式类似:[id, range, velocity, azimuth, snr]。
  • 点云格式(Point Cloud): 类似LiDAR,但点更稀疏,且每个点自带多普勒速度。
  • 原始数据(ADC Data): 最底层的数据,是经过混频和采样后的复数信号。需要做FFT才能提取目标。

我个人习惯,在融合系统中优先用目标列表。点云格式虽然信息更全,但处理起来计算量太大,实时性很难保证。

2.3.2 关键特性

特性 说明 工程影响
直接测速 利用多普勒效应,直接输出径向速度 对动态目标检测非常可靠
穿透性强 雨雾、扬尘、黑暗环境不受影响 全天候感知的核心传感器
角度分辨率低 水平角分辨率通常只有几度 无法区分近距离并排的两个行人
虚警率高 多径反射、静止杂波容易产生假目标 需要做目标跟踪和置信度过滤
我的经验: 毫米波雷达的「静止目标检测」是个大坑。雷达对静止物体不敏感,因为多普勒速度为0。我做过一个项目,车辆前方有一辆静止的卡车,雷达直接忽略了。后来我们融合了视觉的语义信息,才解决了这个问题。

2.4 IMU(惯性测量单元)

IMU的数据,说白了就是加速度和角速度。但它的「特性」比「格式」更重要。

2.4.1 数据格式

典型IMU输出:

// 加速度计 (m/s²)
accel_x, accel_y, accel_z

// 陀螺仪 (rad/s)
gyro_x, gyro_y, gyro_z

// 可选:磁力计 (μT)
mag_x, mag_y, mag_z

// 时间戳 (μs)
timestamp

数据频率通常很高,100Hz到1000Hz不等。我建议,在融合系统中,IMU数据一定要用高精度时间戳对齐,否则积分出来的位姿会漂移得离谱。

2.4.2 关键特性

特性 说明 工程影响
高频输出 100-1000Hz 适合做帧间插值和运动补偿
短时精度高 短时间内相对位姿估计准确 适合做视觉/激光的帧间约束
长时漂移 积分误差随时间累积 不能单独用于长时间定位
零偏不稳定 温度变化导致零偏漂移 需要定期标定或在线估计
避坑指南: 我曾经在IMU标定上吃过亏。买了一个便宜的MEMS IMU,没做温度补偿,结果夏天和冬天的零偏差了3倍。后来我学乖了,每次上电后先做5分钟的静态采集,估计零偏,再开始融合。

2.5 GPS(全球定位系统)

GPS数据,核心就是经纬度和海拔。但实际工程中,远不止这些。

2.5.1 数据格式

最常见的格式是NMEA 0183协议,比如:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

解析后得到:

  • UTC时间
  • 纬度、经度(度分格式)
  • 定位质量(0=无效,1=单点,2=差分)
  • 卫星数量
  • 水平精度因子(HDOP)
  • 海拔高度

除了NMEA,还有更紧凑的二进制格式,比如u-blox的UBX协议。我建议,在实时系统中用二进制格式,解析效率高很多。

2.5.2 关键特性

特性 说明 工程影响
定位 提供全局坐标,无累积误差 消除SLAM的长期漂移
更新率低 通常10Hz 高速运动时,帧间位移大,需要插值
易受遮挡 高楼、隧道、树荫下信号弱 城市峡谷场景需要IMU辅助
精度波动大 单点定位2-5m,差分定位cm级 融合系统中需要根据HDOP动态调整权重
我的经验: GPS的「时间戳」经常不准。很多GPS模块输出的时间戳是接收到信号时的本地时间,而不是卫星时间。我建议,在融合系统中,用GPS的PPS(秒脉冲)信号来同步所有传感器的时间基准,而不是直接信任NMEA里的时间字段。

2.6 传感器数据特性对比总览

下面这张SVG图,帮你把五种传感器的核心特性放在一起对比。你可以把它当作一张「选型速查表」。

多模态传感器数据特性对比 图像 (Camera) 激光雷达 (LiDAR) 毫米波雷达 (Radar) IMU GPS 维度 数据密度 测距能力 测速能力 光照鲁棒 天气鲁棒 ★★★★★ ★☆☆☆☆ ★☆☆☆☆ ★★☆☆☆ ★★☆☆☆ ★★★☆☆ ★★★★★ ★★☆☆☆ ★★★★★ ★★★☆☆ ★★☆☆☆ ★★★★☆ ★★★★★ ★★★★★ ★★★★★ ★☆☆☆☆ ★☆☆☆☆ ★★★★★ ★★★★★ ★★★★★ ★☆☆☆☆ ★☆☆☆☆ ★☆☆☆☆ ★☆☆☆☆ ★☆☆☆☆ ★ 越多表示该传感器在该维度上的能力越强。融合系统应取长补短,而非追求单一传感器的完美。

2.7 融合视角下的数据对齐要点

搞清楚了单个传感器的数据格式,接下来就要思考:这些数据怎么「对齐」?

我总结了三层对齐:

  1. 时间对齐: 不同传感器的采样时刻不同。比如相机30fps(33ms一帧),LiDAR 10Hz(100ms一帧),IMU 200Hz(5ms一帧)。融合时,需要把高频数据插值到低频数据的时间戳上。
  2. 空间对齐: 每个传感器有自己的坐标系。相机是像素坐标系,LiDAR是雷达坐标系,GPS是经纬度坐标系。需要标定出外参矩阵,把所有数据统一到车体坐标系或世界坐标系。
  3. 语义对齐: 不同传感器对同一物体的描述方式不同。相机看到的是「红色轿车」,LiDAR看到的是「一堆点云」,雷达看到的是「一个速度为10m/s的目标」。融合时,需要建立语义映射关系。
一句话总结: 多模态融合的本质,就是让不同传感器的「数据语言」在时间、空间、语义三个维度上「说同一种话」。