配置多个摄像头进行同步拍摄
什么是同步拍摄?
同步拍摄是指两台或以上的摄像头同时捕捉图像;我们对“同时”的定义是指摄像头必须在几微米的时间差内开始曝光每组图像。 为实现此目的,我们展示了如何利用主摄像头的频闪(摄像头开始捕捉图像时默认出现频闪)通过一台“主”摄像头触发另一台或多台“副”摄像头。 这也可以确保副摄像头的帧率与主摄像头的帧率相同。
注意:同步拍摄的替代方法是通过外部硬件触发器(例如,功能生成器)触发所有摄像头。 任何提供 3.3 或 5 V 方波 TTL 信号的硬件触发器都可以触发摄像头。 这一应用的注意事项未明确说明外部硬件触发器的配置,但使用外部硬件触发器的用户可以将其视为主要摄像头,然后按照本文中提到的物理布局部分进行操作(如果使用上拉电阻,可以忽略,因为外部硬件触发器不需要)。
配置同步拍摄
配置同步拍摄有两个步骤:
- 连接摄像头的 GPIO 针脚,在摄像头之间建立物理连接。
- 使用 SDK 演示应用或代码配置每台摄像头的输入和输出。
第 1 步 - 连接摄像头
第一步是在摄像头之间建立物理连接。 方法因使用的摄像头而异。
Blackfly S (BFS)
BFS 摄像头配有一个 6 针 GPIO。 BFS GPIO 同时配备一个非隔离输出和一个光电隔离输出。 如果如下例所述使用光电隔离输出,主摄像头需要一个上拉电阻来增强它的闪光灯信号。
图 | 颜色 | 针脚 | 线 | 功能 | 说明 |
---|---|---|---|---|---|
绿色 | 1 | 3 | VAUX | 辅助输入电压 (DC) | |
GPI | 非隔离输入 | ||||
黑色 | 2 | 0 | OPTOIN | 光电隔离输入 | |
红色 | 3 | 2 | VOUT | 摄像头电源输出 | |
GPIO | 非隔离输入/输出 | ||||
白色 | 4 | 1 | OPTOOUT | 光电隔离输出 | |
蓝色 | 5 | 不适用 | 光电 GND | 光电隔离地线 | |
棕色 | 6 | 不适用 | 地线 | 摄像头电源地线 |
要配置 BFS 的主摄像头和副摄像头:
- 将主摄像头的第 4 针(白线,光电隔离输出)连接到每个副摄像头的第 1 针(绿线,非隔离输入)。
- 将主摄像头的第 5 针(蓝线,光电隔离地线)连接到每个副摄像头的第 6 针(棕线,地线)。
要配置所需的上拉电阻以增强信号:
- 将 10 kΩ 电阻的一端连接到主摄像头的第 3 针(红线,3.3 V 输出)。
- 将电阻的另一端连接到主摄像头的第 4 针(白线)以及每个副摄像头的第 1 针(绿线)。
- 将主摄像头的第 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 的主摄像头和副摄像头:
- 将主摄像头的第 4 针(白线,光电隔离输出)连接到每个副摄像头的第 2 针(黑线,光电隔离输入)。
- 将主摄像头的第 5 针(蓝线,光电地线)连接到每个副摄像头的第 5 针(蓝线,光电地线)。
要配置所需的上拉电阻以增强信号:
- 将 460 Ω 电阻的一端连接到主摄像头的第 3 针(红线,3.3 V 输出)。
- 将电阻的另一端连接到主摄像头的第 4 针(白线)以及每个副摄像头的第 2 针(黑线)。
- 将主摄像头的第 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 的主摄像头和副摄像头:
- 将主摄像头的第 5 针(紫线,输出)连接到每个副摄像头的第 4 针(绿线,输入)。
- 将主摄像头的第 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 的主摄像头和副摄像头:
- 将主摄像头的第 3 针(红线,输出)连接到每个副摄像头的第 4 针(绿线,输入)。
- 将主摄像头的第 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 的主摄像头和副摄像头:
- 将主摄像头的第 7 针(白/黑条纹线,输出)连接到每个副摄像头的第 8 针(红/黑条纹线,输入)。
- 将主摄像头的第 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 提供的演示程序。
对于主摄像头:
- 打开 SpinView。
- 选择摄像头。
- 在功能选项卡上,单击数字 IO 控制。
- 设置
- CM3、FL3、GS3、FFY-DL 和 ORX 摄像头的输出线,从线选择下拉菜单中选择行 2,并将线模式设置为输出。
- 对于 BFS 摄像头,从线选择下拉菜单中选择行 1,然后将线模式设置为输出。
- 对于 BFS 和 BFLY 摄像头,请启用 3.3V 线
- 对于 BFS 摄像头,请从线选择下拉菜单中选择行 2,并勾选 3.3V 启用复选框。
- 对于 BFLY 摄像头,请将 3.3V 启用设置为真
- (可选) 在用户设置中保存设置:
- 单击用户设置控制。
- 从用户设置选择器下拉列表中,选择用户设置 0 或用户设置 1。
- 单击用户设置保存。
- (可选)从用户默认设置下拉菜单中,选择用户设置 0 或用户设置 1。这样确保摄像头启动时加载该用户设置。
对于每台副摄像头:
- 打开 SpinView 并选择摄像头。
- 选择 GPIO 选项卡。
- 设置触发源
- 对于 BFS、CM3、FL3、FFY-DL 和 GS3 摄像头,请从触发源下拉菜单中,选择线 3。
- 对于 ORX 摄像头,请从触发源下拉菜单中,选择线 5。
- 对于 ORX 摄像头,请从触发源下拉菜单中,选择线 0
- 从触发重叠拉列表中,选择读出。
- 从触发模式下拉列表中,选择开启。
- (可选)在用户设置中保存设置:
-
- 单击用户设置控制。
- 从用户设置选择器下拉列表中,选择用户设置 0 或用户设置 1。
- 单击用户设置保存。
- (可选)从用户默认设置下拉菜单中,选择用户设置 0 或用户设置 1。这样确保摄像头启动时加载该用户设置。
要开始流式传输,选择每个摄像头并单击 Play。
使用 FlyCap2 (BFLY, FL3, GS3, CM3)
FlyCap2 是随 FlyCapture2 SDK 提供的演示程序。
对于主摄像头:
- 打开 FlyCap2,选择摄像头并单击配置选定内容。
- 仅针对 BFLY 摄像头,启用 3.3 V 线(红色):
- 在摄像头控制对话框中,选择摄像头寄存器选项卡。
- 输入寄存器码 19D0h (OUTPUT_VOLTAGE_ENABLE) 并单击读取寄存器。
- 将位 31 设置为 1。
- 单击写入寄存器。
- 针对所有摄像头,启用闪光灯:
- 选择触发/闪光灯选项卡。
- 仅针对 BFLY 摄像头,启用 GPIO1 的闪光灯。
针对其他所有摄像头,启用 GPIO2 的闪光灯。
- 保存设置:
- 选择高级摄像头设置选项卡。
- 选择一个内存通道(1 或 2)。
- 单击保存。
对于每台副摄像头:
- 打开 FlyCap2,选择摄像头并单击配置选定内容。
- 在摄像头控制对话框中,选择触发/闪光灯选项卡。
- 仅针对 BFLY 摄像头,将源设为 0。
针对其他所有摄像头,将源设为 3。 - 将 Mode 设为 0 或 14。 (并非所有型号都支持触发模式 14。)
- 选择启用/禁用触发。
- 保存设置:
- 选择高级摄像头设置选项卡。
- 选择一个内存通道(1 或 2)。
- 单击保存。
开始同时保存图像
在配置主摄像头和副摄像头后,即可开始保存同步的图像。
注意:如果以高带宽保存图像,我们建议使用控制台应用代替 SpinView 或 FlyCap2。 有关详细信息,请参见以高带宽保存图像。
对于 SpinView 和 FlyCap2:
- 确保主摄像头的触发模式已打开。
- 在主摄像头的流式传输窗口中,单击录制按钮。
- 根据需要修改录制设置。
- 单击开始录制按钮。
- 使录制窗口保持打开状态。
- 对于副摄像头,重复第 1 步至第 5 步。
- 关闭主摄像头的触发模式。 这将启动两台摄像头的拍摄。
使用自定义模式
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 中 - 在摄像头控制对话框的摄像头设置选项卡上。
我无法正确触发多个辅助摄像头
原因:仅使用一台副摄像头对上面所示的物理设置进行了测试;我们无法保证它们适用于多台副摄像头。
解决方案:修改上拉电阻设置,使之适应其他摄像头。