视觉 ========================================== 本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 :doc:`../../../basic_operation/robot`,完成机械臂连接。 场景要求 ++++++++++ 控序混码场景根据来料不同,输送线来料时采用 **流水线拆垛** 模板,托盘来料时采用 **纸箱单拆** 模板。 本章节描述的相关配置仅供参考,具体操作请以实际项目为准。 基本配置(输送线来料) ++++++++++++++++++++++++++++++++++++++++ 配置前,请依次完成 :doc:`../../../../basic_operation/newproject`、 :doc:`../../../../basic_operation/motion_operation/add_ws`,并使用 **流水线拆垛** 模板创建视觉服务,请参见 :doc:`../../../../basic_operation/vision_operation/flow`。创建完成之后会在左上角生成节点树,如下图所示。 .. image:: img/boxsinpal.png :align: center 根据需求,依次配置这些模块。 **步骤1\. 配置相机模块** 1. 单击左侧节点树中的 **相机** 模块,然后在右侧单击 **相机资源管理器** 以连接相机,接着在 **相机配置** 区域设置相机基本信息,请参见 :doc:`../../../../basic_operation/vision_operation/camera_connect`。 2. 在 **相机参数** 区域单击 **验证相机精度**。 .. image:: img/camconfig.png :align: center :width: 450px 3. 依次选择标定板、标定内参数、验证标定结果等步骤,以验证相机精度。 .. image:: img/intrcali.png :align: center :width: 450px **步骤2\. 配置加载标定信息模块** 1. 单击左侧节点树中的 **加载标定信息** 模块,然后在右侧依次标定相机和工作空间。 .. image:: img/caliconfig.png :align: center :width: 450px 2. 单击 **相机标定** 区域中的 :guilabel:`新建标定数据`,设置标定数据名称,然后在 :guilabel:`相机标定` 页签设置标定方法和其它标定信息,请参见 :doc:`../../../../basic_operation/vision_operation/calibration/handeye` 。 .. image:: img/excali.png :align: center :width: 450px 3. 依此单击 :guilabel:`开始` 和 :guilabel:`计算标定结果` 完成数据标定,然后单击 :guilabel:`下一步` 进入 **检查标定结果** 页签。 .. image:: img/excali2.png :align: center :width: 450px 4. 检查并根据界面提示确认标定误差后,单击 **完成**,即可完成相机标定。 .. image:: img/excali3.png :align: center :width: 650px 5. 若要提高精度,则勾选 :guilabel:`点云标定`,完成点云标定,请参见 :doc:`../../../../basic_operation/vision_operation/calibration/handeye` 中的步骤5点云标定的相关内容。 6. 标定工作空间,请参见 :doc:`../../../../basic_operation/vision_operation/calibration/workspace`。3D相机使用3D拖拽的方式标定工作空间。 **步骤3\. 配置去除料筐外点云模块** 1. 单击左侧节点树中的 **去除料框外点云** 模块,然后在右侧配置点云切割参数,然后单击预览窗口中的 :guilabel:`触发`。 .. image:: img/toteout.png :align: center :width: 350px - X方向收缩长度:料筐沿X方向的收缩长度,负值则意味着扩张。 - Y方向收缩长度:料筐沿Y方向的收缩长度,负值则意味着扩张。 - 底部抬升高度:料筐底部抬升高度,负值则意味着下降。 - 顶部下降高度:料筐顶部下降高度,负值则意味着抬升。 2. 在预览视图中移动料筐模型,使之与点云中的料筐位置吻合。 3. 在 **可视化显示** 区域选择需要查看的图像。 - 未切割点云图:仅显示未去除料筐外点云的图像。 .. image:: img/cloud1.png :align: center :width: 350px - 切割对比图:对比显示切割前后的图像,被切割的点云用白色显示。 .. image:: img/cloud2.png :align: center :width: 350px - 切割完点云图:仅显示去除料筐外点云的图像。 .. image:: img/cloud3.png :align: center :width: 350px **步骤4\. 配置降采样点云模块** 1. 单击左侧节点树中的 **降采样点云** 模块,然后在右侧配置降采样参数。 .. image:: img/desample.png :align: center :width: 350px - 栅格边长:将点云中的点划分到指定大小的三维栅格(即正方体)中,栅格边长越大,输出的点云越稀疏。 - 输出点云尺寸上限值:如果该值大于0,将会进行两次采样,第二次降采样操作将会基于第一次进行。 2. 在 **可视化显示** 区域选择需要查看的图像。 - 降采样点云前:仅显示降采样前的图像。 .. image:: img/desample1.png :align: center :width: 350px - 降采样点云对比图:对比显示降采样前后的图像,被去除的点云部分用白色显示。 .. image:: img/desample2.png :align: center :width: 350px - 降采样点云后:仅显示降采样后的图像。 .. image:: img/desample3.png :align: center :width: 350px 基本配置(托盘来料) ++++++++++++++++++++++++++++++++++++++++ 配置前,请依次完成 :doc:`../../../../basic_operation/newproject`、 :doc:`../../../../basic_operation/motion_operation/add_ws`,并使用拆码垛模板分类下的 **纸箱单拆** 模板创建视觉服务,请参见 :doc:`../../../../basic_operation/vision_operation/flow`。创建完成之后会在左上角生成节点树,如下图所示。 .. image:: img/boxsindep.png :align: center 根据需求,依次配置这些模块。 **步骤1\. 配置相机模块** (请参见 :doc:`../../../basic_operation/vision_operation/camera_connect`。) **步骤2\. 配置加载标定信息模块** (请参见 :doc:`../../../basic_operation/vision_operation/calibration/handeye`。) **步骤3\. 配置去除料筐外点云模块** 1. 单击左侧节点树中的 **去除料框外点云** 模块,然后在右侧配置点云切割参数,然后单击预览窗口中的 :guilabel:`触发`。 .. image:: img/toteout.png :align: center :width: 350px - X方向收缩长度:料筐沿X方向的收缩长度,负值则意味着扩张。 - Y方向收缩长度:料筐沿Y方向的收缩长度,负值则意味着扩张。 - 底部抬升高度:料筐底部抬升高度,负值则意味着下降。 - 顶部下降高度:料筐顶部下降高度,负值则意味着抬升。 2. 在预览视图中移动料筐模型,使之与点云中的料筐位置吻合。 3. 在 **可视化显示** 区域选择需要查看的图像。 - 未切割点云图:仅显示未去除料筐外点云的图像。 .. image:: img/cloud1.png :align: center :width: 350px - 切割对比图:对比显示切割前后的图像,被切割的点云用白色显示。 .. image:: img/cloud2.png :align: center :width: 350px - 切割完点云图:仅显示去除料筐外点云的图像。 .. image:: img/cloud3.png :align: center :width: 350px **步骤4\. 配置计算最高层高度模块** 1. 单击左侧节点树中的 **计算最高层高度** 模块,然后在右侧配置计算参数。该模块用于计算抓取后,输入工件所在区域的高度,然后通过抓取前后高度差获取工件高度。 .. image:: img/height.png :align: center :width: 350px - 顶层最少点数:最高层的最少点云数量,可根据麻袋大小进行调整。 - 输出高度的坐标系:输出的高度所在坐标系。Tote表示工作空间坐标系,World表示将高度转换到世界坐标系。 - 降采样栅格大小:增大该值会使点云更稀疏,仅用于减少噪点。单位:米。 - 层厚:点云划分每一层的厚度,该值建议经验丰富的工程师使用,一般使用者不建议使用。单位:米。 - 提取点云范围:提取最高层上下该值范围内的点云,为后续模块过滤非最高层麻袋点云,以防止误识别。单位:米。 - 输出点云的类型:Dense模式表示点云线性存储,不存在无效点;Organized模式表示点云存储在2D结构中,包含无效点。 2. 在预览区选择输入、输出,再单击 :guilabel:`运行` 或 :guilabel:`重新拍照后运行`,查看处理后的输出结果。 .. image:: img/heightresult.png :align: center :width: 600px **步骤5\. 配置计算3D尺寸模块** 1. 单击左侧节点树中的 **计算3D尺寸** 模块,然后在右侧配置计算参数。该模块用于计算抓取后,输入工件所在区域的高度,然后通过抓取前后高度差获取工件高度。 .. image:: img/cal3dsize.png :align: center :width: 350px - 收缩比例:工件目标区域收缩比例。 - 最少点数:3D尺寸有效的最少点数。 - 高度模式:plane(平面模式)表示通过点云拟合平面,然后用工件顶部所处高度和平面高度之差作为工件高度。top_height(点云高度模式)表示用工件顶部所处高度和点云平均高度之差作为工件高度。 - 平面 - 距离阈值:平面拟合距离阈值。 - 工件下平面最小内点比例:如果工件下平面内点比例不满足此阈值,则触发二次抓取。 - 点云高度 - z切片值:使用该值对min_z(最小z值) - max_z(最大z值)切片 2. 在预览区选择输入、输出,再单击 :guilabel:`运行` 或 :guilabel:`重新拍照后运行`,查看处理后的输出结果。 .. image:: img/cal3dresult.png :align: center :width: 600px **步骤6\. 配置目标检测模块** .. hint:: 检测模型可在Max菜单栏中单击“工具 > 下载模型”,然后在弹出的窗口中单击 **下载所有** 或 **导入本地模型**,下载完成后单击 **确定**。使用该模块前,请先联系星猿哲工程师注册工控机,并准备好检测模型、分割模型。 1. 单击左侧节点树中的 **目标检测** 模块,然后在右侧“深度学习”区域配置参数。 .. image:: img/deeplearn.png :align: center :width: 600px - 检测模型:事先准备好的检测模型文件,请向星猿哲工程师获取。可单击 :guilabel:`检查更新`,查看是否有最新的检测模型文件。 - 分割模型:事先准备好的分割模型文件,请向星猿哲工程师获取。 - 检测阈值:默认值为0.5,可根据实际情况调整。阈值越大,检测越准确,但是可能出现漏检测;阈值越小,检出越多,但是可能出现误检测。 - 分割阈值:分割置信度低于阈值的会被过滤掉,一般保持默认值0.5即可。 2. 依次单击 :guilabel:`运行并获取输入数据` 和 :guilabel:`运行模块`,然后在预览区域选择 **Output Image - RGB**,可查看检测结果。 **步骤7\. 配置计算实例工件pose模块** 1. 单击左侧节点树中的 **计算实例工件pose** 模块,然后在右侧“使用深度学习结果计算位姿”区域配置参数。 .. image:: img/calpose.png :align: center :width: 600px - 工件内最少点云个数:默认2000个点。 - 工件顶面最小z向倾斜角度:默认15°,可根据实际情况修改。 - 平面拟合距离阈值:默认0.010m,可根据实际情况修改。 - 聚类分割过滤:如果开启,则会对单个麻袋点云进行聚类,如果聚类簇结果大于1,则说明检测出错,忽略此检测结果。 - 聚类距离阈值:默认为0。 - 点云聚类最大允许点数:单个点云簇最大允许点数 - 点云聚类最小允许点数:单个点云簇最小允许点数。 2. 在预览区域选择 **输出图像 - RGB**,再依次单击 :guilabel:`运行并获取输入数据` 和 :guilabel:`运行模块`,可查看计算结果,每个识别到的纸箱及其坐标系显示在预览区域。 **步骤8\. 配置工件长宽一致性检查模块** 1. 单击左侧节点树中的 **工件长宽一致性检查** 模块,然后在右侧“物体长宽一致性检查”区域选择开启检测功能,然后配置参数。 .. image:: img/consistency.png :align: center :width: 350px - 长宽模式:use_mean模式下每个麻袋会与长宽均值比较,use_real模式下每个麻袋会与输入的长宽进行比较。 - 阈值模式:absolute模式使用尺寸阈值直接作为尺寸比较的阈值,relative模式使用“L * 相对比例”作为阈值。 - 尺寸阈值:只有当阈值模式为absolute时生效。 - 相对比例:只有当阈值模式为relative时生效。 - 长度:输入的工件长度,只有当长宽模式为use_real时生效。 - 宽度:输入的工件宽度,只有当长宽模式为use_real时生效。 2. 依次单击 :guilabel:`运行并获取输入数据` 和 :guilabel:`检测`,检测成功后弹窗提示检测成功,单击 :guilabel:`确定`。 .. image:: img/checkok.png :align: center :width: 600px 3. 在预览区查看检测结果。 .. image:: img/checkreview.png :align: center :width: 600px 单击某一块检测区域,可以查看该区域的位姿和尺寸。 .. image:: img/checkdetail.png :align: center :width: 600px **步骤9\. 配置顶层点云覆盖度检查模块** 1. 单击左侧节点树中的 **顶层点云覆盖度检查** 模块,然后在右侧“顶层点云覆盖度检查”区域选择开启检测功能,然后配置参数。该模块通过最高层的点云和已经检测到的物体,来检查最高层点云是否已经被完全覆盖,若没有覆盖则说明漏检。 .. image:: img/topcover.png :align: center :width: 350px - 长宽模式:use_mean模式下每个麻袋会与长宽均值比较,use_real模式下每个麻袋会与输入的长宽进行比较。 - 阈值模式:absolute模式使用尺寸阈值直接作为尺寸比较的阈值,relative模式使用“L * 相对比例”作为阈值。 - 尺寸阈值:只有当阈值模式为absolute时生效。 - 相对比例:只有当阈值模式为relative时生效。 - 长度:输入的工件长度,只有当长宽模式为use_real时生效。 - 宽度:输入的工件宽度,只有当长宽模式为use_real时生效。 .. hint:: 请尽可能保证输入点云没有除工件之外的其他扰乱点,比如地面点云。 2. 依次单击 :guilabel:`运行并获取输入数据` 和 :guilabel:`检测`,检测成功后弹窗提示检测成功,单击 :guilabel:`确定`。 3. 在预览区查看检测结果。 单击某一块检测区域,可以查看该区域的位姿和尺寸。