配置多个摄像头进行同步拍摄

 下载 PDF

什么是同步拍摄?

同步拍摄是指两台或以上的摄像头同时捕捉图像;我们对“同时”的定义是指摄像头必须在几微米的时间差内开始曝光每组图像。  为实现此目的,我们展示了如何利用主摄像头的频闪(摄像头开始捕捉图像时默认出现频闪)通过一台“主”摄像头触发另一台或多台“副”摄像头。 这也可以确保副摄像头的帧率与主摄像头的帧率相同。

注意:同步拍摄的替代方法是通过外部硬件触发器(例如,功能生成器)触发所有摄像头。 任何提供 3.3 或 5 V 方波 TTL 信号的硬件触发器都可以触发摄像头。 这一应用的注意事项未明确说明外部硬件触发器的配置,但使用外部硬件触发器的用户可以将其视为主要摄像头,然后按照本文中提到的物理布局部分进行操作(如果使用上拉电阻,可以忽略,因为外部硬件触发器不需要)。

配置同步拍摄

配置同步拍摄有两个步骤:

  1. 连接摄像头的 GPIO 针脚,在摄像头之间建立物理连接。
  2. 使用 SDK 演示应用或代码配置每台摄像头的输入和输出。

第 1 步 - 连接摄像头

第一步是在摄像头之间建立物理连接。 方法因使用的摄像头而异。

Blackfly S (BFS)

BFS 摄像头配有一个 6 针 GPIO。 BFS GPIO 同时配备一个非隔离输出和一个光电隔离输出。 如果如下例所述使用光电隔离输出,主摄像头需要一个上拉电阻来增强它的闪光灯信号。

2
颜色 针脚线 功能说明

绿色 1 3 VAUX 辅助输入电压 (DC)
GPI 非隔离输入
黑色 0 OPTOIN 光电隔离输入
红色 3 2 VOUT 摄像头电源输出
GPIO 非隔离输入/输出
白色 4 1 OPTOOUT 光电隔离输出
蓝色 5 不适用 光电 GND 光电隔离地线
棕色 6 不适用 地线 摄像头电源地线

 要配置 BFS 的主摄像头和副摄像头:

  1. 将主摄像头的第 4 针(白线,光电隔离输出)连接到每个副摄像头的第 1 针(绿线,非隔离输入)。
  2. 将主摄像头的第 5 针(蓝线,光电隔离地线)连接到每个副摄像头的第 6 针(棕线,地线)。

要配置所需的上拉电阻以增强信号:

  1. 将 10 kΩ 电阻的一端连接到主摄像头的第 3 针(红线,3.3 V 输出)。
  2. 将电阻的另一端连接到主摄像头的第 4 针(白线)以及每个副摄像头的第 1 针(绿线)。
  3. 将主摄像头的第 6 针(棕线)连接到每个副摄像头的第 6 针(棕线)。 注意:副摄像头的第 6 针已连接到主摄像头的第 5 针。

Blackfly (BFLY)

BFLY 摄像头使用一个 6 针 GPIO 连接器。 BFLY GPIO 只有光电隔离输出针脚,因此主摄像头需要上拉电阻来增强其闪光灯信号。

颜色 针脚功能说明

绿色

1

VEXT +12 V DC 摄像头电源
黑色

2

I0 光电隔离输入 (GPIO 0)
红色

3

NC / +3.3 V +3.3 V 输出。 电流 120 mA(标称)。
固件已启用 (OUTPUT_VOLTAGE_ENABLE: 19D0h)
白色

4

O1 光电隔离输出 (GPIO 1)
蓝色

5

OPTO_GND 光电隔离 I/O 的地线,不连接摄像头地线
棕色

6

地线 DC 摄像头电源地线

 要配置 BFLY 的主摄像头和副摄像头:

  1. 将主摄像头的第 4 针(白线,光电隔离输出)连接到每个副摄像头的第 2 针(黑线,光电隔离输入)。
  2. 将主摄像头的第 5 针(蓝线,光电地线)连接到每个副摄像头的第 5 针(蓝线,光电地线)。

要配置所需的上拉电阻以增强信号:

  1. 将 460 Ω 电阻的一端连接到主摄像头的第 3 针(红线,3.3 V 输出)。
  2. 将电阻的另一端连接到主摄像头的第 4 针(白线)以及每个副摄像头的第 2 针(黑线)。
  3. 将主摄像头的第 6 针(棕线)连接到每个摄像头的第 5 针(蓝线)。 注意:副摄像头的第 5 针已连接到主摄像头的第 5 针。

Chameleon 3 (CM3)

CM3 使用 9 针 GPIO。 它有两个非光电输入/输出针脚,可用作输入或输出。 非光电针脚不需要结合上拉电阻来增强闪光灯信号。 此示例使用非光电针脚。

颜色 针脚功能说明
红色 1 VEXT 允许摄像头使用外部 5 - 24 VDC 电源
黑色 2 地线 输入/输出地线,VEXT,+3.3 V 针脚
白色 3 +3.3 V 外部电路电源,在最高 150 mA 时熔断
绿色 4 GPIO3 / Line3 输入/输出
紫色 5 GPIO2 / Line2 输入/输出
黑色 6 地线 输入/输出地线,VEXT,+3.3 V 针脚
棕色 7 OPTO_GND 光电隔离 IO 针脚地线
橙色 8 OPTO_OUT / Line1 光电隔离输出
黄色 9 OPTO_IN / Line0 光电隔离输入

 要配置 CM3 的主摄像头和副摄像头:

  1. 将主摄像头的第 5 针(紫线,输出)连接到每个副摄像头的第 4 针(绿线,输入)。
  2. 将主摄像头的第 6 针(黑线,地线)连接到每个副摄像头的第 6 针(黑线,地线)。

Flea3 (FL3) 和 Grasshopper3 (GS3)

FL3 和 GS3 均使用 8 针 GPIO。 它们有两个非光电输入/输出针脚,可用作输入或输出。 非光电针脚不需要结合上拉电阻来增强闪光灯信号。 此示例使用非光电针脚。

颜色 针脚功能说明
黑色 1 I0 光电隔离输入(默认触发位置)
白色 2 O1 光电隔离输出
红色 3 IO2 输入/输出/串行传输 (TX)
绿色 4 IO3 输入/输出/串行接收 (RX)
棕色 5 地线 双向 IO 地线, VEXT,+3.3 V 针脚
蓝色 6 OPTO_GND 光电隔离 IO 针脚地线
橙色 7 VEXT 允许摄像头使用外部电源
黄色 8 +3.3 V 电源外部电路,最高 150 mA

 要配置 FL3 或 GS3 的主摄像头和副摄像头:

  1. 将主摄像头的第 3 针(红线,输出)连接到每个副摄像头的第 4 针(绿线,输入)。
  2. 将主摄像头的第 5 针(棕线,地线)连接到每个副摄像头的第 5 针(棕线,地线)。

Oryx (ORX)

BFS 摄像头配有一个 12 针 GPIO。 它有两个非光电输入/输出针脚,可用作输入或输出。 非光电针脚不需要结合上拉电阻来增强闪光灯信号。 此示例使用非光电针脚。

  颜色 针脚线 功能说明
黑色 1 不适用 地线 DC 摄像头电源地线
白色 2 不适用 电源 DC 摄像头电源
红色 3 线 1 GPIO_OPT_OUT1 光电隔离输出 (GPO1)
绿色 4 线 4 GPIO_OPT_OUT2 光电隔离输出 (GPO2)
橙色 5 线 0 GPIO_OPT_IN1 光电隔离输入 (GPI1)
蓝色 6 线 3 GPIO_OPT_IN2 光电隔离输入 (GPI2)
白/黑条纹 7 线 2 GPIO_TTL_IO3 TTL 输入/输出 3*
红/黑条纹 8 线 5 GPIO_TTL_IO4 TTL 输入/输出 4*
绿/黑条纹 9 不适用 地线 DC 摄像头电源地线
橙/黑条纹 10 不适用 电源 DC 摄像头电源
蓝/黑条纹 11 线 6 3.3 V 输出 +3.3 V 输出,电流 120 mA(标称)- 固件启用
黑/白条纹 12 不适用 OPTO_GND 光电隔离 I/O 的地线,不连接摄像头地线
    *当配置为输出线格式是漏极开路而不是 TTL 时。 用户应该附加其自己的外部上拉电阻。

要配置 ORX 的主摄像头和副摄像头:

  1. 将主摄像头的第 7 针(白/黑条纹线,输出)连接到每个副摄像头的第 8 针(红/黑条纹线,输入)。
  2. 将主摄像头的第 9 针(绿/黑条纹线,地线)连接到每个副摄像头的第 9 针(绿/黑条纹线,地线)。

Firefly-DL (FFY-DL)

Firefly DL 使用 6 针 GPIO。 它只有两个非光电针脚,可用作输入或输出。 非光电针脚不需要上拉电阻来增强闪光灯信号。

颜色 针脚线 功能说明

橙色 1 线 0 GPIO0 用于 1.8V UART 的非绝缘输入/输出 TXD(输出)
   
黑色 2 线 1 GPIO1 用于 1.8V UART 的非绝缘输入/输出 TXD(输出)
白色 3 线 2 GPIO2 非绝缘输入/输出
   
绿色 4 线 3 GPIO3 非绝缘输入/输出
棕色 5 不适用 地线 摄像头电源地线
红色 6 不适用 Vout 摄像头电源输出

要配置 ORX 的主摄像头和副摄像头:
1. 将主摄像头的第 3 针(白线,输出)连接到每个副摄像头的第 4 针(绿线,输入)
2. 将主摄像头的第 5 针(棕线,地线)连接到每个副摄像头的第 5 针(棕线,地线)

第 2 步 - 配置摄像头

对各摄像头进行物理连接后,使用 SDK 的演示程序或写入代码来配置 GPIO 线。

使用 SpinView

SpinView 是随 Spinnaker SDK 提供的演示程序。

对于主摄像头:

  1. 打开 SpinView。
  2. 选择摄像头。
  3. 在功能选项卡上,单击数字 IO 控制。
  4. 设置
    1. CM3FL3GS3FFY-DLORX 摄像头的输出线,从线选择下拉菜单中选择行 2,并将线模式设置为输出。
    2. 对于 BFS 摄像头,从线选择下拉菜单中选择行 1,然后将线模式设置为输出。
  5. 对于 BFSBFLY 摄像头,请启用 3.3V 线
    1. 对于 BFS 摄像头,请从线选择下拉菜单中选择行 2,并勾选 3.3V 启用复选框。
    2. 对于 BFLY 摄像头,请将 3.3V 启用设置为真
  6. (可选) 在用户设置中保存设置:
    • 单击用户设置控制。
    • 从用户设置选择器下拉列表中,选择用户设置 0 或用户设置 1。
    • 单击用户设置保存。
    • (可选)从用户默认设置下拉菜单中,选择用户设置 0 或用户设置 1。这样确保摄像头启动时加载该用户设置。

 

对于每台副摄像头:

  1. 打开 SpinView 并选择摄像头。
  2. 选择 GPIO 选项卡。
    1. 设置触发源
    2. 对于 BFSCM3FL3FFY-DLGS3 摄像头,请从触发源下拉菜单中,选择线 3。
    3. 对于 ORX 摄像头,请从触发源下拉菜单中,选择线 5。
    4. 对于 ORX 摄像头,请从触发源下拉菜单中,选择线 0
  3. 从触发重叠拉列表中,选择读出。
  4. 从触发模式下拉列表中,选择开启。
  5. (可选)在用户设置中保存设置:
    1. 单击用户设置控制。
    2. 从用户设置选择器下拉列表中,选择用户设置 0 或用户设置 1。
    3. 单击用户设置保存。
    4. (可选)从用户默认设置下拉菜单中,选择用户设置 0 或用户设置 1。这样确保摄像头启动时加载该用户设置。
 
将设置保存到用户设置中,可确保摄像头即使在断电重启后也使用这些设置。

要开始流式传输,选择每个摄像头并单击 Play。 

使用 FlyCap2 (BFLY, FL3, GS3, CM3)

FlyCap2 是随 FlyCapture2 SDK 提供的演示程序。

对于主摄像头:

  1. 打开 FlyCap2,选择摄像头并单击配置选定内容。
  2. 仅针对 BFLY 摄像头,启用 3.3 V 线(红色):
    1. 在摄像头控制对话框中,选择摄像头寄存器选项卡。
    2. 输入寄存器码 19D0h (OUTPUT_VOLTAGE_ENABLE) 并单击读取寄存器。
    3. 将位 31 设置为 1。
    4. 单击写入寄存器。
  3. 针对所有摄像头,启用闪光灯:
    1. 选择触发/闪光灯选项卡。
    2. 仅针对 BFLY 摄像头,启用 GPIO1 的闪光灯。
      针对其他所有摄像头,启用 GPIO2 的闪光灯。
  4. 保存设置:
    1. 选择高级摄像头设置选项卡。
    2. 选择一个内存通道(1 或 2)。
    3. 单击保存。

对于每台副摄像头:

  1. 打开 FlyCap2,选择摄像头并单击配置选定内容。
  2. 在摄像头控制对话框中,选择触发/闪光灯选项卡。
  3. 仅针对 BFLY 摄像头,将源设为 0。
    针对其他所有摄像头,将源设为 3。
  4. 将 Mode 设为 0 或 14。 (并非所有型号都支持触发模式 14。)
  5. 选择启用/禁用触发。
  6. 保存设置:
    1. 选择高级摄像头设置选项卡。
    2. 选择一个内存通道(1 或 2)。
    3. 单击保存。
将设置保存到内存通道中,可确保摄像头即使在断电重启后也使用这些设置。

开始同时保存图像

在配置主摄像头和副摄像头后,即可开始保存同步的图像。

注意:如果以高带宽保存图像,我们建议使用控制台应用代替 SpinView 或 FlyCap2。 有关详细信息,请参见以高带宽保存图像

对于 SpinView 和 FlyCap2:

  1. 确保主摄像头的触发模式已打开。
  2. 在主摄像头的流式传输窗口中,单击录制按钮。
  3. 根据需要修改录制设置。
  4. 单击开始录制按钮。
  5. 使录制窗口保持打开状态。
  6. 对于副摄像头,重复第 1 步至第 5 步。
  7. 关闭主摄像头的触发模式。 这将启动两台摄像头的拍摄。

使用自定义模式

Spinnaker SDK 和 FlyCapture2 SDK 都附有示例代码。  可以结合这两个示例代码的元素来配置多台摄像头。

示例
SDK 位置
Spinnaker SDK AcquisitionMultipleCamera
Trigger
\src\ of the SDK directory
Example: C:\Program Files\Point Grey Research\Spinnaker\src
FlyCapture2 SDK MultipleCameraEx
AsyncTriggerEx
\src\ of the SDK directory
Example: C:\Program Files\Point Grey Research\FlyCapture2\src

在上述示例配置中,FL3、GS3 和 CM3 对其闪光灯输出使用可切换的输入/输出 GPIO 针脚。 使用这些摄像头进行同步拍摄时,必须打开闪光灯。 如果要开启频闪,请使用以下代码创建一个 StrobeControl 结构实例:

StrobeControl strobe;

strobe.source = 2;

error = cam.GetStrobe(&strobe);

strobe.onOff = true;

error = cam.SetStrobe(&strobe);

故障排除

副摄像头拍摄图像时的帧率是主摄像头的一半

原因:副摄像头未使用重叠触发

解决方案:在副摄像头上,切换到使用“触发重叠”,如上所述。 并非所有摄像头型号都支持“触发重叠”(触发模式 14)。 要确定其是否受支持,请参阅摄像头的技术参考,可从摄像头支持页面获得。

有关触发模式的更多信息以及重叠触发和非重叠触发之间的区别,请参阅以下知识库文章:

副摄像头以非常低的帧率拍摄图像

原因:摄像头的曝光(快门)值太大。

解决方案:可以调整曝光(快门)时间。

  • 在 SpinView 中 - 在 Settings 选项卡上
  • 在 FlyCap2 中 - 在摄像头控制对话框的摄像头设置选项卡上。

我无法正确触发多个辅助摄像头

原因:仅使用一台副摄像头对上面所示的物理设置进行了测试;我们无法保证它们适用于多台副摄像头。

解决方案:修改上拉电阻设置,使之适应其他摄像头。