视觉 ========================================== 本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 :doc:`../../../basic_operation/robot`,完成机械臂连接。 场景要求 ++++++++++ 蝴蝶件抓取的场景采用 **3D 深筐乱序抓取** 模板,该流图适用于工作空间内同种物体乱序摆放,且拥有物体 STL 模型的情况。目前广泛应用于汽车零件、:term:`机加工件` 等多种场景。 - 相机为结构光相机 - 需要计算点云碰撞 本章节描述的相关配置仅供参考,具体操作请以实际项目为准。 基本配置 ++++++++++ 配置前,请依次完成 :doc:`../../../../basic_operation/newproject`、 :doc:`../../../../basic_operation/motion_operation/add_ws`,并使用 **3D深筐乱序抓取** 模板创建视觉服务,请参见 :doc:`../../../../basic_operation/vision_operation/flow`。创建完成之后会在左上角生成节点树,如下图所示。 .. image:: img/3dscene.png :align: center 根据需求,依次配置这些模块。 **步骤1\. 配置相机模块** 1. 单击左侧节点树中的 **相机** 模块,然后在右侧单击 :guilabel:`相机资源管理器` 以连接相机,接着在 **相机配置** 区域设置相机基本信息,请参见 :doc:`../../../../basic_operation/vision_operation/camera_connect`。 2. 在 **相机参数** 区域单击 :guilabel:`验证相机精度`。 .. 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 **步骤5\. 配置去除点云噪声模块** 1. 单击左侧节点树中的 **去除点云噪声** 模块,然后在右侧配置去噪声参数,噪声即离群点。过滤方法分为Statistical和Radius两种。 **Statistical** 是基于统计的离群点过滤,运行时间比基于距离的离群点过滤方法更久,其参数配置如下: .. image:: img/statistical.png :align: center :width: 350px - 标准差倍数:过滤掉与最邻近点平均距离大于平均值+倍标准数*标准差以外的点,该值越小则过滤点越多。 - 用于统计的临近点个数:该值越大则统计越准确,但计算时间更久。 **Radius** 表示基于距离的离群点过滤,建议经验丰富的工程师使用,其参数配置如下: .. image:: img/radius.png :align: center :width: 350px - 临近点搜索半径:统计临近点数量时,只考虑该半径范围内的点,该值越大则计算时间越长。 - 最小临近点个数:如果一个点附近的临近点数量小于该值,则会被视为噪声过滤,该值越大则过滤强度越高。 2. 在 **可视化显示** 区域选择需要查看的图像。 - 去除点云噪声前:仅显示去除点云噪声前的图像。 .. image:: img/denoise1.png :align: center :width: 350px - 去除点云噪声对比图:对比显示去除噪声前后的图像,被去除的点云用白色显示。 .. image:: img/denoise2.png :align: center :width: 350px - 去除点云噪声后:仅显示去除点云噪声后的图像。 .. image:: img/denoise3.png :align: center :width: 350px **步骤6\. 配置3D模板匹配模块** 1. 单击 :guilabel:`创建模板`,选择一个已有的或者新建一个工具类型,新建工具类型时不可重名,且工件类型必须和注册抓取时使用的工件名称一致。然后选择模型文件,并给模板命名即可。需要修改模型时,可单击 :guilabel:`编辑模型文件` 编辑模型。 .. image:: img/3dmatch2.png :align: center :width: 350px .. hint:: 如果已有模板,单击 :guilabel:`选择模板`,直接选择包含模型的文件夹即可。 2. 根据需要选择 :guilabel:`特征类型`,如果模型表面整体较为扁平,且平面和直线较多,建议尝试edge-I/edge-II模式。:guilabel:`限制物体朝向` 建议使用no_limit,其作用是增加可抓取的朝向和角度,提升抓取概率。 3. 根据需要设置检测参数。模板匹配时,小于 :guilabel:`最小分数` 的结果将被过滤。超过 :guilabel:`最大检测数量` 的结果,也将被过滤。 .. image:: img/3dmatch3.png :align: center :width: 350px 4. 设置不同检测阶段的参数,系统会根据物体模型在点云中寻找匹配结果。 .. image:: img/3dmatch4.png :align: center :width: 450px 用户也可以查看分步执行的检测结果,各阶段参数设置如下。 - 通过 **投票** 阶段,点云中的每个关键点都会得到一个最可能对应的模型关键点和对应的位姿结果,该阶段各参数配置如下。 .. image:: img/vote.png :align: center :width: 450px 该步骤运行结果如下图所示。 .. image:: img/voteexe.png :align: center :width: 450px - 通过 **聚类** 阶段,合并相近的位姿结果,去除得票数较少的结果,该阶段各参数配置如下。 .. image:: img/cluster.png :align: center :width: 450px 该步骤运行结果如下图所示。 .. image:: img/clusterout.png :align: center :width: 450px - 通过 **粗配准** 阶段,使用ICP迭代,优化结果的精度、去除误差较大的结果,该阶段各参数配置如下。 .. image:: img/sparse.png :align: center :width: 450px 该步骤运行结果如下图所示。 .. image:: img/sparseout.png :align: center :width: 450px - 通过 **精配准** 阶段,使用ICP迭代,优化结果的精度、去除误差较大的结果,该阶段各参数配置如下。 .. image:: img/dense.png :align: center :width: 450px 5. 单击 :guilabel:`执行检测`,然后在预览区域查看检测结果。 .. image:: img/result.png :align: center :width: 700px **步骤7\. 配置去除工件附近的点云模块** 1. 单击左侧节点树中的 **去除工件附近的点云** 模块,然后在右侧配置参数。 .. image:: img/cutitem.png :align: center :width: 350px - 最大去除半径:工件表面附近一定半径内的点将被去除,通常该值为2~10毫米。 - 去除长方体primitive点云时的XY阈值:去除primitive长方体内部点云时使用的XY阈值。 - 去除长方体primitive点云时的Z阈值:去除primitive长方体内部点云时使用的Z阈值。 2. 单击 :guilabel:`运行`,然后在预览区选择输入、输出,查看处理后的点云图像。单击 :guilabel:`保存` 可以存储图像。 .. image:: img/cutitem2.png :align: center :width: 350px 流图详解 ++++++++++ 视觉流图的配置是Max中的高级用法,对于一般用户而言,配置完节点树中的模块即可运行整个视觉流程,无需再配置视觉流图。视觉流图中包含了节点树中没有的模块,可以配置一些高级参数,如有需要可以按照以下内容操作。 3D深筐乱序抓取场景的标准视觉流图配置如下。 1. 创建工作空间,使用 **3D深筐乱序抓取** 模板创建流图,请参见 :doc:`../../../../basic_operation/vision_operation/flow`。创建成功的视觉流图如下。 .. image:: img/deeptote.png :align: center :width: 700px 2. 配置 **相机** 模块,获取彩色图、深度图及点云。请参见 :doc:`../../../../basic_operation/vision_operation/camera_connect`。 3. 配置 **加载标定信息** 模块,请参见 :doc:`../../../../basic_operation/vision_operation/calibrate`。 4. 配置 **变换点云坐标系** 和 **去除料筐外点云** 模块,将点云从相机坐标系转换到工作空间坐标系,并去除料筐以外的点云。 .. image:: img/toteout.png :align: center :width: 350px 5. 配置 **降采样点云** 、 **去除点云噪声** 、 **变换点云坐标系** 模块,合理降低点云数量,去除噪声,并将点云从工作空间坐标系转换到世界坐标系。详细请参见 :ref:`scenario/trajectory/btfly/vision:基本配置` 中的步骤4、步骤5。 .. image:: img/movenoise.png :align: center :width: 350px 6. 基于步骤4得到的料筐内点云,配置 **变换点云坐标系** 模块,将点云从工作空间坐标系转换到相机坐标系。 7. 结合步骤3得到的彩色图,配置 **3D模板匹配** 模块,根据物体模型在点云中寻找匹配结果。 8. 配置 **变换工件位姿3D** 模块,将物体位姿从相机坐标系转换到世界坐标系。 9. 基于步骤5得到的世界坐标系下料筐内点云、步骤6中3D模板匹配得出的模型点云,以及步骤8得到的世界坐标系下物体位姿,配置 **去除识别工件的点云** 模块并运行。 10. 配置 **输出结果** 模块,输出步骤8得到的世界坐标系下物体位姿,及步骤9得到的物体点云。 11. 重复上述步骤,完成其它料筐的视觉流图的设置。