1. 传感器基础与数据解析:相机、激光雷达、毫米波雷达、IMU/GNSS的工作原理与数据格式解析

做自动驾驶感知,说白了就是跟各种传感器打交道。我刚开始入行那会儿,总觉得算法才是核心,传感器嘛,买来用就行了。结果第一次实车测试就栽了跟头——激光雷达点云全是噪点,相机图像过曝到一片白。嗯,从那以后我明白了:不懂传感器,你连数据怎么来的都不知道,更别提处理它了。

这一章,咱们就把自动驾驶的四大核心传感器掰开揉碎讲清楚。我会结合自己踩过的坑,帮你建立对传感器数据的直觉。

1.1 相机:感知系统的「眼睛」

相机的工作原理,说白了就是小孔成像。光线通过镜头打到CMOS传感器上,光电转换后生成数字图像。但这里有个关键点——你看到的RGB图像,其实是经过ISP(图像信号处理器)加工过的。

核心参数:

  • 分辨率:1920x1080、3840x2160等。分辨率越高,远处目标越清晰,但计算量也越大。
  • 帧率:30fps、60fps。高速场景建议60fps以上,否则运动模糊会让你头疼。
  • 视场角(FOV):水平120°、垂直60°左右。广角镜头畸变大,但视野广。
  • 动态范围:120dB以上。进出隧道时,动态范围不够直接全黑或全白。

数据格式这块,最常见的是YUV420和RAW格式。YUV420是压缩后的,适合传输和存储;RAW是原始数据,保留了更多信息,但体积大。我个人习惯在算法调试阶段用RAW,部署时转YUV。

避坑指南:我曾经在项目中遇到过相机曝光时间设置不当,导致高速运动目标拖影严重。后来我强制将曝光时间控制在帧周期的1/10以内,问题才解决。你想想看,如果曝光时间太长,车跑起来图像全是糊的,检测算法再强也没用。

1.2 激光雷达:三维空间的「尺子」

激光雷达发射激光束,测量反射时间差来算距离。机械式、固态式、MEMS式……市面上种类很多。但不管哪种,输出的核心数据都是点云——每个点包含(x, y, z, intensity)。

为什么要有intensity(反射强度)?我举个例子:同样距离下,白色车道线和黑色柏油路的反射强度差很多。这个信息可以用来辅助语义分割。

# 点云数据格式示例(PCD格式)
VERSION 0.7
FIELDS x y z intensity
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 100000
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 100000
DATA ascii
1.234 2.345 3.456 0.85
1.567 2.678 3.789 0.92
...

实际项目中,激光雷达最让人头疼的是噪点处理。雨雪天气、灰尘、甚至飞虫都会产生噪点。我建议你拿到数据后先做两步:去离群点地面滤波。不然点云里全是乱七八糟的东西,聚类算法根本没法用。

注意:激光雷达的线束数量(16线、32线、64线、128线)直接决定了点云密度。64线以下的车道线检测效果很差,因为地面点太稀疏了。如果你预算有限,至少上32线。

1.3 毫米波雷达:全天候的「耳朵」

毫米波雷达发射电磁波,利用多普勒效应测速。它的优势是全天候——雨雪雾天照样工作。但缺点也很明显:角度分辨率低,点云稀疏。

数据格式上,毫米波雷达输出的是目标列表(Target List),每个目标包含:

字段 说明 单位
range 距离
azimuth 水平角度
velocity 径向速度 米/秒
rcs 雷达散射截面 dBsm

这里有个坑:RCS值可以用来区分目标类型。行人RCS一般在-10到0 dBsm,车辆在10到20 dBsm。但实际中,不同角度下RCS变化很大。我曾经遇到过把路边金属垃圾桶当成车辆的情况——RCS值确实像车。后来我加了运动状态判断,静止目标直接过滤掉。

我的经验:毫米波雷达和相机做融合时,时间戳对齐是个大问题。雷达更新频率通常20Hz,相机30Hz,差10ms就可能导致目标位置偏移半米。我建议用硬件同步信号(PPS)来对齐,软件插值只能作为备选。

1.4 IMU/GNSS:定位的「骨架」

IMU(惯性测量单元)提供加速度和角速度,GNSS(全球导航卫星系统)提供绝对位置。两者互补——IMU短时精度高但会漂移,GNSS长时稳定但更新慢。

IMU数据格式很简单:

{
  "timestamp": 1234567890.123,
  "accel": [0.12, -0.01, 9.81],  // m/s²
  "gyro": [0.001, -0.002, 0.003] // rad/s
}

GNSS数据常用NMEA协议,比如$GPGGA语句:

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

这里面包含了经纬度、海拔、卫星数量等信息。注意:卫星数量少于4颗时,定位精度会急剧下降。城市峡谷、隧道里尤其明显。

重要提醒:IMU的零偏(bias)是最大的敌人。温度变化、时间推移都会导致零偏漂移。我建议每次上电后做5分钟的静态初始化,估算零偏。不然积分出来的位置误差会以二次方增长——10秒漂移1米,20秒就4米了。

1.5 多传感器时间同步:最容易忽略的坑

四个传感器各自有各自的时钟,时间不同步的话,融合出来的结果就是「张冠李戴」。我见过最离谱的情况:激光雷达和相机差了200ms,结果车辆位置偏移了5米,检测框全对不上。

常用的同步方案有两种:

  • 硬件同步:所有传感器共用PPS信号和GPS时间。精度可达微秒级。
  • 软件同步:通过时间戳插值对齐。精度在毫秒级,适合低速场景。

我个人强烈建议用硬件同步。虽然布线麻烦点,但省心。软件同步遇到传感器丢帧、延迟抖动时,效果很差。

总结一下:

  • 相机:看细节,但怕光照变化
  • 激光雷达:测距准,但怕雨雪
  • 毫米波雷达:全天候,但分辨率低
  • IMU/GNSS:定位基础,但会漂移

没有完美的传感器,只有合理的融合方案。下一章咱们就讲数据融合,到时候你会更深刻地理解为什么每个传感器都不可或缺。