视觉 ========================================== 本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 :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 流图详解 ++++++++++ 视觉流图的配置是Max中的高级用法,对于一般用户而言,配置完节点树中的模块即可运行整个视觉流程,无需再配置视觉流图。视觉流图中包含了节点树中没有的模块,可以配置一些高级参数,如有需要可以按照以下内容操作。 流水线拆垛的标准视觉流图配置如下。 1. 创建工作空间,使用 **流水线拆垛** 模板创建流图,请参见 :doc:`../../../../basic_operation/vision_operation/flow`。创建成功的视觉流图如下。 .. image:: img/conveyerdep.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. 配置 **降采样点云** 模块,合理降低点云数量。 6. 基于步骤3得到的彩色图和步骤5得到的点云,配置 **计算包围盒** 模块,得到3D工件,各参数如下。 .. image:: img/boxesti.png :align: center :width: 250px - 平面距离阈值:平面拟合的距离阈值,大于此值的点会被过滤。 - 平面最大角度。 - 最少点云数:如果点云数低于该阈值,模块直接返回空。 - 边缘降噪(edge_denoise):针对边缘毛刺噪声的降噪功能,缓解边缘毛刺噪声对包围盒估计偏大的现象。 - 开启:用户决定是否开启边缘降噪。 - 使用平面点云:是否只使用平面上的点云进行边缘降噪。注意箱子表面高度起伏大时,开启此选项可能会导致边缘降噪效果不佳。 - 步长:降噪的步长。 - 降噪阈值:每行(列)点云占长(宽)的最小比例。该值越大,计算所得的长宽越容易缩小。 7. 配置 **变换工件位姿3D** 模块,将物体位姿从相机坐标系转换到世界坐标系。 8. 配置 **输出结果** 和 **发布3D位姿** 模块,输出最终的3D工件结果。