视觉 ========================================== 本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 :doc:`../../../basic_operation/robot`,完成机械臂连接。 场景要求 ++++++++++ 拆麻袋场景采用 **拆麻袋** 模板,该场景适用于紧密摆放、纹理未知的麻袋识别,且托盘上的麻袋大小、种类、形状不确定,一般较为柔软。该场景要求如下: - 相机为3D相机。 - 需要使用点云进行位姿计算。 本章节描述的相关配置仅供参考,具体操作请以实际项目为准。 基本配置 ++++++++++ 配置前,请使用 **拆麻袋** 模板新建项目,示例项目中已包含视觉服务。创建完成之后会在左上角生成节点树,如下图所示。 .. image:: img/bag.png :align: center .. hint:: 若使用空白项目,请依次完成 :doc:`../../../basic_operation/newproject`、 :doc:`../../../basic_operation/motion_operation/add_ws`,并使用 **拆麻袋** 模板创建视觉服务,请参见 :doc:`../../../basic_operation/vision_operation/flow`。 根据需求,依次配置以下模块。 **步骤1\. 配置相机模块** (请参见 :doc:`../../../basic_operation/vision_operation/camera_connect`。) **步骤2\. 配置加载标定信息模块** (请参见 :doc:`../../../basic_operation/vision_operation/calibration/handeye`。) **步骤3\. 配置去除料筐外点云模块** 1. 单击左侧节点树中的 **去除料筐外点云** 模块,然后在右侧配置点云切割参数。 .. image:: img/toteout.png :align: center :width: 350px - X方向收缩长度:料筐沿X方向的收缩长度,负值则意味着扩张。 - Y方向收缩长度:料筐沿Y方向的收缩长度,负值则意味着扩张。 - 底部抬升高度:料筐底部抬升高度,负值则意味着下降。 - 顶部下降高度:料筐顶部下降高度,负值则意味着抬升。 单击 :guilabel:`触发 ` 拍照后可获取点云。需要注意的是,这里设置的参数使得工作空间中完整包含工件点云即可,点云不是越多越好,点的数量过多会影响计算速度。 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\. 配置目标检测模块** .. hint:: 检测模型可在Max菜单栏中单击“工具 > 下载模型”,然后在弹出的窗口中单击 **下载所有** 或 **导入本地模型**,下载完成后单击 **确定**。使用该模块前,请先联系星猿哲工程师注册工控机,并准备好检测模型、分割模型。 1. 单击左侧节点树中的 **目标检测** 模块,然后在右侧“深度学习”区域配置参数。 .. image:: img/deeplearn.png :align: center :width: 600px - 检测模型:事先准备好的检测模型文件,请向星猿哲工程师获取。可单击 :guilabel:`检查更新`,查看是否有最新的检测模型文件。 - 分割模型:事先准备好的分割模型文件,请向星猿哲工程师获取。 - 检测阈值:默认值为0.5,可根据实际情况调整。阈值越大,检测越准确,但是可能出现漏检测;阈值越小,检出越多,但是可能出现误检测。 - 分割阈值:分割置信度低于阈值的会被过滤掉,一般保持默认值0.5即可。 2. 依次单击 :guilabel:`运行并获取输入数据` 和 :guilabel:`运行模块`,然后在预览区域选择 **Output Image - RGB**,可查看检测结果,如下图所示。 .. image:: img/learnout.png :align: center :width: 600px **步骤6\. 配置计算实例工件pose模块** 1. 单击左侧节点树中的 **计算实例工件pose** 模块,然后在右侧“使用深度学习结果计算位姿”区域配置参数。 .. image:: img/calpose.png :align: center :width: 600px - 工件内最少点云个数:默认2000个点。 - 工件顶面最小z向倾斜角度:默认15°,可根据实际情况修改。 - 平面拟合距离阈值:默认0.010m,可根据实际情况修改。 - 聚类分割过滤:如果开启,则会对单个麻袋点云进行聚类,如果聚类簇结果大于1,则说明检测出错,忽略此检测结果。 - 聚类距离阈值:默认为0。 - 点云聚类最大允许点数:单个点云簇最大允许点数 - 点云聚类最小允许点数:单个点云簇最小允许点数。 2. 在预览区域选择 **输出图像 - RGB**,再依次单击 :guilabel:`运行并获取输入数据` 和 :guilabel:`运行模块`,可查看计算结果。如下图所示,每个识别到的麻袋及其坐标系显示在预览区域。 .. image:: img/poseout.png :align: center :width: 600px **步骤7\. (可选)配置凸起优化模块** .. hint:: 该模块是可选模块,可针对凸起的麻袋或箱子进行抓取算法优化。若不配置该模块,则在视觉流图中将 **计算实例工件pose** 模块与 **工件长宽一致性检查** 模块直接相连即可。 1. 单击左侧节点树中的 **凸起优化** 模块,然后在右侧参数区域配置参数。 .. image:: img/convexpara.png :align: center :width: 350px - 平面拟合最小内点比例:少于此阈值说明工件表面不平整,若此时开启凸起优化功能,可优化抓取点位置。 - 凸起抓取点优化模式:该模式控制了优化抓取点的算法逻辑,有PCA、convex_box和convex_bag三种。 - **PCA**:基于PCA(主成分分析)的计算求取点云最优位姿,本项目采用该算法,另外两种算法根据项目实际情况选用。 - **convex_box**:凸起箱子优化模式,使用内点的平均高度来优化抓取点z轴高度,常用于凸起箱子的优化。 - **convex_bag**:凸起麻包优化模式,使用输入的夹具信息来优化抓取点xyz位置,常用于麻袋抓取点优化。 2. 在预览区选择输入、输出,然后单击 **运行**,可查看优化结果。单击 **保存** 可以存储数据。 .. image:: img/optimizeresult.png :align: center :width: 600px **步骤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 流图详解 ++++++++++ 视觉流图的配置是Max中的高级用法,对于一般用户而言,配置完节点树中的模块即可运行整个视觉流程,无需再配置视觉流图。视觉流图中包含了节点树中没有的模块,可以配置一些高级参数,如有需要可以按照以下内容操作。 单击“视图 > 节点视图”可查看创建成功的视觉流图,**拆麻袋** 场景的流图如下。 .. image:: img/bagvision.png :align: center :width: 700px 拆麻袋场景的标准视觉流图配置如下。 1. 获取待处理图像。 a. **相机** 模块获取彩色图和点云。 b. **加载标定信息** 模块完成相机和工作空间的标定。 2. 对图像进行预处理。 a. 使用 **变换点云坐标系** 模块,将点云从相机坐标系转换到工作空间坐标系。 b. 使用 **去除料筐外点云** 模块,得到去除料筐以外的点云。 3. 目标检测。 a. 基于步骤2得到的点云,使用 **计算最高层高度** 模块,得到高度信息。 b. 结合步骤1.b得到的彩色图和步骤3.a得到的数据,使用 **加载料箱区域信息** 模块计算得到2D图像中处在设定高度上的工作空间。 c. 结合步骤1.b得到的彩色图和步骤3.b得到的数据,使用 **目标检测** 模块得到图片中所有待抓取目标,并计算麻袋表面适合抓取的区域。 4. 计算实例工件位姿。 a. 结合步骤2.b得到的点云和步骤3.c得到的2D位姿,配置 **根据2D检测结果提取点云** 模块,根据输入工件的图像掩膜和感兴趣区域提取点云。 b. 结合步骤1.b得到的彩色图、步骤3.c得到的2D位姿、步骤4.a得到的点云,配置 **计算实例工件pose** 模块,得到3D工件位姿、点云和彩色图。可使用 **可视化图像** 模块显示彩色图。 5. (可选)利用步骤4.b得到的3D工件位姿和点云,配置 **凸起优化** 模块,得到优化后的3D工件位姿。该步骤为可选步骤,如需跳过,只要将“计算实例工件pose”模块的输出和“工件长宽一致性检查”模块的输入相连即可。 6. 基于步骤4.b或步骤5得到的3D工件位姿,配置 **工件长宽一致性检查** 模块,得到检查后的3D工件位姿。 7. 针对步骤6的计算结果,配置 **变换工件位姿3D** 模块,将物体位姿从相机坐标系转换到世界坐标系。然后通过 **发布3D位姿** 或 **输出结果** 模块,查看3D物体位姿。 8. 重复上述步骤,完成其它托盘的视觉流图的设置。