+86-13951940532
contact@oakchina.cn

通过硬件触发信号实现OAK多相机之间的同步拍摄

通过硬件触发信号实现OAK多相机之间的同步拍摄

所有OAK设备都支持同步!

代码示例: https://github.com/richard-xx/oak-example/tree/main/oak-ffc

▌前言

有两种方式去同步来自不同传感器的信息(帧、IMU数据包、ToF等):

本文重点介绍硬件同步,它允许在多个相机传感器之间精确同步,并可能与其他硬件同步,如闪光灯LED、外部IMU或其他相机。

▌FSYNC信号

FSYNC/FSIN(帧同步)信号是一个脉冲,在开始捕获每个帧时被驱动为高电平。它的长度与曝光时间不成正比,可以是输入或输出,在1.8V下工作。

在双目立体相机(OAK-D*)上,我们希望双目黑白相机是完全同步的,所以一个相机传感器(如左相机)的FSYNC设置为INPUT,而另一个相机传感器(如右相机)的FSYNC设置为OUTPUT。在这样的配置中,右相机驱动左相机。

⚠注意!
目前,只有OV9282/OV9782可以输出FSYNC信号,而IMX378/477/577/等应该也有这个能力,但还不支持(所以这些信号不能驱动FSYNC信号,只能被它驱动)。AR0234只支持输入FSYNC信号。

从外部同步帧

如果我们想用外部信号驱动相机,我们需要将FSIN设置为相机传感器的INPUT。

所有二代的OAK-PoE设备都有一个M8 I/O连接器,可以引出FSIN信号(也包括STROBE)。因此,你可以将一个信号发生器连接到M8连接器上,所有3个相机传感器将根据信号发生器的触发器捕获一帧。触发器需要12V(最多24V)。

# Example: we have 3 cameras on ports A,B, and C
cam_A.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
cam_B.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
cam_C.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)

你也可以在脚本节点内通过GPIO控制FSIN,查看这里的示例

外部FSYNC示例

下面是一个如何使用外部FSYNC信号来触发相机传感器的例子。你可以使用任何第二代OAK-PoE上的M8连接器来触发FSYNC,我们使用M8分线板来露出GND/FSYNC线。

用的脚本链接

简易布线原理图
⚠注意!
只有全局快门相机(OV9282、OV9782、AR0234…)支持照片/快照模式下的FSYNC触发,卷帘快门相机不支持(IMX378、IMX477、IMX577等)。

支持FSYNC的传感器

如前文所述,只有一些传感器支持FSYNC同步。有2种FSYNC同步的类型:

  • 通过CameraControl.setFrameSyncMode()配置的外部同步连续流。在这种模式下,FSIN信号预计会以与配置的传感器FPS相匹配的连续速率到达,而触发器不能在任意时间到达,因为这会中断内部传感器操作(导致坏帧等)。它只能纠正随时间变化的非常小的漂移。
  • 带有外部同步的快照模式,用CameraControl.setExternalTrigger()进行配置。在这种模式下,触发器可以在任何时候到达传感器,传感器将拍摄照片/快照。
传感器快门支持类型
OV9282、OV9782全局快门FSYNC 输入/输出,连续流/快照模式
OV7251全局快门应该具有与OV9*82相同的支持,但尚未实现
AR0234全局快门FSYNC输入,支持快照模式(连续流模式会导致奇怪的行为)
IMX378、IMX477、IMX380卷帘快门FSYNC输入,只支持滚动快门传感器的连续流模式
IMX582卷帘快门[尚未测试] FSYNC输入,连续流模式

▌STROBE信号

STROBE信号是图像传感器的输出,在图像传感器的曝光期间是有效的(高电平)。它可以用来驱动外部的LED照明,所以照明只在曝光时间内激活,而不是持续开启,这将减少功耗和发热。

我们在OAK-D-Pro系列相机上使用STROBE信号(它有板载照明红外LED和红外激光点阵发射器)来驱动激光/LED。

▌帧捕获图像

当传感器开始传输帧(MIPI读数)时,帧时间戳会在MIPI SoF(帧开始)事件中分配给帧。

对于全局快门传感器,这是在整个帧的曝光完成后立即进行的,所以我们可以说分配的时间戳与曝光窗口的结束相一致(在几微秒的范围内)。下面是一个全局快门传感器计时的示意图,演示了时间戳何时被分配给帧。

对于卷帘快门,示例图看起来有点不同。MIPI SoF在图像的第一行完全曝光后继续拍摄并传输,但后面的行仍在曝光或可能还没有开始曝光(取决于曝光时间)。

下面是卷帘快门传感器(IMX378)在1080p和30fps(33.3ms帧时间)的示意图。MIPI读出时间因传感器/分辨率而异,但对于IMX378来说,1080P时为16.54ms,4K时为23.58ms,12MP时为33.04ms。

OAK-FFC-4P上有四个摄像头接口:A(RGB)、B(LEFT)、C(RIGHT)和D(cam_d)。A和D是4-lane MIPI,B和C是2-lane MIPI。每对(A&D,B&C)共享一条I2C总线,默认情况下,B&C总线配置为左右相机硬件同步。

对于A&D端口,你需要启用硬件同步:

cam_A.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT)
cam_D.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)

▌FFC镜头模组

FFC系列可以接的镜头模组有一个22pin的连接器,但没有给FSIN/STROBE信号焊线。如下图所示,要将FFC镜头模组连接到我们的OAK-FFC基板上,你需要使用26-22pin转换器连接器,该连接器只能通过测试焊盘露出FSIN/STROBE线。为了同步这些相机,你可以将一根电线从测试焊盘焊接到相机模块的FSIN插头,或者将所有的FSIN插头连接在一起(步骤)。

⚠注意!
我们现在发的模组已经焊了线。

▌连接FSIN/STROBE

如前所述,所有二代的OAK PoE设备都有一个带FSYNC/STROBE信号的M8 I/O连接器。但是如果你不用这些,你可能需要在设备的PCB上焊接一条线。大多数PCB设计都是开源的(查看depthai-hardware仓库),所以你可以很容易地检查FSIN/STROBE信号在PCB上的位置。

OAK-FFC-4P FSIN

如上图所示,在OAK-FFC-4P上,你可以用MXIO6启用连接FSIN_4LANEFSIN_2LANE。下面的脚本将同步所有4台连接到OAK-FFC-4P的相机。

# CAM_A will drive FSIN signal for all other cameras:
cam_A.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE
cam_B.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.OUTPUT) # 2LANE
cam_C.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 2LANE
cam_D.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT) # 4LANE

# AND importantly to tie the FSIN signals of A+D and B+C pairs, by setting a GPIO:
# OAK-FFC-4P requires driving MXIO6 high (FSIN_MODE_SELECT) to connect together
# the A+D FSIN group (4-lane pair) with the B+C group (2-lane pair)
config = dai.Device.Config()
config.board.gpio[6] = dai.BoardConfig.GPIO(dai.BoardConfig.GPIO.OUTPUT,
                                            dai.BoardConfig.GPIO.Level.HIGH)

with dai.Device(config) as device:
    device.startPipeline(pipeline)

补充信息可在这篇帖子里查看。

Series 2 USB OAKs

DM9098板上的FSIN(如OAK-D-S2、OAK-D-W、OAK-D-Pro、OAK-D-Pro-W)

USB OAK-1* FSIN

NG9093板上的FSIN测试点(如OAK-1、OAK-1-W、OAK-1-Lite、OAK-1-Lite-W、OAK-1-MAX)

OAK-D-Lite FSIN

请注意双目和RGB没有连接在一起。

▌相关示例

参考示例-软同步

Tags:

索引