第四章 传感器接入与数据融合:摄像头、激光雷达、毫米波雷达、超声波雷达的接口与数据流
各位同学,今天我们聊聊传感器接入。这是域控制器最底层的活儿,也是最容易出坑的地方。
我常说一句话:传感器接不好,后面算法再牛也白搭。数据进不来,或者进来的是脏数据,整个系统就废了。今天我把四种主流传感器的接口和数据流拆开讲,结合我踩过的坑,希望能帮你少走弯路。
4.1 摄像头接口:GMSL 与 FPD-Link 的抉择
摄像头是自动驾驶的眼睛。目前主流接口就两个:GMSL(Maxim 家的)和 FPD-Link(TI 家的)。
我个人习惯用 GMSL,原因很简单——抗干扰能力强。车载环境电磁干扰大,GMSL 的同轴电缆能传 15 米以上,信号还稳。FPD-Link 也不错,但线缆要求高一些。
关键参数对比:
| 参数 | GMSL | FPD-Link |
|---|---|---|
| 最大传输距离 | 15m+ | 10m |
| 线缆类型 | 同轴电缆 | STP(屏蔽双绞线) |
| 典型带宽 | 6 Gbps | 4.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 实战经验:数据流架构设计
最后分享一个我常用的数据流架构:
- 传感器层:各传感器通过专用接口接入
- 预处理层:在 FPGA 或 MCU 上做数据解析、时间戳打标、初步滤波
- 传输层:通过 PCIe 或以太网将数据传给主 SoC
- 融合层:在 SoC 上做时间同步、空间对齐、目标级融合
- 输出层:输出融合后的目标列表给规划控制模块
核心原则:能早处理的数据,不要拖到后面。比如激光雷达的离群点滤波,在 FPGA 上做比在 CPU 上做快 10 倍。
好了,这一章就讲到这里。传感器接入看似基础,但决定了整个系统的上限。下一章我们聊聊计算单元——GPU、NPU、FPGA 怎么分工协作。