资讯动态

机器视觉多相机同步:触发模式与 GigE Vision 时序

发布时间:2026/10/3 7:16:35 来源:尧图企业网站定制
机器视觉多相机同步:触发模式与 GigE Vision 时序一、从一个"幽灵缺陷"说起前年在一家精密结构件厂做产线升级,遇到过一个至今印象深刻的故障。产线上并排架了三台相机:顶部一台面阵相机测外形尺寸,侧面一台线扫相机测轮廓,还有一台近红外相机做内部缺陷筛查。三路图像汇总到同一个工控机,由一套算法做联合判定。问题出得很邪门:宽度测量偶尔会判出根本不存在的"尺寸超差",复现率不到千分之一,但每天总有几个。工程师第一反应是算法不稳,于是换模型、调阈值、加滤波,折腾了两周毫无进展。后来我们把三路图像按帧存下来逐帧比对,才发现了真相——这三台相机的图像,压根不是同一个瞬间的世界。测尺寸的那台相机处于自由运行模式,它的曝光时刻与产线节拍完全无关;在它的曝光窗口里,工件早就移动了一段距离。算一笔账就明白了:皮带线速度 0.5 m/s,相机帧率 30 fps,帧间隔约 33 ms,工件在相邻两帧之间移动了16.5 mm。而这条产线的尺寸公差要求是 ±0.05 mm。两者的量级差了三百倍,也就是说,即便算法完美,测量结果也会因为图像不同步而产生几百倍于公差的随机误差。换成硬触发、让三台相机由同一个光电开关同时触发之后,这个"幽灵缺陷"当天就消失了。这个案例说明了一件事:多相机视觉系统的第一性问题,不是算法,而是"这几张图到底是不是同一个瞬间"。这个问题在单相机、静态场景下永远不会暴露,可一旦进入多相机、运动、高节拍的产线,它立刻成为系统性误差的最大来源。本文想认真谈谈图像采集同步这件事——触发模式的语义、GigE Vision 的时序机制、多相机同步的几种工程方案,以及我自己踩过的坑。二、采集链路的时间模型要谈同步,先把一张图从"光子击中传感器"到"变成主机内存里的数组"这条路径拆开看。一次完整的成像大致经历四个阶段:第一是曝光,传感器积分光电荷,时长由ExposureTime决定;第二是读出,逐行或逐帧把电荷转换为数字量;第三是传输,数据经 GigE、USB3 或 CoaXPress 链路送到主机;第四是主机接收与打时间戳。关键在于,你在主机上"拿到图像"的时刻,与光子真正打到传感器上的时刻,中间差了整条链路的耗时。更麻烦的是,这个差值不是常数——它随负载、随包大小、随操作系统调度而抖动,而抖动的部分正是同步问题的根源。下表把主要的误差来源和量级列清楚。误差来源典型量级性质能否补偿触发信号抖动 (jitter)1–50 µs随机硬件同步可压到 1 µs相机内部"触发→曝光"延迟5–100 µs固定+抖动固定部分可用 TriggerDelay 对齐曝光时间不一致取决于配置系统性配置对齐即可消除链路传输延迟0.1–5 ms随包大小/负载变化难以可靠补偿主机接收时间戳10 µs–10 ms随 OS 调度抖动改用相机内部时间戳多相机时钟漂移10–100 ppm累积性PTP 可同步到亚微秒这张表里最容易被忽视的是最后一行。每台相机都用自己板上的晶振计时,标称精度通常在几十 ppm。50 ppm 的漂移意味着每 20 ms 就累积 1 µs,运行一秒后两台相机之间就差出了 50 µs,一小时就是 180 ms。如果你的同步方案是"让主机同时给多台相机发软触发",那么相机之间的时间关系会随着运行时间缓慢漂走,短时间的测试根本发现不了,只有连续跑几个小时之后误判率才会悄悄抬头。所以同步问题要分成两个层次来看:一是"何时曝光"的一次性问题(相位对齐),二是"时钟是否共用"的长期问题(频率对齐)。前者靠触发解决,后者只能靠共享时基解决。三、触发模式:你到底在控制什么3.1 三种基本模式相机出图的方式大致分三类,理解它们的差别是同步设计的第一步。自由运行(Free Run):相机以自己的内部时钟连续出图,帧率由相机决定。这是最容易踩坑的模式,因为出图时刻与产线节拍毫无关系,工件在画面里的位置和图与图的对应关系都是随机的。它只适合静止检测、连续录制、或者节拍极低的场合。软触发(Software Trigger):主机通过网络发一条指令,相机收到后曝光一帧。看起来很美,实际上延迟和抖动都很大——指令要经过协议栈、网卡、交换机、相机固件多层处理,抖动通常在百微秒到毫秒级别,而且随主机负载变化。它适合静态或低速检测,不适合运动产线。硬触发(Hardware Trigger):外部电信号(光电开关、编码器、PLC 输出)通过相机 I/O 线直接驱动,从电信号边沿到曝光开始的延迟短且稳定,抖动可以做到微秒甚至亚微秒级。这是工业产线的标准做法,也是多相机同步的物理基础。模式触发源抖动与产线同步适用场景自由运行相机内部时钟不适用否静止/低速、连续录制软触发主机软件0.1–5 ms弱静态检测、实验验证硬触发光电/编码器/PLC0.5–50 µs强运动产线、多相机3.2 硬触发的关键参数GenICam 标准特征(SFNC 命名)里有几个参数必须搞清楚,否则配出来的触发行为往往和预期不符:TriggerMode:On / Off,总开关;TriggerSource:Line0、Line1 等物理 I/O 线,或 Software、Counter0 等内部源;TriggerActivation:RisingEdge、FallingEdge、LevelHigh、LevelLow,决定响应哪种边沿;TriggerDelay:从收到触发电平到真正开始曝光之间的延时,用来补偿机械行程或光源建立时间;TriggerOverlap:决定"上一帧还在读出时能否响应新触发",这是高节拍下丢帧与撕裂的元凶。其中TriggerOverlap值得单独说明,它的三种取值差别很大。取值含义风险Off必须等上一帧完全结束才能响应触发高帧率下会丢失触发信号ReadOut读出期间即可接受新触发需确认传感器支持重叠曝光PreviousFrame与上一帧曝光重叠滚动快门会产生斜切畸变我见过不止一次"产线节拍提上去之后图像突然开始撕裂"的案例,最后都落到这个参数上。滚动快门的传感器在重叠曝光时,画面上下两端的曝光时刻不同,对运动工件就会形成倾斜——这种畸变在低速时毫不可见,一提速就冒出来。3.3 曝光窗口与触发周期的数学关系要让系统不丢触发,必须满足每个触发周期足以容纳一次完整的曝光加读出(有重叠时减去重叠部分):Ttrigger≥Texposure+Treadout−ToverlapT_{trigger} \ge T_{exposure} + T_{readout} - T_{overlap}Ttrigger​≥Texposure​+Treadout​−Toverlap​另一方面,从运动模糊的角度,曝光时间受像移容差约束。设工件相对像面的速度为vvv、允许的最大像移为dtold_{tol}d

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑