生产准备过程
我们在Zivid SDK中有多个流程和工具可帮助您设置好系统并为生产做好准备。我们建议在部署之前进行的必要的操作包括:
预热
现场标定
手眼标定
我们可以通过执行这些流程模仿生产条件来优化相机的工作温度、距离和 :abbr:` FOV(视野)` 。其它可能帮助您减少生产过程中的处理时间从而最大限度地提高抓取率的工具包括:
降采样
坐标系转换和ROI框过滤
机器人标定
在开始生产之前,您应该确保您的机器人经过良好校正,并展现出良好的定位精度。关于何如进行机器人运动学校正和机器人校正零点的信息,请联系您的机器人供应商。
预热
对Zivid 3D相机进行预热并达到热平衡,可以提高应用的整体准确性和成功率。如果应用有着严格的公差要求,则建议使用此方法,例如,距离相机每米距离的公差<5毫米的3D抓取应用。使用预热过的相机进行现场标定和手眼标定能够获得更好的结果。
如需对您的相机进行预热,您可以运行我们的代码示例,您需要输入循环时间和相机设置路径。
示例: warmup.py
python /path/to/warmup.py --settings-path /path/to/settings.yml --capture-cycle 6.0
如需了解为什么需要预热以及如何使用SDK进行预热,请阅读 预热 。
现场标定
现场标定是一个维护工具,可用于验证和校正Zivid相机的尺寸准确度。用户可以检查视场 (FOV) 中不同区域的点云的尺寸准确度,并确定验证结果是否符合您的应用要求。如果发现验证结果对于应用来说不够准确,则可以执行校正以增加点云的尺寸准确度。多次测量的平均尺寸准确度误差的预期值接近于零 (<0.1%)。
为什么这是必要的?
我们的相机被设计为可以在工业工作环境中工作并持续输出高质量的点云。然而,与大多数高精密电子仪器一样,有时可能需要进行一些调整以确保它们能够一直保持最佳性能。当相机在其环境中经历重大改动或繁重的装卸时,可能需要进行校正才能在新的设置中以最佳状况执行工作。
如果您第一次进行这些操作,请阅读有关 现场标定 的更多信息。
进行现场验证时,需要确保料箱顶部和底部的尺寸准确度都是良好的。对于相机安装在手臂上的应用,在进行现场验证时,将机器人移动到捕获位姿。如果验证结果良好,则无需运行内场校正。
Calibration board at bin top for infield verification |
Calibration board at bin bottom for infield verification |
当需要进行现场标定时,覆盖整个工作立体区域可以获得最佳的结果。这意味着需要将 Zivid calibration board 先后放置给定距离处的多个不同位置执行校正,并在不同的拍照距离重复以上操作,在这个过程中,请确保整个标定板一直都在相机的 FOV 中。选定箱子底部的数个位置和箱子顶部的数个位置进行校正足以满足单品拣选的要求。您可以查看 进行现场标定的准则 来了解更多信息。
您可以使用Zivid CLI工具 ZividExperimentalInfieldCorrection
来执行现场验证和/或校正。
DESCRIPTION
Tool for verifying, computing and updating in-field correction parameters on a Zivid camera
SYNOPSIS
ZividExperimentalInfieldCorrection.exe (verify|correct|read|reset) [-h]
OPTIONS
verify verify camera correction quality based on a single capture
correct calculate in-field correction based on a series of captures at different distances and positions
read get information about the correction currently on the connected camera
reset reset correction on connected camera to factory settings
verify :此功能使用单次捕获来确定放置的Zivid标定板点云的局部尺寸准确度。
correct :此功能通过拍摄Zivid标定板来确定必要的参数,以提高点云的精度。该功能还将返回校正后的误差,即在拍摄图像的工作距离上的1σ(标准差)统计确定性。
reset : 使用重置功能将删除之前正确应用的现场标定的结果。 在进行新的现场标定之前不需要进行重置。
read :读取功能将返回上一次将现场标定结果写入相机的时间。
如果在安装期间将Zivid安装到自定义路径,则CLI工具也位于该路径下,否则,CLI工具位于 C:\Program Files\Zivid\bin
下。
CLI 工具位于主路径中。
查看 运行现场标定 来获取有关Infield API和代码示例的更多信息。
手眼标定
The picking accuracy of a vision-guided robotic system depends on the combined accuracy of the camera, hand-eye calibration, machine vision software, and robot’s positioning. Robots are in general highly repeatable but not accurate. Temperature, joint friction, payload, and manufacturing tolerances are some of the factors that cause the robot to deviate from its preprogrammed positioning. However, robot pose accuracy can be improved by calibrating the robot itself, which is highly recommended for complex systems with multiple factors that affect the picking accuracy. If the robot loses the calibration, the picking accuracy will deteriorate. Repeating the calibration (robot and/or hand-eye) can compensate for such deteriorated performance. It is also necessary to repeat the hand-eye calibration after dismounting the camera from a fixed structure or a robot and mounting it back on.
我们提供了代码示例,您可以轻松地执行手眼标定:
或者,可以使用CLI工具计算手眼坐标转换:
完成手眼标定后,您可能需要验证生成的变换矩阵是否正确并在精度要求内。我们提供了两种选择:
如需了解有关该主题的更多信息,请查看 手眼标定 。
色彩平衡
在SDK中有调整红色、绿色和蓝色通道的颜色平衡值的功能。非完全白色和/或非常强的环境光会影响彩色图像的RGB值。如果您的应用需要使用准确的RGB值,请在相机上运行色彩平衡。如果您没有使用Zivid相机的投影仪来捕获彩色图像,通常更需要进行色彩平衡的调整。 在 SDK 中,我们具有调整红色、绿色和蓝色通道的颜色平衡值的功能。不是完全白色和/或非常强的环境光会影响彩色图像的 RGB 值。如果您的应用程序需要正确的 RGB,请在相机上运行色彩平衡。如果您不使用 Zivid 相机投影仪捕捉彩色图像,情况尤其如此。
Point cloud before color balance |
Point cloud after color balance |
如需平衡2D图像的颜色,您可以运行我们的代码示例,您还需要提供2D采集设置的路径。
示例: color_balance.py
python color_balance.py /path/to/settings.yml
作为输出,具有新色彩平衡增益的2D采集设置会被保存到文件中。
请查看我们的 调整色彩平衡 页面以获取进一步的说明,如何使用SDK执行它以及代码示例演练。
降采样
一些应用不需要高密度的点云数据,例如通过将平面拟合到盒子表面来进行盒子检测。此外,由于数据量通常太大,机器视觉算法可能无法以应用程序所需的速度进行处理。点云降采样可以在这些应用中发挥作用。
点云上下文中的降采样是在保持相同3D表征的情况下降低空间分辨率。它通常用于将数据转换为更易于管理的大小,从而减少存储和处理要求。
Point cloud before downsampling |
Point cloud after downsampling |
降采样可以就地完成,该功能会修改当前的点云。
pointCloud.downsample(Zivid::PointCloud::Downsampling::by2x2);
pointCloud.Downsample(Zivid.NET.PointCloud.Downsampling.By2x2);
point_cloud.downsample(zivid.PointCloud.Downsampling.by2x2)
也可以将降采样点云作为新的点云实例,这样就不会改变现有的点云了。
auto downsampledPointCloud = pointCloud.downsampled(Zivid::PointCloud::Downsampling::by2x2);
var downsampledPointCloud = pointCloud.Downsampled(Zivid.NET.PointCloud.Downsampling.By2x2);
downsampled_point_cloud = point_cloud.downsampled(zivid.PointCloud.Downsampling.by2x2)
Zivid SDK 支持以下降采样率 by2x2
、 by3x3
和 by4x4
,支持多次执行降采样操作。
要对点云进行降采样,您可以运行我们的代码示例,或者现在可以跳过它,并将其作为本教程下一步的一部分进行。
示例: downsample.py
python /path/to/downsample.py --zdf-path /path/to/file.zdf
如果您没有ZDF文件,则可以运行以下代码示例。它将使用您的设置来捕获Zivid点云,并保存到文件中。
示例: capture_with_settings_from_yml
python /path/to/capture_with_settings_from_yml.py --settings-path /path/to/settings.yml
如需阅读有关降减采样的更多信息,请转到 降采样 。
点云转换和ROI BOX过滤
相机视野通常大于我们的感兴趣区域 (ROI),例如料箱。如果我们想进一步减少检测算法使用的数据点的数量,我们可以在料箱周围设置一个ROI框,并根据它来裁剪点云,只获取料箱内区域的点。减少数据点的数量不会减少捕获时间,因为ROI过滤是一个后处理步骤。然而,它可以加快目标检测算法,从而减少总循环时间。
小技巧
较小的点云可以使检测速度更快,总抓取周期时间更短。
有关实现该功能的示例,请查看 通过棋盘格实现的ROI框过滤器 。该教程演示了如何根据给定的相对于棋盘格的ROI框过滤转换到棋盘格坐标系的点云。
这种ROI方法需要将整个点云从相机坐标系转换到 Zivid calibration board 坐标系。如需阅读有关点云转换的更多信息,请查看 转换 。
Downsampled point cloud before ROI cropping |
Downsampled point cloud after ROI cropping |
如需对点云进行降采样并根据ROI框对其进行过滤,您可以运行我们的代码示例,您需要提供以下内容:
ZDF文件的路径
ROI框左下角相对于棋盘框的位置
ROI框大小
降采样率
示例: roi_box_via_checkerboard.py
python roi_box_via_checkerboard.py --zdf-path /path/to/file.zdf --roi-box-bottom-left-corner-x -80 --roi-box-bottom-left-corner-y 280 --roi-box-bottom-left-corner-z 5 --box-dimension-in-axis-x 600 --box-dimension-in-axis-y 400 --box-dimension-in-axis-z 80 --downsample by2x2
祝贺您已经阅读完关于将您的单品拣选系统投入生产的准备工作中的所有与Zivid有关的内容了。接下来的章节是 维护 ,里面包含了我们建议执行的所有流程,以确保单品拣选单元能在最小停机时间的情况下保持稳定运行。