2. 相机成像链路与时间延迟分析
在多相机同步实验中,我们真正关心的往往不是“相机什么时候收到触发”,而是“光子打到传感器上到这一帧数据进入主机内存,究竟花了多长时间”。这条从光到数据的路径就是成像链路。它由曝光、读出、传输、处理四个环节串联而成,每个环节都会引入延迟,而且延迟的性质并不相同:有的是固定偏置,有的是随帧率、分辨率、温度变化的动态量,还有的是随机抖动。同步工程的核心任务,就是把这些延迟拆开、量化,再决定哪些可以标定补偿,哪些必须靠硬件对齐。
一、链路延迟的四个环节
先建立统一的参照约定:本文所有延迟均以“触发信号到达相机触发输入端”为时间零点,向前追溯到曝光开始,向后延伸到主机收到完整帧。延迟为正表示事件发生在零点之后。
曝光环节的延迟主要来自触发到曝光真正开始之间的内部时序。全局快门传感器在收到触发后需要等待行消隐、完成上一帧读出、再打开所有像素的曝光窗口,这段等待通常为几微秒到几十微秒。卷帘快门则更复杂:触发只决定第一行的曝光起点,后续行按行周期依次开始,因此不同行的曝光起点相差一个帧读出时间。若曝光时间设为 T_exp,卷帘快门的“有效曝光中心”会随行号移动,这在多相机对齐时必须按行建模。
读出环节的延迟由像素阵列逐行读出决定。对 CMOS 传感器,读出时间近似为 T_read ≈ H × T_row,其中 H 为有效行数,T_row 为行周期。例如一台 2048 行、行周期 10 μs 的相机,读出时间约 20.5 ms。提高帧率本质上是压缩行周期,但会抬高读出噪声并增加功耗。部分相机支持 ROI(感兴趣区域)裁剪,把 H 降到 512 行,读出时间可缩短到约 5.1 ms,这是同步实验中常用的降延迟手段。
传输环节的延迟取决于接口类型与链路负载。GigE Vision 的传输延迟包含协议封装、交换机排队和网卡中断,典型值为 0.5~3 ms,且随网络拥塞波动;USB3 Vision 通常为 0.2~1 ms;CoaXPress 与 Camera Link 使用专用采集卡,延迟可压到几十微秒,抖动也小得多。传输延迟的量化不能只看标称带宽,必须实测端到端时间戳差。
处理环节包括主机侧驱动缓冲、SDK 回调、图像预处理(去马赛克、伽马、压缩)以及应用层入队。这一段的延迟最容易被忽视,却常常是抖动的主要来源:操作系统调度、内存拷贝、GPU 上传都会引入毫秒级甚至十毫秒级的随机延迟。
二、延迟的量化方法
量化延迟不能靠猜,需要可追溯的测量手段。最直接的是示波器双通道法:通道一接相机触发输入,通道二接同步闪光灯或相机的曝光使能(Strobe)输出,两者时间差即为“触发到曝光开启”的偏置。若相机没有曝光使能输出,可用高速光电二极管对准传感器平面,捕捉实际曝光窗口。
对于读出时间,优先读取相机内部时间戳寄存器。多数工业相机提供 Timestamp 与 FrameStart/FrameEnd 事件,两者之差就是读出与内部传输的合计时间。若相机不支持,可用固定频率的 LED 频闪配合已知曝光时间,通过图像亮度变化反推行周期。
传输延迟的量化依赖时间同步。在启用 PTP(IEEE 1588)的 GigE 网络中,相机与主机共享同一时钟,相机在帧头写入发送时间戳,主机在收包时记录到达时间戳,两者之差即为传输延迟。建议连续采集 500~1000 帧,计算均值 μ 和标准差 σ。μ 用于补偿,σ 用于判断同步是否达标。经验上,若 σ 超过帧周期的 5%,就应检查交换机队列、网卡中断合并和 CPU 亲和性设置。
处理延迟最难量化,因为它发生在软件栈内部。可行做法是在 SDK 回调入口和图像入队处各打一个高精度时间戳,两者之差即为处理延迟。需要注意,这个值受操作系统调度影响很大,建议在关闭 CPU 节能、绑定核心、提高进程优先级后测量,否则测到的是“最坏情况”而非“典型情况”。
三、一个可复用的延迟预算表
把上述环节整理成延迟预算表,是同步方案设计中最实用的交付物。下表以一台 2048×2048、行周期 10 μs、GigE 接口的相机为例,参数为教学示例,实际值需以实测为准。
| 环节 | 延迟来源 | 示例值 | 性质 | 量化手段 |
|---|---|---|---|---|
| 曝光偏置 | 触发→曝光开启内部时序 | 25 μs | 固定 | 示波器双通道 |
| 读出 | H × T_row | 20.5 ms | 固定(随 ROI 变) | 时间戳寄存器 |
| 传输 | 协议封装 + 交换机排队 | 1.2 ms ± 0.4 ms | 均值 + 抖动 | PTP 收发时间戳 |
| 处理 | 驱动缓冲 + SDK 回调 + 预处理 | 3.5 ms ± 1.8 ms | 随机 | 软件打点统计 |
| 合计 | 触发到主机可用帧 | ≈25.2 ms | — | — |
四、从延迟分析到同步决策
完成量化后,延迟被分成两类:可补偿的确定性延迟(曝光偏置、读出时间、传输均值)和不可完全消除的随机抖动(传输排队、处理调度)。前者可以通过在触发时序中提前发出、或在软件中按帧号偏移来对齐;后者只能通过硬件改造和系统调优来压缩。一个常见的误区是把所有延迟都当成固定值去补偿,结果在负载变化时同步精度急剧下降。
因此,实际工程中建议按以下顺序推进:先用示波器确认曝光偏置是否稳定;再用时间戳统计读出与传输的均值和标准差;最后在真实负载下测量处理延迟的分布。只有当抖动被压到目标精度以下,才进入多相机联合标定阶段。否则,标定出来的外参会在不同帧率、不同分辨率下失效。
需要特别提醒的是,卷帘快门相机的“行相关延迟”不能用一个标量表示。若两台卷帘相机安装方向不同,同一物理时刻在不同行上的曝光起点不同,直接按帧头对齐会产生随行号变化的几何误差。此时应优先选用全局快门,或在标定中引入行时间模型。
总结来看,成像链路延迟分析的本质是把一个黑盒拆成四个可测量的环节,再用均值和标准差描述每个环节。曝光偏置和读出时间相对稳定,适合补偿;传输和处理抖动较大,适合压缩和监控。只有把这条链路量化清楚,后续的多相机同步才有可依赖的基准。