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 工控机 (Ubuntu + ROS2) GPIO输出同步脉冲 激光雷达 (以太网) 摄像头 (GMSL) IMU (串口) NVMe SSD (2TB) ext4, noatime 图例: 时钟源 控制中心 传感器 存储设备 同步信号 数据流

这张图里,GPS模块提供PPS信号给工控机,工控机内部维护一个高精度时钟,并通过GPIO输出多路同步脉冲。每个传感器在收到脉冲的瞬间开始采集,数据通过各自接口(以太网、GMSL、串口)传回工控机,最终写入NVMe SSD。整个系统的时间基准统一,数据流清晰,后期处理起来非常顺畅。

最后说一句:硬件环境搭建好了,数据录制就成功了一半。剩下的就是写录制程序、做数据校验、设计存储格式——这些咱们后面几章会详细讲。别急,一步一步来。

可可精品资料库