第四章 传感器接入与数据融合:摄像头、激光雷达、毫米波雷达、超声波雷达的接口与数据流

各位同学,今天我们聊聊传感器接入。这是域控制器最底层的活儿,也是最容易出坑的地方。

我常说一句话:传感器接不好,后面算法再牛也白搭。数据进不来,或者进来的是脏数据,整个系统就废了。今天我把四种主流传感器的接口和数据流拆开讲,结合我踩过的坑,希望能帮你少走弯路。

4.1 摄像头接口:GMSL 与 FPD-Link 的抉择

摄像头是自动驾驶的眼睛。目前主流接口就两个:GMSL(Maxim 家的)和 FPD-Link(TI 家的)。

我个人习惯用 GMSL,原因很简单——抗干扰能力强。车载环境电磁干扰大,GMSL 的同轴电缆能传 15 米以上,信号还稳。FPD-Link 也不错,但线缆要求高一些。

关键参数对比:

参数GMSLFPD-Link
最大传输距离15m+10m
线缆类型同轴电缆STP(屏蔽双绞线)
典型带宽6 Gbps4.16 Gbps
供电方式PoC(同轴供电)PoC

我在项目里遇到过一个问题:摄像头画面偶尔闪一下,查了三天,最后发现是 GMSL 解串器的电源纹波太大。嗯,这里要注意——PoC 供电的滤波电路一定要做好,不然画面抖动会让你怀疑人生。

4.2 激光雷达接口:以太网是主流

激光雷达的数据量比摄像头大得多。一个 64 线激光雷达,每秒能产生 1.3 亿个点。你想想看,用 CAN 或者 LVDS 根本扛不住。

所以现在主流方案是千兆以太网,甚至万兆。数据格式通常是 UDP 包,里面封装了点云数据。

避坑指南:我曾经遇到过激光雷达丢包的问题。排查后发现是交换机缓存太小,突发数据流把缓存撑爆了。建议用支持 802.1Q 优先级标记的交换机,给激光雷达数据打高优先级标签。

数据流大概是这样的:

激光雷达 → 以太网 PHY → MAC → DMA → 内存(点云缓冲区) → 预处理(滤波、降采样) → 融合模块

这里有个细节:时间戳。激光雷达的每个点云帧都要打上精确的时间戳,最好用 PTP(精确时间协议)同步。我见过一个项目,因为时间戳没对齐,融合出来的目标位置差了半米,直接导致急刹车误触发。

4.3 毫米波雷达接口:CAN-FD 与以太网并存

毫米波雷达的数据量不大,但实时性要求高。传统方案用 CAN,现在慢慢往 CAN-FD 和以太网过渡。

我个人建议:如果雷达只输出目标列表(比如 64 个目标),CAN-FD 就够了。但如果要输出原始点云(4D 成像雷达),那必须上以太网。

雷达类型推荐接口数据量典型延迟
传统 3D 雷达CAN-FD~500 bytes/帧< 10ms
4D 成像雷达千兆以太网~50 KB/帧< 20ms

数据流上,毫米波雷达有个特点:多普勒速度是直接测出来的,不像摄像头需要靠帧间差分算。所以融合时,毫米波的速度信息权重可以设高一些。

注意:毫米波雷达容易受多径反射干扰。我在高速上遇到过雷达把护栏当成静止车辆的情况。解决办法是加一个置信度阈值,低于 0.6 的目标直接丢弃。

4.4 超声波雷达接口:简单但别轻视

超声波雷达看起来最简单,就 4 根线:VCC、GND、Trigger、Echo。但说实话,它是最容易出问题的传感器

为什么?因为超声波是靠声波反射测距的,环境噪声、温度、湿度都会影响精度。我建议用I2C 或 UART 接口的智能超声波雷达,内部自带温度补偿和滤波算法,省心很多。

数据流很简单:

超声波雷达 → GPIO/UART → 中断服务程序 → 距离值队列 → 融合模块

这里有个坑:多个超声波雷达同时发射会串扰。我曾经遇到过倒车时雷达乱叫,就是因为左右两个雷达的声波互相干扰。解决办法是分时触发,或者用不同频率的探头。

4.5 数据融合:时间同步与空间对齐

传感器数据都进来了,接下来就是融合。说白了就两件事:时间上对齐,空间上对齐

4.5.1 时间同步

我习惯用硬件时间戳。每个传感器数据进来时,由 FPGA 或 MCU 打上全局时间戳。这样即使数据到达 CPU 时有延迟,也能知道它是什么时候产生的。

举个例子:

// 伪代码示意
struct sensor_data {
    uint64_t timestamp;  // 硬件时间戳,单位 us
    uint8_t  sensor_id;
    uint8_t  data_type;  // 0: camera, 1: lidar, 2: radar, 3: ultrasonic
    union {
        image_t    img;
        pointcloud_t pc;
        radar_target_t targets[64];
        uint16_t   distance;
    } data;
};

4.5.2 空间对齐

不同传感器的坐标系不一样。摄像头是像素坐标系,激光雷达是三维笛卡尔坐标系,毫米波雷达是极坐标系。

我建议在车辆坐标系下做融合。车辆坐标系的原点通常在后轴中心,X 轴朝前,Y 轴朝左,Z 轴朝上。

转换公式不复杂,但标定参数一定要准。我记得有一次,激光雷达的安装角度偏了 0.5 度,融合出来的目标位置就偏了 30 厘米。嗯,标定这事,真的不能马虎。

4.6 实战经验:数据流架构设计

最后分享一个我常用的数据流架构:

  1. 传感器层:各传感器通过专用接口接入
  2. 预处理层:在 FPGA 或 MCU 上做数据解析、时间戳打标、初步滤波
  3. 传输层:通过 PCIe 或以太网将数据传给主 SoC
  4. 融合层:在 SoC 上做时间同步、空间对齐、目标级融合
  5. 输出层:输出融合后的目标列表给规划控制模块

核心原则:能早处理的数据,不要拖到后面。比如激光雷达的离群点滤波,在 FPGA 上做比在 CPU 上做快 10 倍。

好了,这一章就讲到这里。传感器接入看似基础,但决定了整个系统的上限。下一章我们聊聊计算单元——GPU、NPU、FPGA 怎么分工协作。