3D机器视觉相机测试:如何用图钉触摸选定的气球而不刺破它-G

我们如何用图钉触摸选定的气球而不刺破它。

我们总是谈论拥有完全集成的2D和3D数据是多么美好。我们非常欣赏我们的3D点云带有完整的RGB图像(格式说明见文末)。在 2D 图像中找到描述要素的像素后,可以将其与相同像素的 3D 数据直接关联。由于Zivid相机可以提供所有这些信息,因此只需一台设备即可以完整清晰度查看您的工作空间。 

从同一传感器提供所有场景信息可简化系统的整体设置。例如,无需将外部 2D 彩色相机校准为与 3D 相机相同的坐标系。这也使机器人安装的任务变得简单明了,使您可以获得所需的所有信息,并在您的环境中具有成像灵活性。能够动态放置摄像机可以让您获得场景的最佳成像位置。 


我们想向你证明这一点,让我们向您展示一种有趣的方法,以探索颜色数据与高质量3D点云相结合的有用性。还有什么比用针触摸气球而不被刺破它更好的方法呢?很多颜色,一些嘈杂的噪音!这是点云:

步骤 1:生成检测

真实性 zivid 工作室截图 1
图 1:具有深度着色的气球点云

要开始构建我们的系统,我们将重点关注检测方面。第一个目标是在 2D 图像中找到气球。我们并不是要为这项任务构建一个完整的检测算法,而是采用一种相当基本的方法来检查场景中的颜色值。场景中的每个像素都有一个指定的 R、G、B 值。其中每个值的值都在 0-255 之间,比较这些值可以指示像素的颜色。这是一种相当粗糙的方法,但对于我们的快速设置来说是可以接受的。颜色值应按预期分布:

  • 红色:R > 200,G < 50,B < 50
  • 绿色:R < 80,G > 200,B > 60
  • 蓝色:R < 10,G < 80,B < 100
  • 黄色:R > 200,G > 200,B < 50

真实性 zivid 工作室截图 2图 2:气球的四种颜色的 2D 彩色图像。

对于我们的设置,背景要么是黑色的,要么是灰色的,这被上述条件语句所拒绝。选择一个语句,然后布尔逻辑允许我们创建一个与原始图像大小相同的二进制掩码。1 值将指示条件语句为 true 的区域,以及颜色为 false 的 0,这将显示在下面查找蓝色气球。

屏幕截图 2022-03-04 100826图 3:在捕获中找到蓝色值的区域的位图。

使用OpenCV,我们可以在位掩码上进行一些边缘检测,找到最大黄色部分的轮廓并填充它,显示我们发现气球表面的位置。该区域是我们寻找目标点位置的地方。下一步将是找到正确的方法方向。

真实性 zivid 工作室截图 3图 4:检测到的气球表面带有青色的 2D 图像。

利用Zivid提供的数据,我们可以找到有关点云中每个点的大量信息,而无需我们自己做任何额外的工作。现在,我们已经有了要触摸的点的 XYZ 位置,我们可以找到该点的进近方向。为此,我们可以使用Zivid SDK提供的表面法向量,并将其用作目标方向的Z轴,以创建一个可以驱动机器人的接近目标。此步骤要记住的一个关键部分是机器人将要接近的目标的X和Y方向。

屏幕截图 2022-03-04 100919图 5:模拟捕获显示围绕 Z 轴的两个不同姿势方向。

对于我们的案例,最佳实践是将X和Y方向对齐,使其与机器人在当前位置和方向上相似。这使我们能够将相机保持在手腕关节的上侧,并降低引起电缆拉伤或与机器人发生任何碰撞的风险。由于相机与地板平行,因此可以参考相机坐标系来帮助定义触摸姿势的 X 和 Y 矢量。

在拾取点的一侧选择一个点,以帮助定义用于定义姿势的帮助向量。然后,我们可以规范化此向量,并使用它来定义 y 向量,方法是使用帮助向量和 Z 向量的交叉积。现在我们有一个彼此垂直的 Y 和 Z 向量,我们可以使用它们来通过交叉积找到我们姿势的最终 X 向量。有了这三个向量,我们可以定义 4x4 齐次变换的旋转矩阵。

真实性 zivid 工作室截图 4图 6:在 3D 渲染上可视化目标姿势的屏幕截图

第 2 步:手眼校准

一个永远不会过时的主题是执行手眼校准。为了从您的系统中获得最佳精度,通过使用手眼校准找到从相机帧到末端执行器帧的转换是绝对必要的。安装时的任何小角度或变化都可能导致CAD图纸的输出截然不同。Zivid具有API支持以及CLI工具,可用于执行手眼对手和手对手设置的手眼。本练习中使用的校准目标是 ZVD-CB01 校准目标。该目标用于手眼和内场校正。为了在设置中获得最佳性能,建议在执行手眼校准之前执行内场校正。

重要!每次摄像机被撞击、撞击或从执行手眼的位置移开时,必须再次进行手眼操作。千分尺的运动或安装连接中几分之一度的变化可以极大地改变手眼转换。因此,必须遵守数据表中提供的Zivid安装硬件的建议密封性指南。

第 3 步:使用手眼校准

从手眼校准返回的变换采用 4x4 均质变换矩阵的形式。这是我们将用于此项目数学中所有转换的格式。 手眼变换可以与拾取点4x4矩阵相乘,将点位置转换为末端执行器框架,然后可以通过将其与机器人的姿势相乘来转换为机器人基础框架,也可以作为4x4变换。这会将TCP(工具中心点)需要移动到的点放入基础框架中,然后机器人可以驱动到该点。有了这个,你就有了一个气球触摸机器人!

借助 Zivid 摄像机,任务得到简化,可以查找和定位环境中对您重要的内容。我们的主要目标之一是,尽可能地对用户和开发人员友好。如果您对如何与 Zivid SDK 交互有任何其他疑问,请查看我们在 Github 上的所有示例(https://github.com/zivid)以及知识库中的资源。

点云结构和输出格式

有组织的点云

Zivid 输出有组织的点云。这意味着点云被布置为类似于图像结构的二维点阵列。无组织的点云通常存储为一维数组中的点列表。在这两种情况下,都会为每个点提供 XYZ 数据以及 RGB 值。

这种结构有几个优点。

  • 为无组织点云设计的算法也适用于有组织的,因为二维数组可以解释为一维数组。反过来,这并不总是正确的。
  • 有序点云在 2D 图像(颜色和深度)中的像素与点云中的 3D 点之间具有 1:1 的相关性。这意味着图像中的相邻像素是点云中的相邻点。这使得 2D 操作和算法能够应用于 2D 图像,而结果可以直接应用于点云。例如,对于对象检测和分割,可以分割 2D 图像并直接从所需像素中提取 3D 点。
  • 点的有序性加快了计算并降低了某些算法的成本,尤其是使用相邻点的操作。

Zivid 点云

Zivid 相机使用 2.3 MP 的传感器(Zivid One+ 为 1920 x 1200,Zivid Two 为 1944 x 1200)来捕捉场景的点云。

有多种方法可以从 SDK 获得分辨率。

生成的点云由 230 万个点组成。由于像素和点之间存在 1:1 的相关性,因此可以获得每个像素的 XYZ(mm)、RGB(8 位)和 SNR,其中 SNR 是信噪比。在 GPU 内部,3D 坐标、颜色值和 SNR 值存储为单独的 2D 数组,对于 Zivid One+,大小为 1920 x 1200,对于 Zivid 二,大小为 1944 x 1200。在用户端(CPU 内存),数据可以以不同的格式存储,具体取决于请求的方式。有关详细说明,请参阅点云教程

结构化点云颜色和深度图像可以直接从 Zivid 点云中提取。我们的GitHub 存储库中显示了如何执行此操作的示例。

Zivid 输出格式

在 Zivid Studio 中,您可以将点云保存在 Zivid 数据文件 (*.zdf) 中。此外,您可以按以下格式导出点云(文件 → 导出):

  • PLY 文件 - 无序点 (*.ply)
  • PLY 文件 - 有序点 (*.ply)
  • ASCII 点 (*.xyz)
  • 点云数据文件 - 无序点 (*.pcd)。可以配置为存储为有序点,有关如何将 PCD 导出为有序点的教程,请参阅有组织的 PCD 格式。

Zivid Studio 导出选项Zivid 数据文件 (*.zdf) 是本机 Zivid 文件格式。如果您使用 API,您可以遍历点云并以您喜欢的任何格式保存 X、Y、Z、R、G、B 和 SNR 数据。查看我们的示例,了解如何使用C++、C#、Python和MATLAB读取或转换 Zivid 数据。

提示

查看 Zivid 点云的最简单方法是将 ZDF 文件复制到您的 PC 并使用Zivid Studio。或者,您可以使用 API 将 ZDF 转换为 PLY(或使用我们的Python 脚本)并使用 3D 查看器,例如MeshLab或CloudCompare。

ASCII 点 (*.xyz)

ASCII 字符用于存储笛卡尔坐标。XYZ 用空格分隔。在我们的版本中,还为每个点添加了 RGB 值。每个新点都用换行符分隔。该文件可以在常规文本编辑器中查看。

层文件 (*.ply)

PLY 是斯坦福大学开发的一种文件格式。

点云数据文件 (*.pcd)

PCD 是点云库的原生文件格式。

有组织的 PCD 格式

Zivid SDK 存储有序点云,并带有指示无序点云的标头。从 SDK 2.5 开始,可以使用 Config.yml 文件配置 SDK,以导出带有指示有序点云的正确标头的 PCD。

视觉魔法师

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐