编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多⭐️✍
内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。
Hello,大家好,这里是OAK中国,我是助手君。
去年我写了一篇博客说明OAK相机是如何实现硬件同步的(传送门),不过随着我们产品的增多,这篇博客显然也要更新内容了。加上最近问外触发同步的朋友比较多,所以我觉得是时候更新内容了!
有两种方式去同步来自不同传感器的信息(帧、IMU数据包、ToF等):
本文重点介绍硬件同步,它允许在多个相机传感器之间精确同步,并可能与其他硬件同步,如闪光灯LED、外部IMU或其他相机。
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信号是图像传感器的输出,在图像传感器的曝光期间是有效的(高电平)。它可以用来驱动外部的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系列可以接的镜头模组有一个22pin的连接器,但没有给FSIN/STROBE信号焊线。如下图所示,要将FFC镜头模组连接到我们的OAK-FFC基板上,你需要使用26-22pin转换器连接器,该连接器只能通过测试焊盘露出FSIN/STROBE线。为了同步这些相机,你可以将一根电线从测试焊盘焊接到相机模块的FSIN插头,或者将所有的FSIN插头连接在一起(步骤)。
⚠注意!我们现在发的模组已经焊了线。
如前所述,所有二代的OAK PoE设备都有一个带FSYNC/STROBE信号的M8 I/O连接器。但是如果你不用这些,你可能需要在设备的PCB上焊接一条线。大多数PCB设计都是开源的(查看depthai-hardware仓库),所以你可以很容易地检查FSIN/STROBE信号在PCB上的位置。
如上图所示,在OAK-FFC-4P上,你可以用MXIO6启用连接FSIN_4LANE
和FSIN_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)
补充信息可在这篇帖子里查看。
DM9098板上的FSIN(如OAK-D-S2、OAK-D-W、OAK-D-Pro、OAK-D-Pro-W)
NG9093板上的FSIN测试点(如OAK-1、OAK-1-W、OAK-1-Lite、OAK-1-Lite-W、OAK-1-MAX)
参考示例-软同步
https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/
OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态
戳「+关注」获取最新资讯↗↗