4. 工业相机与图像采集链路

在 Jetson 工业视觉检测系统中,相机接口决定了整条采集链路的带宽上限、线缆长度、触发精度和可维护性。Jetson 平台常见的三类接口是 GigE Vision(千兆/万兆以太网)、USB3 Vision 和 MIPI CSI-2。选型不是“哪个像素高选哪个”,而是先确定检测节拍、分辨率、传输距离和同步要求,再反推接口与相机型号。

三类接口的工程定位

GigE Vision 基于标准以太网,使用 GVCP 控制、GVSP 流传输,线缆可达 100 m(千兆),支持 PoE 供电,多相机可通过交换机集中组网,适合产线工位分散、相机数量多、需要长距离布线的场景。其代价是协议栈开销和网络抖动,单口千兆理论 125 MB/s,实际有效带宽约 110 MB/s,需为每台相机预留余量。

USB3 Vision 基于 USB 3.0/3.1,理论 5 Gbps(约 500 MB/s 有效),线缆通常 3~5 m,支持 GenICam 标准,即插即用、成本低,适合单机位、短距离、中高帧率的检测站。缺点是主机控制器带宽共享、供电与线缆质量敏感,长距离需有源延长。

MIPI CSI-2 是 Jetson 原生接口,直接接入 SoC 的 CSI 控制器,延迟最低、功耗最小、无需协议转换,适合板载或短距离(通常 <30 cm)的嵌入式相机,如 IMX219、IMX477、IMX577 等。它不经过 USB/网络栈,CPU 占用低,但线缆短、相机型号受 Jetson 设备树与驱动支持限制,多相机需注意 CSI 通道与 MIPI 带宽分配。

Jetson 三类相机接口采集链路对比 GigE Vision 工业相机 PoE 交换机 Jetson 千兆/万兆网口 线缆 ≤100 m · 有效带宽 ≈110 MB/s USB3 Vision 工业相机 USB3 主机控制器 Jetson USB3 端口 线缆 3~5 m · 有效带宽 ≈400 MB/s MIPI CSI-2 CSI 相机模组 CSI 控制器 Jetson SoC 内存 线缆 <30 cm · 延迟最低 · 带宽受通道数限制 选型决策要点 距离 >5 m / 多机位 优先 GigE Vision 单机位 / 中高帧率 优先 USB3 Vision 低延迟 / 嵌入式 优先 MIPI CSI-2 带宽核算 分辨率×帧率×位深 带宽估算:1920×1080×8 bit×60 fps ≈ 995 Mbps ≈ 124 MB/s(需留 20% 余量) 触发同步:硬触发(光耦/GPIO)优于软触发;多相机建议统一外部触发源

触发同步与曝光控制

工业检测中,相机必须在工件到达工位的确定时刻曝光。软触发由主机发命令,延迟抖动通常在毫秒级,不适合高速产线;硬触发通过光电传感器或 PLC 输出 5~24 V 信号接入相机的 Trigger In(光耦隔离),抖动可控制在微秒级。以 Basler ace 2 为例,触发模式设为 TriggerMode=On、TriggerSource=Line1,触发沿可选上升沿或下降沿,需与传感器极性一致。

曝光控制有两种方式:曝光时间(ExposureTime)和增益(Gain)。优先延长曝光时间以提高信噪比,增益仅在光照不足时补偿,但会放大噪声。对于运动工件,曝光时间需满足 曝光时间 ≤ 运动模糊容差 / 运动速度。例如传送带速度 0.5 m/s、允许模糊 0.1 mm,则曝光时间 ≤ 200 μs。此时需提高光源亮度或增大光圈,而不是盲目加增益。

多相机同步时,建议使用同一外部触发源并联触发所有相机,并设置相同的曝光时间与触发延迟。若相机支持 PTP(IEEE 1588),GigE 相机可通过 PTP 实现亚微秒级时间同步,适合多视角三维重建或飞拍场景。

帧率与分辨率的权衡

帧率与分辨率共同决定数据带宽。以 500 万像素(2448×2048)、8 bit 灰度为例,单帧约 5 MB。若目标帧率 30 fps,则需 150 MB/s,超过千兆 GigE 有效带宽,必须降帧率、降分辨率或改用万兆/ USB3。实际选型时先算带宽,再选接口。

分辨率选择应满足最小缺陷尺寸的像素覆盖要求。若最小缺陷 0.2 mm,要求至少 3 像素覆盖,则单像素对应实际尺寸 ≤ 0.067 mm。视场 200 mm 时,所需水平像素 ≥ 200 / 0.067 ≈ 3000,应选 500 万像素以上相机。分辨率过高会降低帧率并增加处理负担,需与 Jetson 的 ISP/GPU 处理能力匹配。

采集稳定性与丢帧排查

丢帧表现为帧号不连续、时间戳跳变或图像撕裂。排查按链路分段进行:

  • 带宽层:用 nvidia-smi 或 iftop 观察网口/ USB 控制器占用,确认是否超过 80%。GigE 可启用巨帧(Jumbo Frame 9000)降低协议开销。
  • 驱动层:检查 dmesg 是否有 uvcvideo 或 nvargus 报错;USB3 相机避免与存储设备共用同一控制器。
  • 应用层:采集线程与处理线程解耦,使用环形缓冲区;避免在回调中做耗时处理。GigE 可增大 StreamBufferCount 和 PacketSize。
  • 触发层:确认触发信号无抖动、无丢脉冲;软触发时检查主机调度延迟,可设置线程优先级或使用实时内核。
现场建议:先用 v4l2-ctl --list-formats-ext 或厂商 SDK 的采集工具单独验证相机满帧率运行 10 分钟无丢帧,再接入检测程序。若单独运行正常、接入后丢帧,优先排查 CPU 占用与内存拷贝次数。

接入示例:GigE 相机在 Jetson 上的配置

# 设置网口巨帧与静态 IP(示例)
sudo ip link set eth0 mtu 9000
sudo ip addr add 192.168.1.100/24 dev eth0

# 使用 Aravis 查看相机
arv-tool-0.8
arv-tool-0.8 --name "Basler-xxxx" control ExposureTime=2000
arv-tool-0.8 --name "Basler-xxxx" control AcquisitionFrameRate=30

# 采集 100 帧并统计
arv-camera-test-0.8 --name "Basler-xxxx" -n 100

若使用 MIPI CSI 相机,需确认设备树中 CSI 通道与相机模组匹配,并通过 v4l2-ctl --device /dev/video0 --stream-mmap --stream-count=100 验证。CSI 相机通常由 Argus 或 V4L2 驱动,曝光与增益通过 v4l2-ctl -c exposure=... 设置,具体控件名以驱动为准。

注意:GigE 相机与 Jetson 网口直连时,需关闭节能以太网(EEE)和中断合并,否则可能出现周期性丢包。USB3 相机避免使用劣质延长线,线缆阻抗不匹配会导致枚举失败或间歇性断流。

综上,接口选型应围绕“距离—带宽—同步—延迟”四个维度决策:长距离多机位选 GigE,单机位中高帧率选 USB3,低延迟嵌入式选 MIPI CSI。触发优先硬触发,曝光优先时间而非增益,带宽先算后选,丢帧按链路分段定位。把这四点落实到具体参数与验证命令,采集链路才能稳定支撑后续的检测算法。