视觉

本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 连接机械臂,完成机械臂连接。

场景要求

料箱拆码垛的场景采用 类料箱拆垛(高精度) 模板,该流图适用于平铺、紧密摆放、同种已知规格的料箱类物体(如料箱、圆桶、轮胎等)识别及拆码垛。

  • 需要装备高精度相机,如结构光相机,且支持混拆

  • 需要使用3D相机的彩色图进行2D模板匹配

  • 需要使用3D相机的点云和物体CAD模型进行模型点云匹配

本章节描述的相关配置仅供参考,具体操作请以实际项目为准。

基本配置

配置前,请依次完成 新建项目添加容器,并使用 类料箱拆垛(高精度) 模板创建视觉服务,请参见 创建流图。创建完成之后会在左上角生成节点树,如下图所示。

../../../_images/totevision.png

根据需求,依次配置这些模块。

步骤1. 配置相机模块 (请参见 连接相机。)

步骤2. 配置加载标定信息模块 (请参见 手眼标定。)

步骤3. 配置去除料筐外点云模块

  1. 单击左侧节点树中的 去除料框外点云 模块,然后在右侧配置点云切割参数,然后单击预览窗口中的 触发

    ../../../_images/toteout4.png
    • X方向收缩长度:料筐沿X方向的收缩长度,负值则意味着扩张。

    • Y方向收缩长度:料筐沿Y方向的收缩长度,负值则意味着扩张。

    • 底部抬升高度:料筐底部抬升高度,负值则意味着下降。

    • 顶部下降高度:料筐顶部下降高度,负值则意味着抬升。

  2. 在预览视图中移动料筐模型,使之与点云中的料筐位置吻合。

  3. 可视化显示 区域选择需要查看的图像。

    • 未切割点云图:仅显示未去除料筐外点云的图像。

    ../../../_images/cloud14.png
    • 切割对比图:对比显示切割前后的图像,被切割的点云用白色显示。

    ../../../_images/cloud24.png
    • 切割完点云图:仅显示去除料筐外点云的图像。

    ../../../_images/cloud34.png

步骤4. 配置计算最高层高度模块

  1. 单击左侧节点树中的 计算最高层高度 模块,然后在右侧配置计算参数。该模块用于计算抓取后,输入工件所在区域的高度,然后通过抓取前后高度差获取工件高度。

    ../../../_images/height2.png
    • 顶层最少点数:最高层的最少点云数量,可根据麻袋大小进行调整。

    • 输出高度的坐标系:输出的高度所在坐标系。Tote表示工作空间坐标系,World表示将高度转换到世界坐标系。

    • 降采样栅格大小:增大该值会使点云更稀疏,仅用于减少噪点。单位:米。

    • 层厚:点云划分每一层的厚度,该值建议经验丰富的工程师使用,一般使用者不建议使用。单位:米。

    • 提取点云范围:提取最高层上下该值范围内的点云,为后续模块过滤非最高层麻袋点云,以防止误识别。单位:米。

    • 输出点云的类型:Dense模式表示点云线性存储,不存在无效点;Organized模式表示点云存储在2D结构中,包含无效点。

  2. 在预览区选择输入、输出,再单击 运行重新拍照后运行,查看处理后的输出结果。

    ../../../_images/heightresult2.png

步骤5. 配置生成高度图模块

  1. 单击左侧节点树中的 生成高度图 模块,然后在右侧配置计算参数。该模块用于将料箱坐标系下的点云投影到料箱底面,形成高度图。

    ../../../_images/heightmap.png
    • 像素大小:每个像素对应的物理尺寸的大小。

    • 可视化像素值:一个像素值对应的高度数值。

  2. 在预览区选择输入、输出,再单击 运行重新拍照后运行,查看处理后的输出结果。

    ../../../_images/hmapresult.png

步骤6. 配置2D形状匹配模块

  1. 创建模板。

    1. (可选,该步骤仅对 眼在手上 的场景生效,眼在手外的场景请跳过此步骤。)单击Max右上角的 设置拍照位姿,在弹出的窗口中设置视觉服务、相机ID,单击 获取机械臂位姿,然后单击 设置拍照位姿 即可获取最新的拍照位姿。

    ../../../_images/train81.png
    1. 单击左侧节点树中的 2D形状匹配 模块,在 检测物体 页签下单击 创建模板 开始训练工件模板。本项目选择 从图片训练模板 ,如果有3D模型也可选择 从3D模型训练模板。如果有已训练好的模板,可以直接选择模板检测物体。

    ../../../_images/train01.png
    1. 训练工件模板 页签单击 创建工件类型 并给工件类型命名,工件模板名称默认与工件类型名称相同,用户可自行修改。测量工件尺寸,并输入工件长、宽、高。然后根据需求设置基础参数,开始训练工件模板。

    ../../../_images/train11.png
  2. 训练模板。

    1. 在预览窗口单击 单次拍照 获取图像,然后设置检测区域,检测区域尽量贴合工件边缘。如下图所示,是设置好检测区域的结果。

      使用 rangeselect ,拖动矩形框修改尺寸和位置。如果不满意,可单击预览区左侧的 2drange,调整矩形尺寸和位置,也可使用 rangeselect 重新设置检测区域。

    ../../../_images/train21.png
    1. 设置物体中心,对于料箱,尽量贴近矩形的几何中心。设置时,可以选中并拖动坐标系进行移动和旋转,使其基本位于模型中心,x轴(红)沿料箱长边方向,y轴(绿)沿料箱短边方向。

    ../../../_images/train31.png
    1. 单击 extract,根据需要调整对比度,然后单击 提取一次 获取特征点。

      ../../../_images/extract21.png

      自动提取的特征点如下图所示。

      ../../../_images/extract31.png

    提示

    • Max提供三种注册物体特征的方式:圆形、矩形、自定义图形。对于不规则工件,用户可选择自定义图形,手动勾画特征点并连接成线,尽量与工件边缘保持贴合以更好地注册物体特征。

    • 在训练模板时,注意打光方式,使得工件的阴影区域越小越好。

    1. 单击 保存并训练 Max自动完成工件模板训练,然后单击 完成 可使用训练好的模板。

  3. 检测物体。

    1. 检测物体 页签选择已训练完成的工件模板。

    ../../../_images/train51.png
    1. 设置显示参数,用户可根据需要选择是否显示匹配点、分数和边缘。

    2. 设置检测参数,各参数含义如下。

      • 最小检测分数:最大为100,分数越高匹配越准确,但匹配的数量可能减少。

      • 有效检测数量:检测物体的最大数量,最小值为1。

      • 检测对比度:数值越小,边缘越多,检测速度越慢,精度不一定提升。

      • 弱检测对比度:处于该值与对比度之间的点会根据连接性进行选择,可增加边缘点连续性。

      • 非极大值抑制分数:检测出来的两个物体的交并比(重叠区域面积/两物体总面积)大于该值时,检测分数低的物体会被略去。

      • 启用所有物体非极大值抑制:是否启用所有类型物体的非极大值抑制。

      • 扩增像素和金字塔:图像金字塔梯度扩增像素数。

    3. 单击 运行检测,开始检测物体,根据显示参数的设置会在图像预览区显示结果。

    ../../../_images/train61.png

步骤7. 配置生成图像掩膜模块

  1. 单击 生成高度图 模块,然后单击 获取输入数据,以获取物体位姿。

    ../../../_images/mask1.png
    • 像素大小:每个像素对应的物理尺寸的大小。

    • 可视化像素值:一个像素值对应的高度数值。

  2. 在列表中选中物体,然后单击“上表面蒙板”的 注册

  1. 选中 draw ,勾勒出料箱的外边框和内边框。然后单击 生成上表面蒙板 即可生成掩膜。再单击 完成 即可注册完成。

    ../../../_images/mask2.png
  2. 设置上表面蒙板和模型 页签下单击 应用蒙板 ,后续模块即可使用该掩膜。

    ../../../_images/mask3.png

步骤8. 配置加载点云模块

单击 加载点云 模块,加载指定路径下的点云或模型。

../../../_images/loadcloud.png

加载点云支持3种模式。

  • file:不使用输入端口的数据,读取指定路径的点云或模型。

  • correspondence:此模式使用输入端口0的3D工件,根据工件名读取对应的点云或模型。

  • auto:此模式使用输入端口1的字符串,根据解析得到的路径读取的点云或模型。

参数设置及其含义如下。

  • 文件:3D模型路径,支持pcd、ply和stl格式。

  • 路径:点云或模型文件夹路径。

  • 采样点个数:stl模型采样点个数。

  • 是否缓存:是否缓存,如果不缓存,则每次运行强制重新读取。

步骤9. 配置顶层点云覆盖度检查模块

  1. 单击 顶层点云覆盖度检查 模块,然后在右侧配置计算参数。通过最高层的点云和已经检测到的3D物体,来检查最高层点云是否已经被完全覆盖,若没有覆盖则说明漏检。
    • 请尽可能保证输入点云没有除工件之外的其他扰乱点,比如地面点云。

    ../../../_images/topcover1.png
    • 模式:可选择relative、points_num两种模式。

      • relative:根据未覆盖率检查顶层点云覆盖度。未覆盖率=未覆盖点数量/每个物体平均点数量。未覆盖率越小,未覆盖点越少。如果未被覆盖率大于完整度阈值,完整度检查失败。

      • points_num:比较未被覆盖点个数和最大允许的未被覆盖点个数,如果未被覆盖点个数大于最大允许的未被覆盖点个数,完整度检查失败。

    • z轴阈值:决定一个点经过投影后是否在3D物体内部的z轴阈值。

    • x/y轴阈值:决定一个点是否在3D物体内部的xy轴阈值。

    • 完整度阈值:该参数仅在relative模式下有效,表示未覆盖率阈值。

    • 最大允许的未被覆盖点个数:该参数仅在points_num模式下有效。

  2. 依次单击 运行并获取输入数据检测,检测通过会有弹窗提示。若未通过检测,请调整前面步骤中的参数。

    ../../../_images/coverok.png