此页面由 AI 自动翻译。查看英文原版
平台

本页目录

  • 概述
  • FSYNC 结果
  • 来自 OAK 设备的外部 FSYNC 信号
  • 代码
  • 来自函数发生器的外部 FSYNC 信号
  • 尺寸和重量

FSYNC Y-Adapter

基于
RVC
点阵投射器
红外
IMU

需要更多细节?请访问 Platform -> Features 中的相关特性。

概述

FSYNC Y 型适配器允许用户轻松地对具有 M8 辅助连接器的多个设备进行硬件同步。如果摄像头硬件同步,它们将在每一帧中同时开始传感器曝光。具有 M8 辅助连接器的设备可根据接线和电压要求分为两类 - 较新较旧设备:
设备组设备列表FSYNC 功能M8 上的 FSYNC 电压
较旧设备仅支持来自[函数发生器的外部 FSYNC 信号](scroll-to://External FSYNC Signal from Function Generator)10V-24V FSYNC 信号
较新设备支持来自[函数发生器的外部 FSYNC 信号](scroll-to://External FSYNC Signal from Function Generator)和[其他 OAK 设备的外部 FSYNC 信号](scroll-to://External FSYNC Signal from OAK Device)5V FSYNC 信号
上面列出的所有设备都与 FSYNC Y 型适配器兼容。

FSYNC 结果

为了演示 FSYNC 功能,我们将一个物体扔过六个垂直堆叠的 OAK4-D 摄像头。我们记录了两次相同的测试:一次是摄像头同步,一次是不同步。
在同步录制中,飞行物体在所有摄像头流中显示的位置相同。
在不同步录制中,流会错位,这在图像中用红色指示器标出。流是黑白的,以在同时以 60 FPS 录制六个摄像头时减少带宽。

来自 OAK 设备的外部 FSYNC 信号

如果您有多个较新设备,可以使用下面的接线图将它们进行 FSYNC 菊花链连接。在此配置中,只有一个 OAK 设备充当“FSYNC 主设备”,所有其他设备充当“FSYNC 从设备”。**如果您在一个链中需要超过 3 个设备,**累积的内部电阻可能会降低信号完整性并阻止可靠运行。对于更大的设置,请通过 support@luxonis.com 联系我们。
没有连接到“IN”端口(M8 母连接器)的设备会自动输出内部 FSYNC 信号,并充当链中其他设备的“FSYNC 主设备”。连接到“IN”端口的设备充当“FSYNC 从设备”。在 OAK ThermalOAK-D ToF 上,这适用于所有 depthai 版本;在 OAK4 设备上,从 depthai 3.4.0 开始支持。

代码

您可以在我们的 git 存储库中找到可运行的 PythonC++ 代码示例。如果您将其精简为最基本的 FSYNC 设置,以下是关键的几行代码:
Python
1# 获取角色(MASTER / SLAVE)
2role = device.getExternalFrameSyncRole()
3
4# Master 定义 FPS,slaves 跟随
5cam = pipeline.create(dai.node.Camera).build(
6    socket,
7    sensorFps=fps if role == dai.ExternalFrameSyncRole.MASTER else None
8)
9
10# 创建 Sync 节点(在主机上运行)
11sync = pipeline.create(dai.node.Sync)
12sync.setRunOnHost(True)
13sync.setSyncThreshold(datetime.timedelta(milliseconds=1000 / (2 * fps)))
14
15# 将摄像头输出链接到 sync
16cam.requestOutput(...).link(sync.inputs["cam"])
17
18# 重要提示:先启动 master,然后启动 slaves
19master_pipeline.start()
20slave_pipeline.start()
按步骤概念:
  • 获取角色 → getExternalFrameSyncRole()
  • 主设备设置 FPS,从设备不设置
  • 在主机上使用 Sync 节点
  • 将所有摄像头流链接到它
  • 主管道必须在从设备之前启动
示例脚本中的其他所有内容都是用于多设备处理的“管道”。有关数据同步的更深入信息,请访问 此页面

来自函数发生器的外部 FSYNC 信号

您还可以使用外部信号(例如,来自信号发生器)触发 FSYNC。旧设备 需要 FSYNC 线上的 10V-24V 电压,而 新设备 需要 5V 触发信号。

接线图

接线照片

确保 LOW 电平为 0V,对于 旧设备,HIGH 电压高于 10V,对于 新设备,高于 5V。 另请注意,OV9x82 传感器需要约 5 微秒的脉冲,而 IMX 传感器即使在约 500 纳秒的脉冲下也能触发。

BNC 转 M8 转接头

我们自己制作了一个 BNC 转 M8 转接头,方法是拆开一根 BNC 转 BNC 电缆和一根 M8 转 M8 电缆。然后,我们使用它将信号发生器(BNC)连接到 FSYNC Y 型转接头(M8)。信号线(BNC 芯线)必须连接到 M8 电缆的引脚 1(FSYNC 线)。BNC 连接器的 GND(即其周围的屏蔽层)必须连接到 M8 电缆的引脚 3(GPIO3/5V - DETECT/ISOLATED FSYNC GND)和引脚 8(GND)。如果 GPIO3 未接地,第一个 FSYNC Y 型转接头上的摄像头将无法工作,只有其后的摄像头才能同步。这是因为第一个 FSYNC Y 型转接头会将 GPIO3 拉低至 GND,如下面的原理图所示。

代码

旧设备

Python
1# 需要将所有摄像头传感器的 FSYNC 模式设置为 INPUT:
2cam1 = pipeline.create(dai.node.MonoCamera)
3cam1.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
4
5cam2 = pipeline.create(dai.node.ColorCamera)
6cam2.initialControl.setFrameSyncMode(dai.CameraControl.FrameSyncMode.INPUT)
7# ...

新设备

如果将其简化为重要的几行,它们是:
Python
1# 无需获取角色,所有设备都是从设备
2cam = pipeline.create(dai.node.Camera).build(
3    socket
4)
5
6# 创建 Sync 节点(在主机上运行)
7sync = pipeline.create(dai.node.Sync)
8sync.setRunOnHost(True)
9sync.setSyncThreshold(datetime.timedelta(milliseconds=1000 / (2 * fps)))
10
11# 将摄像头输出链接到 sync
12cam.requestOutput(...).link(sync.inputs["cam"])
13
14# 启动所有从设备
15slave_pipeline.start()
  • 所有摄像头都是从设备 → 未设置 FPS,它们遵循外部同步信号
  • Sync 节点在主机上运行以合并跨设备的数据流
  • setSyncThreshold(...) 定义时间戳必须多近才能被视为已同步
  • 摄像头输出链接到 sync 输入以进行分组
  • 启动所有管道 → 摄像头等待外部触发,Sync 对帧进行分组
有关数据同步的更深入信息,请访问 此页面

尺寸和重量

  • 重量:5克
  • 宽度:23.5 毫米
  • 高度:33 毫米
  • 长度:10 毫米