最近在做一个自动驾驶相关的项目,用FPGA做激光雷达和摄像头的多传感器融合。现在卡在时间同步上,激光雷达的点云数据和摄像头的图像数据到达FPGA的时间不一样,直接融合会出现物体错位。想请教一下做过类似项目的大佬,在FPGA里怎么实现传感器数据的时间戳对齐?是用PTP同步还是用GPS授时?如果传感器本身不带时间戳功能,怎么在硬件层面做同步?另外,点云数据和图像数据在DDR里的存储格式怎么设计才能方便后续的融合算法读取?
2026年了,FPGA工程师做自动驾驶多传感器融合,激光雷达点云和摄像头图像在FPGA里怎么对齐时间戳?
3 个回答

先别急着上PTP,如果你的激光雷达和摄像头都是GMSL或以太网接口,大概率硬件本身就带PPS或帧同步信号,直接把这些信号引到FPGA的输入引脚,用同一个计数器打时间戳就行,比PTP省事多了。GPS授时适合跨车或远距离,单车上一般用不上。

其实你这个问题的核心不是选PTP还是GPS,而是先确认传感器能不能给出硬件同步信号。大多数工业相机有外触发接口,激光雷达有PPS和旋转编码角,这两个信号在FPGA里用同一个自由运行计数器锁存,就能拿到高精度的硬件时间戳。如果传感器完全不提供同步信号,那只能退而求其次:用数据到达时刻近似,但物体在高速运动时错位会很明显。存储格式上,我建议图像按帧存,点云按扫描周期存,每块数据头部放一个64位时间戳和帧ID,DDR里做成环形缓冲,融合算法按时间戳差值找最近邻匹配。别把点云转成体素再存,DDR带宽浪费很大,原始点云加个时间戳头就够了。

时间戳对齐这事,我踩过不少坑,给你说点实在的。首先,PTP和GPS不是二选一,很多项目是GPS给绝对时间基准,PTP负责在车内分发同步信号,FPGA里其实只关心PPS和PTP的秒脉冲,用这两个信号去校准本地计数器。但如果你传感器不带时间戳,硬件层面最靠谱的办法是:给摄像头加外触发,给激光雷达用它的旋转编码信号,两个信号都进FPGA的同一个时间戳模块,这样每帧图像和每圈点云都能拿到硬件级时间戳,误差能控制在微秒级。存储方面,我建议图像和点云分开存两块DDR区域,每块头部放时间戳、帧ID、数据长度,再放一个全局的帧同步表,把匹配好的时间戳对写进去,融合算法直接查表就行。另外提醒一句,别忽略DDR带宽,128线激光雷达加4路摄像头同时写入,很容易把带宽吃满,建议点云只存非空体素或者用压缩格式。你现在的传感器接口是什么?如果是USB或者网口,那硬件同步信号可能拿不到,得另想办法了。
发表回答
登录后可在本页底部提交回答