1. 传感器基础与坐标系:自动驾驶的“眼睛”与“尺子”

大家好,我是你们的老朋友。今天咱们正式开课,聊聊自动驾驶感知的基石——传感器和坐标系。

说实话,我刚开始做感知那会儿,也踩过不少坑。最典型的一次,是融合毫米波雷达和视觉数据时,发现目标位置总是对不上。折腾了两天,最后发现是坐标系转换矩阵写反了。嗯,从那以后,我养成了一个习惯:拿到任何传感器数据,第一件事就是确认它的坐标系定义

所以,这一章咱们把基础打牢。你想想看,如果连“眼睛”怎么看世界、“尺子”怎么量距离都没搞明白,后面的融合、标定、规划,全是空中楼阁。

1.1 自动驾驶常用传感器:各有各的脾气

自动驾驶的传感器,说白了就是车的“五官”。每种传感器都有自己的长处和短板。我个人习惯把它们分成三类:主动视觉型(相机)、主动测距型(激光雷达、毫米波雷达)、姿态感知型(IMU、GPS)

1. 相机:最像人眼,但怕黑怕雾

相机的工作原理,就是通过镜头把光线聚焦到CMOS或CCD感光元件上,生成图像。它提供的信息最丰富——颜色、纹理、语义(比如这是车、那是人)。

但相机有个致命弱点:它是被动传感器。没有光,它就瞎了。我在项目中遇到过夜间行车场景,纯视觉方案几乎失效,必须依赖雷达。

核心参数:

  • 分辨率:1920x1080、3840x2160等,越高细节越丰富
  • 帧率:30fps、60fps,越高运动捕捉越流畅
  • 视场角(FOV):水平、垂直角度,决定了“视野”范围
  • 动态范围:处理明暗差异的能力,比如隧道出入口

避坑指南:我曾经在标定相机时,忽略了镜头畸变。结果图像边缘的物体位置偏差了十几个像素,融合时直接导致目标匹配失败。记住:任何相机数据,必须先做畸变校正

2. 激光雷达:精度之王,但怕雨怕尘

激光雷达(LiDAR)通过发射激光束并测量反射时间,直接获取三维点云数据。它的精度极高,可以达到厘米级。我习惯把它叫做“空间扫描仪”。

但激光雷达也有短板:受天气影响大。大雨、大雾、扬尘环境下,激光会被散射或吸收,点云质量断崖式下降。

核心参数:

  • 线数:16线、32线、64线、128线,线数越多,垂直分辨率越高
  • 测距范围:通常0.3m~200m
  • 精度:±2cm~±5cm
  • 视场角:水平360°,垂直通常30°~40°

个人经验:我建议在融合时,把激光雷达的点云作为“真值”参考。因为它的空间精度最高,可以用来校正其他传感器的误差。

3. 毫米波雷达:全天候战士,但分辨率低

毫米波雷达发射毫米波段的电磁波,通过多普勒效应测量目标的速度和距离。它的最大优势是全天候工作——雨、雪、雾、尘,基本不受影响。

但毫米波雷达的分辨率很低,无法区分目标的具体形状。说白了,它只能告诉你“前方30米有个东西在动”,但说不清那是车还是人。

核心参数:

  • 工作频率:24GHz、77GHz、79GHz
  • 测距范围:0.2m~250m
  • 速度精度:±0.1km/h
  • 角度分辨率:通常3°~10°

避坑指南:我曾经遇到毫米波雷达的“多径反射”问题——雷达波打到地面或护栏上,反射回来形成虚假目标。后来我加了基于RCS(雷达散射截面)的滤波,才把虚警压下去。

4. IMU:惯性导航,短时精度高,但会漂移

IMU(惯性测量单元)包含加速度计和陀螺仪,测量物体的加速度和角速度。它不依赖外部信号,完全自主工作。短时间内的姿态和位置推算非常精准。

但IMU有个大问题:积分漂移。加速度积分一次得速度,再积分一次得位置。任何微小的测量误差,都会随时间累积放大。

核心参数:

  • 加速度计量程:±2g、±4g、±8g等
  • 陀螺仪量程:±250°/s、±500°/s等
  • 零偏稳定性:衡量漂移程度的关键指标

个人经验:我习惯把IMU和GPS做组合导航。GPS提供绝对位置修正,IMU提供高频姿态更新。两者互补,效果最好。

5. GPS:绝对位置,但精度有限

GPS(全球定位系统)通过接收卫星信号,计算接收机的三维位置。它的优点是提供绝对坐标,不会漂移。

但普通GPS的精度只有米级,无法满足自动驾驶的厘米级需求。所以现在主流方案是RTK-GPS(实时动态差分),精度可以到2~5cm。

核心参数:

  • 定位精度:普通GPS 2~5m,RTK-GPS 2~5cm
  • 更新频率:通常10Hz
  • 冷启动时间:30s~60s

避坑指南:GPS信号在城市峡谷、隧道、地下停车场会完全丢失。我曾经在测试时,车进了隧道,GPS直接“失联”,全靠IMU和轮速计撑着。所以永远不要依赖单一传感器

1.2 坐标系:统一“语言”才能对话

不同传感器采集的数据,都在各自的坐标系里。要把它们融合起来,必须统一到一个坐标系下。这就像不同国家的人开会,得先定好用哪种语言。

自动驾驶中常用的坐标系有5个:世界坐标系、车辆坐标系、传感器坐标系、图像坐标系、像素坐标系

1. 世界坐标系:全局地图的“锚点”

世界坐标系是固定不变的全局参考系。通常用ENU(东-北-天)NED(北-东-地)。GPS输出的经纬高,最终会转换到这个世界坐标系下。

说白了,世界坐标系就是“地球上的一个固定点”。所有车辆、行人、障碍物的绝对位置,都在这个世界坐标系里描述。

2. 车辆坐标系:车自己的“身体”

车辆坐标系的原点通常位于车辆后轴中心或质心。按照ISO 8855标准:

  • X轴:指向车辆前进方向
  • Y轴:指向车辆左侧(或右侧,不同标准有差异)
  • Z轴:指向车辆上方

我习惯把车辆坐标系叫做“车体坐标系”。所有传感器安装到车上后,都要先标定出它们相对于车辆坐标系的位姿。

3. 传感器坐标系:每个传感器的“小世界”

每个传感器都有自己的坐标系:

  • 相机坐标系:原点在光心,Z轴指向镜头前方,X轴向右,Y轴向下
  • 激光雷达坐标系:原点在激光发射中心,通常Z轴向上,X轴指向车头
  • 毫米波雷达坐标系:原点在雷达天线中心,Z轴向上,X轴指向雷达波束方向
  • IMU坐标系:原点在IMU芯片中心,通常与车辆坐标系对齐

个人经验:我建议在标定传感器时,先确认每个传感器的坐标系定义文档。不同厂商的坐标系定义可能不同,比如有的激光雷达Z轴向上,有的向下。搞反了,整个融合就全错了。

4. 图像坐标系:从3D到2D的“投影”

图像坐标系是相机成像平面上的二维坐标系。原点在图像中心(主点),单位是毫米或米。它描述了物理点在成像平面上的投影位置。

从相机坐标系到图像坐标系的转换,就是透视投影。公式很简单:

u = f * X / Z
v = f * Y / Z

其中f是焦距,(X, Y, Z)是相机坐标系下的点坐标,(u, v)是图像坐标系下的坐标。

5. 像素坐标系:计算机看到的“格子”

像素坐标系是图像在计算机内存中的表示。原点在图像左上角,单位是像素。u轴向右,v轴向下。

从图像坐标系到像素坐标系,就是一个缩放+平移

col = u / dx + cx
row = v / dy + cy

其中dx、dy是每个像素的物理尺寸,cx、cy是主点(图像中心)的像素坐标。

完整转换链路:

世界坐标系 → 车辆坐标系 → 传感器坐标系 → 图像坐标系 → 像素坐标系

每一步都是一个4x4的齐次变换矩阵。我习惯把它们写成链式乘法:

P_pixel = K * T_sensor_to_camera * T_vehicle_to_sensor * T_world_to_vehicle * P_world

其中K是相机内参矩阵,T是外参矩阵。

避坑指南:我曾经在写转换代码时,把矩阵乘法的顺序搞反了。记住:矩阵乘法不满足交换律。从世界到像素,一定是右乘的顺序:世界→车辆→传感器→图像→像素。顺序错了,结果天差地别。

1.3 实战建议:坐标系标定的“黄金法则”

好了,理论讲完了。我给大家总结几条实战中的“黄金法则”:

  1. 先标定,后融合:任何传感器数据,必须先做坐标系转换。不要偷懒。
  2. 统一基准:所有传感器都标定到车辆坐标系下。车辆坐标系就是“中央枢纽”。
  3. 验证闭环:标定完成后,找一个已知位置的目标,从世界坐标系一路转换到像素坐标系,看看投影位置对不对。这叫“闭环验证”。
  4. 记录参数:每次标定结果,都记录到配置文件中。我习惯用YAML格式,清晰易读。

最后说一句:坐标系转换是感知融合的“基本功”。你想想看,如果连这个都搞不定,后面的目标检测、跟踪、融合,全是白费功夫。所以,这一章的内容,我建议你反复看,直到闭着眼睛都能写出转换矩阵。

下一章,咱们聊聊相机标定——怎么把相机的内参和外参标定得又准又稳。到时候见!