第三章 实车数据采集:数据采集系统架构、传感器选型与总线记录

大家好,我是老张。今天咱们聊聊实车数据采集。说实话,这活儿看着简单,不就是装几个传感器、接几根线嘛?但我在项目里踩过的坑,十个手指头都数不过来。数据采不准,后面所有仿真验证都是白搭。所以这一章,咱们把底层的架构和选型逻辑彻底捋清楚。

3.1 数据采集系统架构:从传感器到硬盘的完整链路

先看整体架构。我习惯把采集系统分成三层:感知层、传输层、存储层。

核心原则:数据流必须单向、低延迟、无丢包。任何环节的瓶颈都会污染最终数据。

感知层 GPS/IMU 组合导航 摄像头(前/侧/环视) 毫米波雷达 / 激光雷达 CAN/LIN 总线监听 传输层 数据采集工控机 时间同步模块(PTP/GPPS) 数据预处理(滤波/压缩) 实时监控 & 异常报警 存储层 SSD 固态硬盘(RAID 0) 原始数据(.bag / .mdf) 标定参数 & 日志文件 备份 & 远程上传 以太网 USB 3.0 / 万兆网

嗯,这张图我画了好几个版本。你想想看,感知层负责采集原始信号,传输层做时间同步和初步处理,存储层保证数据不丢。每一层都有讲究。

3.2 传感器选型:别只看参数,要看场景

选传感器这事儿,我吃过不少亏。有一次为了省钱,买了个低成本的GPS模块,结果在城市峡谷里定位飘了十几米,整个数据集全废了。所以我的建议是:先定场景,再定参数,最后看价格。

3.2.1 GPS/IMU 组合导航

参数 入门级 工业级 我的建议
定位精度 2.5m CEP 0.02m RTK 做车道级仿真必须RTK
IMU 零偏稳定性 10°/h 0.1°/h 低于1°/h才能做航位推算
输出频率 10Hz 100Hz 至少50Hz,否则插值误差大
典型型号 u-blox M9 NovAtel PwrPak7 预算够直接上工业级

小技巧:我习惯在采集前先让GPS冷启动5分钟,等星历稳定了再开始。这样能减少初始定位的跳变。

3.2.2 摄像头

摄像头选型主要看三点:分辨率、帧率、动态范围。我个人习惯用1920x1080 @ 30fps作为底线。为什么?因为低于这个规格,在高速场景下运动模糊会非常严重。另外,一定要选全局快门(Global Shutter),卷帘快门在车辆颠簸时画面会扭曲,后期标定都救不回来。

3.2.3 雷达

毫米波雷达和激光雷达,我建议根据场景二选一:

  • 毫米波雷达:适合远距离、全天候。但点云稀疏,做目标检测还行,做环境重建不够用。
  • 激光雷达:点云密集,能建高精地图。但下雨天性能下降明显,而且贵。

我在一个项目中试过用16线激光雷达做感知,结果雨天数据噪声大到没法用。后来老老实实加了毫米波雷达做冗余。

3.3 CAN/LIN 总线数据记录

总线数据是车辆内部状态的「黑匣子」。方向盘转角、车速、油门开度、刹车压力……这些信号都在CAN/LIN总线上跑。记录它们,才能把传感器数据和车辆状态对齐。

3.3.1 硬件选型

我推荐用PCAN-USB FD或者Kvaser Leaf Light。这两个我都用过,稳定性没得说。注意一点:一定要支持CAN FD,现在新车基本都是CAN FD了,老设备只能抓标准CAN,会漏掉很多数据。

3.3.2 软件配置

以PCAN为例,我常用的配置脚本:

# 初始化CAN接口
sudo ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on
sudo ip link set can0 up

# 抓取所有报文并保存为ASC格式
candump can0 -l -e -T 1000 > vehicle_data.asc

# 同时记录时间戳(微秒级)
candump can0 -l -e -t a > vehicle_data_timestamped.asc

注意:我曾经犯过一个低级错误——忘记设置正确的波特率。结果抓了一整天数据,回来一看全是乱码。所以采集前一定要用示波器或者CAN分析仪确认总线波特率。

3.3.3 DBC 文件的重要性

光有原始报文没用,你得知道每个字节代表什么。DBC文件就是CAN总线的「翻译官」。我建议在采集前就把DBC文件准备好,并且用Vector CANdb++校验一遍。有一次我发现某个信号的起始位定义错了,导致解析出来的车速一直是0。嗯,这种坑踩一次就够了。

3.4 时间同步:所有数据的「共同语言」

这是整个采集系统里最容易出问题的地方。GPS、IMU、摄像头、CAN总线,每个设备都有自己的时钟。如果不做同步,你拿到的数据就是「鸡同鸭讲」。

我的做法是:用GPS的PPS脉冲作为全局时间基准。所有设备都通过PTP(精确时间协议)或者硬件触发线对齐到这个脉冲上。具体来说:

  1. GPS接收机输出PPS信号(1Hz)和NMEA报文
  2. 工控机通过GPIO口捕获PPS上升沿,校准系统时钟
  3. 摄像头通过外触发线接收PPS,保证每帧图像的时间戳准确
  4. CAN接口卡通过硬件时间戳记录报文到达时刻

经验之谈:我见过最离谱的案例,是有人用软件时间戳去对齐摄像头和CAN数据。结果因为系统调度延迟,两个数据源的时间差能到50ms。对于时速100km/h的车,50ms意味着1.4米的位移误差。你说这仿真还能做吗?

3.5 数据质量检查:采集完别急着收工

数据采完了,别急着拔线走人。我习惯在现场做三件事:

  • 检查丢包率:CAN报文有没有丢?GPS有没有失锁?摄像头有没有掉帧?
  • 检查时间戳连续性:相邻两帧的时间差是否稳定?有没有跳变?
  • 快速回放:用工具把数据回放一遍,看看画面和总线信号是否对应得上。

这三步做完,数据才算「合格」。否则回到实验室发现数据有问题,再跑一趟路试的成本可就高了。

好了,这一章的内容就这些。实车数据采集是仿真验证的「地基」,地基不稳,上面盖的房子再漂亮也没用。希望我的这些经验能帮你少走弯路。