设置选择器

本章节将根据您从触发图像采集到获得点云的时间预算,提供最佳的相机设置的详细指南。此处我们还会考虑您的电脑配置,因为数据传输和点云处理也依赖于硬件性能。我们将介绍用于获取高质量点云的 3D 捕获设置,以及用于获取高质量彩色图像的 2D 捕获设置。

您已经确定了适用于拆(码垛)应用的 Zivid 相机型号,并已正确安装和定位。下一步是根据您的电脑配置,选择能够满足循环时间要求的相机设置。如果您尚未配备电脑,本节还将帮助您确定所需的电脑配置,以确保在所选相机设置下满足图像捕获时间的要求。

3D 设置

../../../_images/rendered_palletization_scene.jpg

对于简单的场景和简单的对象,请参考上图中的左侧托盘,使用 Z3 XL250 Fast 预设值。

对于包含混合 SKU 的复杂场景,请使用 Z3 XL250 Quality 预设值。

2D 设置

拆垛预设值包含了 2D 设置。

在远距离和强环境光条件下推荐使用的预设值采用了一种特殊的 RGB 模式,可增强色彩表现,但代价是捕获时间会有所增加。

避免闪烁光源的干扰

闪烁光源(10–1000 Hz),例如条码扫描器和荧光灯管,可能会对 Zivid 相机造成干扰。这种干扰可能表现为 彩色图像中的颜色不一致 。为防止此类干扰,请确保闪烁光源满足以下任一条件:

  1. 连续且频率与 Zivid 相机曝光时间相关

  2. 连续且频率与 Zivid 相机采样间隔相关

  3. 在Zivid相机采集期间处于非活动状态

在有光源的情况下进行配置

第一步是确定光源的频率。如果您不确定频率,可以使用 Zivid 相机进行测量。

检测和测量环境光频率

打开 Zivid Studio 并连接到您的相机。点击 Capture 部分中的三个点。然后点击 Measure scene lighting conditions 。软件将显示检测到的环境光闪烁频率。

../../../_images/studio-measure-ambient-light.png

或者,您可以使用 SDK 来测量环境光照条件。此方法将报告是否检测到明显的环境光闪烁,以及它是否对应于 50 Hz 或 60 Hz 的电网。

跳转到源码

源码

std::cout << "Measuring scene conditions" << std::endl;
auto sceneConditions = camera.measureSceneConditions();
auto flickerClassification = sceneConditions.ambientLight().flickerClassification().toString();
std::cout << "Flicker classification: " << flickerClassification << std::endl;
    auto flickerFrequency = sceneConditions.ambientLight().flickerFrequency();
    std::cout << "Measured flickering frequency in the scene: " << flickerFrequency << " Hz." << std::endl;
跳转到源码

源码

Console.WriteLine("Measuring scene conditions");
var sceneConditions = camera.MeasureSceneConditions();
var flickerClassification = sceneConditions.AmbientLight.FlickerClassification.ToString();
Console.WriteLine("Flicker classification: " + flickerClassification);
    var flickerFrequency = sceneConditions.AmbientLight.FlickerFrequency;
    Console.WriteLine($"Measured flickering frequency in the scene: {flickerFrequency} Hz.");
跳转到源码

源码

print("Measuring scene conditions")
scene_conditions = camera.measure_scene_conditions()
flicker_classification = scene_conditions.ambient_light.flicker_classification
print(f"Flicker classification: {flicker_classification}")
    flicker_frequency = scene_conditions.ambient_light.flicker_frequency
    print(f"The measured flickering frequency in the scene: {flicker_frequency} Hz.")

如果只测量一个光源(例如条形码扫描器),请关闭场景中的所有其他光源(例如环境光)。

然后,您可以选择配置主动光源或 Zivid 相机设置,以避免干扰。

使用以下方法将活动光源(例如,条形码扫描仪)频率( \(f_c\) )与 Zivid 相机曝光时间( \(t_z\) )进行匹配:

\[f_c = \frac{1}{t_z}\]

例如:

\[t_z = 10\,000\,\mu s \Rightarrow f_c = 100\,Hz\]

使用以下公式将 Zivid 相机的曝光时间 ( \(t_z\) ) 与活动光源(例如条形码扫描器)的频率 ( \(f_c\) ) 相匹配:

\[t_z = \frac{1}{f_c}\]

例如:

\[f_c = 140\,Hz \Rightarrow t_z = 7\,143\,\mu s\]

如果计算出的曝光时间不可行,则使用相同的公式将 2D 采样间隔 ( \(t_z\) ) 设置为与活动光源频率 ( \(f_c\) ) 相匹配:

\[t_z = \frac{1}{f_c}\]

例如:

\[f_c = 140\,Hz \Rightarrow t_z = 7\,143\,\mu s\]

例如,当为了补偿较长的曝光时间而过度降低投影仪亮度时,就会出现这种情况,从而导致彩色图像出现明显的噪点。这种情况在使用了 Settings2D::Sampling::Color 下的 rgb 模式时会出现,而使用 rgbStrongAmbientLight 模式则不会。另一个例子是过曝,如果无法通过其他采集设置(例如增益或投影仪亮度)充分补偿较长的曝光时间,就会发生过曝。

在同时存在活动和闪烁的交流电源的情况下进行配置

使用电网线频率调制(例如,美国为 60 Hz,欧盟为 50 Hz)的强且不可控的光源会带来额外的挑战。由于无法更改交流电源光源(例如荧光灯管)的频率,因此您需要调整 Zivid 相机的设置以及正在使用的光源的频率。

配置 Zivid 相机

为了减轻 环境光的干扰 ,应将 Zivid 相机的曝光时间设置为电网频率的倍数。

  • 10 000 µs or 20 000 µs in the presence of 50 Hz grid frequency.

  • 8 333 µs or 16 667 µs in the presence of 60 Hz grid frequency.

如果由于 2D 图像过度曝光而无法调整曝光时间以匹配电网频率,则启用 2D 采样间隔(sampling interval) 并将其与您所在区域的电网频率同步。

  • 10 000 µs in the presence of 50 Hz grid frequency.

  • 8 333 µs in the presence of 60 Hz grid frequency.

必须配置 2D 采集的曝光时间或 2D 采样间隔持续时间,以避免 颜色不一致(随机色调) 。对于3D 采集,除非观察到 环境光干扰产生的波纹 问题,否则无需进行此操作。

与 2D 采样间隔匹配相比,曝光时间匹配方案更受欢迎,因为它能提供更好的性能和更一致的捕获时间。

配置主动光源

最后,与 Zivid 相机曝光时间相匹配的主动闪烁光源的频率可按以下方式计算:

\[f_c = n \times f_{line}\]
\[f_{line} = 60 Hz \Rightarrow f_c = n \times 60\,Hz = 60, 120, 180, 240\,Hz\]
\[f_{line} = 50 Hz \Rightarrow f_c = n \times 50\,Hz = 50, 100, 150, 200\,Hz\]

在下一章节中,我们将介绍如何通过使用多线程来 优化机器人循环时间