4. 软件触发与时间戳同步

在多相机实验成像系统中,硬件触发(如共用外触发信号)能提供纳秒级的同步精度,但并非所有相机都支持硬件触发,或者实验场景要求相机以不同时刻、不同曝光参数独立采集。此时,软件触发与时间戳同步就成为必要的补充手段。本节讨论如何通过API触发相机采集,利用系统时钟、PTP/NTP协议为每帧图像打上时间戳,并完成时间戳对齐与误差评估。

一、软件触发的API实现方式

主流工业相机厂商(Basler、FLIR、海康机器人、大恒图像等)均提供SDK,允许通过API以软件命令方式触发一次曝光。以Basler pylon SDK为例,典型流程如下:

// 伪代码示例:Basler pylon 软件触发
CInstantCamera camera(CTlFactory::GetInstance().CreateFirstDevice());
camera.Open();
camera.TriggerMode.SetValue(TriggerMode_On);
camera.TriggerSource.SetValue(TriggerSource_Software);
camera.StartGrabbing(GrabStrategy_OneByOne);

// 发送软件触发命令
camera.ExecuteSoftwareTrigger();

// 获取图像及时间戳
CGrabResultPtr ptrGrabResult;
camera.RetrieveResult(5000, ptrGrabResult, TimeoutHandling_ThrowException);
uint64_t ts = ptrGrabResult->GetTimeStamp();

不同厂商API的触发函数名不同(如FLIR Spinnaker为TriggerSoftware,海康MVS为MV_CC_TriggerSoftwareExecute),但核心逻辑一致:设置触发模式为On、触发源为Software,然后调用执行函数。软件触发的延迟通常在毫秒到数十毫秒量级,且受操作系统调度、USB/网口传输、SDK内部队列影响,因此软件触发本身不适合作为高精度同步手段,它的价值在于配合时间戳实现“事后对齐”。

二、系统时钟与时间戳来源

每帧图像的时间戳可能来自三个层级:

  • 相机内部时钟:相机传感器曝光时刻由内部晶振计数,精度高但各相机独立,长时间运行会漂移。
  • 主机系统时钟:SDK在接收到图像时读取主机QueryPerformanceCounter或clock_gettime,受传输延迟影响,时间戳滞后于真实曝光时刻。
  • 外部统一时钟:通过PTP(IEEE 1588)或NTP将各设备时钟同步到同一时间基准,相机或主机时间戳均映射到该基准。

实际工程中,若相机支持PTP,应优先启用相机端PTP并让相机在曝光时刻打硬件时间戳;若相机不支持PTP,则退而求其次,在主机端接收图像时打时间戳,并通过NTP保证各主机时钟一致。

三、PTP与NTP的适用场景

NTP(Network Time Protocol)通常能达到毫秒级同步精度(局域网内1~10 ms),实现简单,适合对同步要求不苛刻的多主机场景。PTP(Precision Time Protocol)在支持硬件时间戳的网卡和交换机配合下,可达亚微秒甚至纳秒级精度,是机器视觉、运动控制领域的首选。

启用PTP的典型步骤(以Linux为例):

# 查看网卡是否支持硬件时间戳
ethtool -T eth0

# 安装并启动ptp4l与phc2sys
sudo ptp4l -i eth0 -m -s
sudo phc2sys -s eth0 -c CLOCK_REALTIME -w

相机端需在SDK中启用PTP并等待状态变为Slave或Master,确认PtpStatus为Ready后再开始采集。若PTP未锁定就采集,时间戳将不可信。

四、时间戳对齐方法

假设有两台相机A和B,各自输出带时间戳的帧序列。对齐的目标是找到同一物理时刻在两组序列中的对应帧。常用方法有两种:

  1. 最近邻匹配:对A的每一帧时间戳,在B中查找时间差最小的帧。适用于帧率较高、事件稀疏的场景。
  2. 插值对齐:若相机输出的是帧起始时间戳,而实际曝光中心时刻需要加上半曝光时间,则先修正为曝光中心时刻,再按时间轴线性插值。适用于需要连续轨迹分析的场景。

对齐前必须统一时间基准。若A用PTP时间、B用主机NTP时间,需先通过phc2sys或时间偏移量将两者归算到同一时钟域。

五、误差评估指标

同步误差评估通常关注以下指标:

指标含义典型目标
时间戳偏差同一事件在两相机时间戳之差< 1 ms(NTP)/ < 100 μs(PTP)
抖动(Jitter)偏差的标准差< 200 μs
漂移(Drift)长时间运行后偏差的累积变化< 1 ms/h
丢帧率触发后未成功采集的帧比例< 0.1%

评估方法:使用LED闪烁或运动靶标作为共同事件,记录两相机时间戳,计算偏差序列的均值、标准差和随时间的变化趋势。若偏差均值稳定但标准差大,说明触发抖动大;若均值随时间线性增长,说明时钟漂移未补偿。

建议在实验开始前运行5~10分钟的同步测试,采集至少1000对时间戳,绘制偏差直方图和漂移曲线,确认满足实验要求后再开始正式采集。

六、典型配置示例

以下是一个双相机软件触发+时间戳同步的配置清单,供参考:

项目配置
相机型号Basler acA1920-40gc × 2
触发方式软件触发,由主机统一发送
时间同步PTP(主时钟为交换机)
时间戳来源相机端硬件时间戳(PTP时间)
曝光时间5000 μs
帧率10 fps
对齐方法曝光中心时刻最近邻匹配
误差目标偏差 < 200 μs,抖动 < 100 μs

在该配置下,主机通过API依次向两台相机发送软件触发命令,命令间隔约50 μs(受主机调度影响)。由于PTP已将两相机时钟同步到同一基准,每帧图像携带的硬件时间戳可直接比较。若发现偏差超过目标,应检查PTP锁定状态、网络交换机是否支持透明时钟、以及相机固件是否开启硬件时间戳功能。

软件触发与时间戳同步链路 主机 / 控制软件 API触发命令 NTP/PTP客户端 PTP交换机 IEEE 1588 透明时钟 主时钟源 相机 A PTP Slave 硬件时间戳 曝光中心时刻 相机 B PTP Slave 硬件时间戳 曝光中心时刻 触发命令 触发 触发 PTP同步 时间戳回传 时间戳对齐与误差评估 ① 统一时间基准(PTP/NTP) ② 曝光中心时刻修正 ③ 最近邻/插值匹配 ④ 偏差、抖动、漂移统计 误差评估指标 偏差 < 200 μs 抖动 < 100 μs 漂移 < 1 ms/h 软件触发提供采集命令,PTP/NTP提供统一时钟,时间戳对齐实现事后同步

总结来说,软件触发与时间戳同步的核心在于:用API触发解决“何时采集”的问题,用PTP/NTP解决“时钟一致”的问题,用时间戳对齐解决“帧对应”的问题,最后用偏差、抖动、漂移三个指标评估同步质量。四者缺一不可,共同构成软件同步的完整闭环。