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

编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多⭐️✍
内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。

▌前言

Hello,大家好,这里是OAK中国,我是助手君。

去年我写了一篇博客说明OAK相机是如何实现硬件同步的(传送门),不过随着我们产品的增多,这篇博客显然也要更新内容了。加上最近问外触发同步的朋友比较多,所以我觉得是时候更新内容了!

▌前言

有两种方式去同步来自不同传感器的信息(帧、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个相机传感器将根据信号发生器的触发器捕获一帧。

# 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,查看这里的示例。

▌STROBE信号

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

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

▌帧捕获图像

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

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

【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第1张图片

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

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

【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第2张图片
在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

【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第3张图片
如上图所示,在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)

【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第4张图片
【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第5张图片

USB OAK-1* FSIN

NG9093板上的FSIN测试点(如OAK-1、OAK-1-W、OAK-1-Lite、OAK-1-Lite-W、OAK-1-MAX)
【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第6张图片
【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第7张图片

OAK-D-Lite FSIN

【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第8张图片
请注意双目和RGB没有连接在一起。
【2023更新】通过硬件触发信号实现OAK多相机之间的同步拍摄_第9张图片

▌相关示例

参考示例-软同步

▌参考资料

https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/


OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态

戳「+关注」获取最新资讯↗↗

你可能感兴趣的:(OAK使用教程,人工智能)