3、数据录制硬件环境搭建:传感器选型、同步时钟(GPS/PTP)、工控机与存储设备选型
做传感器数据录制,硬件选型是第一步,也是决定成败的一步。我见过太多项目,算法模型调得漂漂亮亮,结果一上实车数据就崩——回头一查,是传感器时钟没对齐,或者存储带宽不够丢帧了。说白了,硬件底子没打好,上层再努力也白搭。
这一章,咱们就聊聊怎么搭一套靠谱的录制硬件环境。我会从传感器选型、时钟同步、工控机配置、存储方案四个维度展开。嗯,都是我在项目里踩过坑之后总结出来的经验。
3.1 传感器选型:别光看参数,要看匹配度
传感器选型,我个人的习惯是「三看」:看场景、看接口、看同步能力。
看场景——你是做自动驾驶,还是做工业检测?自动驾驶需要激光雷达+摄像头+毫米波雷达的组合;工业检测可能只需要高帧率相机+IMU。场景决定了传感器的「质」和「量」。
看接口——这往往是新人容易忽略的点。举个例子,你选了一款千兆网口的激光雷达,但工控机只有百兆网口,那数据根本传不过来。我建议优先选以下接口:
- 摄像头:GMSL(车载)、USB3.0(桌面)、Camera Link(工业高速)
- 激光雷达:以太网(UDP/TCP)、CAN
- IMU/GPS:UART(串口)、SPI
- 毫米波雷达:CAN/CAN FD、以太网
看同步能力——这个我单独拿出来说。传感器必须支持硬件触发(Hardware Trigger)或PPS(秒脉冲)输入。为什么?因为软件时间戳的精度通常在毫秒级,而硬件同步可以做到微秒甚至纳秒级。我在一个项目中用过一款不支持硬件触发的摄像头,结果每帧时间戳抖动达到±5ms,后期融合算法怎么调都调不好。后来换了支持GMSL触发功能的相机,问题迎刃而解。
核心原则:所有传感器必须支持统一的硬件同步接口。要么都支持PPS+GPIO触发,要么都支持PTP(精确时间协议)。混用不同同步方式的传感器,会让你后期对齐数据时痛不欲生。
3.2 同步时钟:GPS与PTP,谁才是主角?
时钟同步是数据录制的灵魂。你想想看,激光雷达说「我在T1时刻看到障碍物」,摄像头说「我在T2时刻拍到同一位置」,如果T1和T2对不上,那融合出来的结果就是错的。
目前主流的同步方案有两种:GPS授时和PTP网络同步。我分别说说。
3.2.1 GPS授时:简单粗暴,精度够用
GPS模块输出PPS(秒脉冲)信号,精度可达±50ns。工控机通过串口读取NMEA语句获取UTC时间,同时用PPS信号来校准本地时钟。
具体接线方式:
- GPS模块的PPS引脚 → 工控机的GPIO(中断引脚)
- GPS模块的TX → 工控机的RX(串口)
- 所有传感器的Trigger输入 → 工控机GPIO输出的同步脉冲
我在项目中常用的做法是:用GPS的PPS信号触发一个单片机(比如STM32),由单片机产生多路同步脉冲,分别送给激光雷达、摄像头和IMU。这样所有传感器都在同一个硬件脉冲沿上开始采集,时间戳天然对齐。
小技巧:GPS天线一定要放在室外,或者至少放在能接收到天空信号的位置。我曾经把天线贴在工控机机箱内部,结果搜星数一直为0,折腾了半天才发现是金属机箱屏蔽了信号。
3.2.2 PTP网络同步:布线简单,但依赖网络
PTP(IEEE 1588)协议可以在以太网内实现亚微秒级的时间同步。所有支持PTP的设备(如某些工业相机、激光雷达)通过交换机的PTP功能自动对齐时钟。
PTP的优点是布线简单——一根网线搞定数据和时钟。但缺点也很明显:
- 需要PTP交换机(普通交换机不行,时钟抖动太大)
- 网络负载高时,同步精度会下降
- 不支持非以太网设备(如串口IMU)
我个人建议:如果传感器数量少(≤5个)且都支持PTP,可以用PTP方案;如果传感器种类杂、数量多,还是老老实实用GPS+硬件触发。
注意:GPS和PTP不要混用!我见过有人给激光雷达用PTP同步,给摄像头用GPS触发,结果两个时钟源之间存在固定偏移,后期还得做额外的标定。统一同步方案,能省掉80%的麻烦。
3.3 工控机选型:算力、接口、稳定性
工控机是数据录制的大脑。选型时我重点关注三个维度:
| 维度 | 要求 | 我的建议 |
|---|---|---|
| CPU算力 | 至少i7或同等性能 | 推荐Intel Core i7-12代以上,或AMD Ryzen 7 |
| 内存 | ≥32GB | 64GB更稳妥,尤其是同时录制多路传感器时 |
| 接口数量 | 满足传感器连接需求 | 至少4个USB3.0、2个千兆网口、2个串口、GPIO |
| 扩展性 | 支持PCIe扩展 | 预留一个PCIe插槽,方便加装采集卡 |
| 散热 | 无风扇设计优先 | 车载环境震动大,有风扇容易坏 |
我踩过的一个坑:有次选了一款工控机,CPU性能很强,但只有2个USB口。结果接了激光雷达、摄像头、IMU之后,USB口不够用,只能外接HUB。HUB一接,带宽共享,摄像头帧率直接掉了一半。所以接口数量一定要提前算好,留出余量。
另外,工控机的操作系统我推荐Ubuntu 20.04 LTS或22.04 LTS。为什么?因为ROS/ROS2对Ubuntu支持最好,驱动也最全。Windows虽然也能用,但实时性差一些,而且很多传感器驱动只有Linux版本。
3.4 存储设备选型:速度、容量、可靠性
数据录制对存储的要求,说白了就三个字:快、大、稳。
3.4.1 存储速度
多路传感器同时写入,对磁盘的IOPS和顺序写入速度要求很高。我算过一笔账:
- 1路1080p 30fps摄像头:约50MB/s
- 1路64线激光雷达:约30MB/s
- 1路IMU 200Hz:约1MB/s
- 合计:如果同时录制4路摄像头+2路激光雷达,总带宽约260MB/s
所以存储介质必须选NVMe SSD,顺序写入速度至少2000MB/s。SATA SSD(约500MB/s)根本扛不住多路并发。
3.4.2 存储容量
容量取决于录制时长。按上面的带宽计算:
- 1小时数据量:260MB/s × 3600s ≈ 936GB ≈ 1TB
- 8小时数据量:约8TB
我建议至少配2块2TB的NVMe SSD,一块用于录制,一块用于备份。或者用RAID 0阵列提升写入速度,但要注意RAID 0没有冗余,坏一块盘数据全丢。
我的推荐方案:2TB NVMe SSD(主存储)+ 4TB SATA SSD(冷备份)。录制时数据写入NVMe,录制结束后自动同步到SATA盘。这样既保证了录制速度,又有了数据冗余。
3.4.3 文件系统与格式化
文件系统我推荐ext4或XFS。不要用NTFS(Linux下性能差),也不要用FAT32(单文件最大4GB,录个视频就超了)。
格式化时注意:
- 块大小(block size)设为4096字节,适合大文件连续写入
- 挂载时加上noatime参数,减少不必要的磁盘写入
# 格式化示例
sudo mkfs.ext4 -b 4096 /dev/nvme0n1
# 挂载示例
sudo mount -o noatime /dev/nvme0n1 /mnt/data
3.5 整体架构图
下面这张图展示了我常用的数据录制硬件架构。核心思路是:GPS提供绝对时间基准,工控机负责生成同步触发信号,所有传感器在同一个硬件脉冲下采集数据,最终统一写入NVMe SSD。
这张图里,GPS模块提供PPS信号给工控机,工控机内部维护一个高精度时钟,并通过GPIO输出多路同步脉冲。每个传感器在收到脉冲的瞬间开始采集,数据通过各自接口(以太网、GMSL、串口)传回工控机,最终写入NVMe SSD。整个系统的时间基准统一,数据流清晰,后期处理起来非常顺畅。
最后说一句:硬件环境搭建好了,数据录制就成功了一半。剩下的就是写录制程序、做数据校验、设计存储格式——这些咱们后面几章会详细讲。别急,一步一步来。