视觉 ========================================== 本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 :doc:`../../../basic_operation/robot`,完成机械臂连接。 场景要求 ++++++++++ 橡胶圆环抓取采用 **2D单层平面多物体抓取** 模板,该场景适用于多种已知物体,需要注意的是物体种类越多速度越慢,场景要求如下。 - 物体在同一平面稳定摆放。 - 使用工业2D相机,相机平行于平面拍照。 本章节描述的相关配置仅供参考,具体操作请以实际项目为准。 .. |2drange| image:: img/2drange.png :width: 30px .. |rangeselect| image:: img/rangeselect.png :width: 30px 基本配置 ++++++++++ 配置前,请依次完成 :doc:`../../../basic_operation/newproject`、 :doc:`../../../basic_operation/motion_operation/add_ws`,并使用 **2D单层平面多物体抓取** 模板创建视觉服务,请参见 :doc:`../../../basic_operation/vision_operation/flow`。创建完成之后会在左上角生成节点树,如下图所示。 .. image:: img/2dscene.png :align: center 根据需求,依次配置这三个模块。 **步骤1\. 配置相机模块** 1. 单击左侧节点树中的 **相机** 模块,然后在右侧单击 :guilabel:`相机资源管理器` 以连接相机,接着在 **相机配置** 区域设置相机基本信息,请参见 :doc:`../../../basic_operation/vision_operation/camera_connect`。 2. 在 **相机参数** 区域单击 :guilabel:`验证相机精度` ,开始2D相机的标定。 .. image:: img/camconfig.png :align: center :width: 450px 3. 依次选择标定板、标定内参数、验证标定结果等步骤,请参见 :doc:`../../../basic_operation/vision_operation/calibration/intrinsics`。 .. image:: img/intrcali.png :align: center :width: 450px **步骤2\. 配置加载标定信息模块** 1. 单击左侧节点树中的 **加载标定信息** 模块,软件界面右侧出现 **3D标定设置** 区域,在该区域依次标定相机和工作空间。 .. 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. 完成数据标定(标定数据时,有8个点采集成功即可)并计算标定结果,单击 :guilabel:`下一步` 进入 **检查标定结果** 页签。 .. image:: img/excali2.png :align: center :width: 450px 4. 检查并根据界面提示确认标定误差后,单击 **完成**,即可完成相机标定。 .. image:: img/excali3.png :align: center :width: 650px 5. 标定工作空间,请参见 :doc:`../../../basic_operation/vision_operation/calibration/workspace`。2D相机使用角触碰或者边缘触碰的方式标定工作空间。 **步骤3\. 配置2D形状匹配模块** 1. 创建模板。 a. (可选,该步骤仅对 **眼在手上** 的场景生效,眼在手外的场景请跳过此步骤。)单击Max右上角的 :guilabel:`设置拍照位姿`,在弹出的窗口中设置视觉服务、相机ID,单击 :guilabel:`获取机械臂位姿`,然后单击 :guilabel:`设置拍照位姿` 即可获取最新的拍照位姿。 .. image:: img/train8.png :align: center :width: 450px b. 单击左侧节点树中的 **2D形状匹配** 模块,在 **检测物体** 页签下单击 :guilabel:`创建模板` 开始训练工件模板。如果有已训练好的模板,可以直接选择模板检测物体。 .. image:: img/train0.png :align: center :width: 450px c. 在 **训练工件模板** 页签单击 :guilabel:`创建工件类型` 并给工件类型命名,工件模板名称默认与工件类型名称相同,用户可自行修改。测量工件尺寸,并输入工件长、宽、高。然后根据需求设置基础参数,开始训练工件模板。 .. image:: img/train1.png :align: center :width: 450px 2. 训练模板。 a. 在预览窗口单击 :guilabel:`单次拍照` 获取图像,然后设置检测区域,检测区域尽量贴合工件边缘。如下图所示,是设置好检测区域的结果。 在选中 |rangeselect| 时,可单击并拖动图中的白色圆点,修改矩形框的尺寸和位置。如果不满意,可单击预览区左侧的 |2drange|,重新设置检测区域。 .. image:: img/train2.png :align: center :width: 450px b. 设置物体中心,对于圆环形工件,尽量贴近圆心。 .. image:: img/train3.png :align: center :width: 450px .. |extract| image:: img/extract.png :width: 20px c. 单击 |extract|,根据需要调整对比度,然后单击 :guilabel:`extract once` 获取特征点。 .. image:: img/extract2.png :align: center :width: 500px 自动提取的特征点如下图所示。 .. image:: img/extract3.png :align: center :width: 500px d. 使用自定义图形遮盖非物体特征点,仅保留物体轮廓的特征点。 .. image:: img/extract4.png :align: center :width: 450px .. hint:: - Max提供三种注册物体特征的方式:圆形、矩形、自定义图形。对于不规则工件,用户可选择自定义图形,手动勾画特征点并连接成线,尽量与工件边缘保持贴合以更好地注册物体特征。 - 对于圆环形工件,也可使用圆形勾画出工件的轮廓,且圆心尽量与物体中心重合。 - 在训练模板时,注意打光方式,使得工件的阴影区域越小越好。 e. 单击 :guilabel:`保存并训练` Max自动完成工件模板训练,然后单击 :guilabel:`完成` 可使用训练好的模板。 3. 检测物体。 a. 在 :guilabel:`检测物体` 页签选择已训练完成的工件模板。 .. image:: img/train5.png :align: center :width: 450px b. 设置显示参数,用户可根据需要选择是否显示匹配点、分数和边缘。 c. 设置检测参数,各参数含义如下。 - 最小检测分数:最大为100,分数越高匹配越准确,但匹配的数量可能减少。 - 有效检测数量:检测物体的最大数量,最小值为1。 - 检测对比度:数值越小,边缘越多,检测速度越慢,精度不一定提升。 - 弱检测对比度:处于该值与对比度之间的点会根据连接性进行选择,可增加边缘点连续性。 - 非极大值抑制分数:检测出来的两个物体的交并比(重叠区域面积/两物体总面积)大于该值时,检测分数低的物体会被略去。 - 启用所有物体非极大值抑制:是否启用所有类型物体的非极大值抑制。 - 扩增像素和金字塔:图像金字塔梯度扩增像素数。 d. 单击 :guilabel:`运行检测`,开始检测物体,根据显示参数的设置会在图像预览区显示结果。 .. image:: img/train6.png :align: center :width: 450px 流图详解 ++++++++++ 视觉流图的配置是Max中的高级用法,对于一般用户而言,配置完节点树中的模块即可运行整个视觉流程,无需再配置视觉流图。视觉流图中包含了节点树中没有的模块,可以配置一些高级参数,如有需要可以按照以下内容操作。 单击“视图 > 节点视图”可查看创建成功的视觉流图,**2D单层平面多物体抓取** 场景的流图如下。 .. image:: img/multitype.png :align: center :width: 700px 2D单层平面多物体抓取场景的流图可大致分成三个功能组:图像获取、图像计算处理和图像输出,各模块的配置及使用流程如下。 1. 获取待处理图像。 a. **相机** 模块完成内参标定,并获取彩色图。 b. **加载标定信息** 模块完成相机和工作空间的标定。 2. 对图像进行计算处理。 a. **2D形状匹配** 模块,训练工件模板供2D匹配使用。 b. **投影2D位姿到平面** 模块将输入的2D位姿投影到平面上,生成3D位姿。 3. 输出图像处理结果。 a. 通过 **保存图像** 模块保存 **投影2D位姿到平面** 模块的输出结果。 b. **变换工件位姿3D** 模块将物体位姿从相机坐标系转换到世界坐标系。然后通过 **发布3D位姿** 和 **输出结果** 模块输出3D物体。