视觉
本章节将针对具体场景详细介绍视觉服务的配置过程。在进行视觉配置前,请先参见 连接机械臂,完成机械臂连接。
场景要求
料箱拆码垛的场景采用 类料箱拆垛(高精度) 模板,该流图适用于平铺、紧密摆放、同种已知规格的料箱类物体(如料箱、圆桶、轮胎等)识别及拆码垛。
需要装备高精度相机,如结构光相机,且支持混拆
需要使用3D相机的彩色图进行2D模板匹配
需要使用3D相机的点云和物体CAD模型进行模型点云匹配
本章节描述的相关配置仅供参考,具体操作请以实际项目为准。
基本配置
配置前,请依次完成 新建项目、 添加容器,并使用 类料箱拆垛(高精度) 模板创建视觉服务,请参见 创建流图。创建完成之后会在左上角生成节点树,如下图所示。
根据需求,依次配置这些模块。
步骤1. 配置相机模块 (请参见 连接相机。)
步骤2. 配置加载标定信息模块 (请参见 手眼标定。)
步骤3. 配置去除料筐外点云模块
步骤4. 配置计算最高层高度模块
单击左侧节点树中的 计算最高层高度 模块,然后在右侧配置计算参数。该模块用于计算抓取后,输入工件所在区域的高度,然后通过抓取前后高度差获取工件高度。
![]()
顶层最少点数:最高层的最少点云数量,可根据麻袋大小进行调整。
输出高度的坐标系:输出的高度所在坐标系。Tote表示工作空间坐标系,World表示将高度转换到世界坐标系。
降采样栅格大小:增大该值会使点云更稀疏,仅用于减少噪点。单位:米。
层厚:点云划分每一层的厚度,该值建议经验丰富的工程师使用,一般使用者不建议使用。单位:米。
提取点云范围:提取最高层上下该值范围内的点云,为后续模块过滤非最高层麻袋点云,以防止误识别。单位:米。
输出点云的类型:Dense模式表示点云线性存储,不存在无效点;Organized模式表示点云存储在2D结构中,包含无效点。
在预览区选择输入、输出,再单击 运行 或 重新拍照后运行,查看处理后的输出结果。
![]()
步骤5. 配置生成高度图模块
步骤6. 配置2D形状匹配模块
创建模板。
(可选,该步骤仅对 眼在手上 的场景生效,眼在手外的场景请跳过此步骤。)单击Max右上角的 设置拍照位姿,在弹出的窗口中设置视觉服务、相机ID,单击 获取机械臂位姿,然后单击 设置拍照位姿 即可获取最新的拍照位姿。
![]()
单击左侧节点树中的 2D形状匹配 模块,在 检测物体 页签下单击 创建模板 开始训练工件模板。本项目选择 从图片训练模板 ,如果有3D模型也可选择 从3D模型训练模板。如果有已训练好的模板,可以直接选择模板检测物体。
![]()
在 训练工件模板 页签单击 创建工件类型 并给工件类型命名,工件模板名称默认与工件类型名称相同,用户可自行修改。测量工件尺寸,并输入工件长、宽、高。然后根据需求设置基础参数,开始训练工件模板。
![]()
训练模板。
在预览窗口单击 单次拍照 获取图像,然后设置检测区域,检测区域尽量贴合工件边缘。如下图所示,是设置好检测区域的结果。
![]()
设置物体中心,对于料箱,尽量贴近矩形的几何中心。设置时,可以选中并拖动坐标系进行移动和旋转,使其基本位于模型中心,x轴(红)沿料箱长边方向,y轴(绿)沿料箱短边方向。
![]()
提示
Max提供三种注册物体特征的方式:圆形、矩形、自定义图形。对于不规则工件,用户可选择自定义图形,手动勾画特征点并连接成线,尽量与工件边缘保持贴合以更好地注册物体特征。
在训练模板时,注意打光方式,使得工件的阴影区域越小越好。
单击 保存并训练 Max自动完成工件模板训练,然后单击 完成 可使用训练好的模板。
检测物体。
在 检测物体 页签选择已训练完成的工件模板。
![]()
设置显示参数,用户可根据需要选择是否显示匹配点、分数和边缘。
设置检测参数,各参数含义如下。
最小检测分数:最大为100,分数越高匹配越准确,但匹配的数量可能减少。
有效检测数量:检测物体的最大数量,最小值为1。
检测对比度:数值越小,边缘越多,检测速度越慢,精度不一定提升。
弱检测对比度:处于该值与对比度之间的点会根据连接性进行选择,可增加边缘点连续性。
非极大值抑制分数:检测出来的两个物体的交并比(重叠区域面积/两物体总面积)大于该值时,检测分数低的物体会被略去。
启用所有物体非极大值抑制:是否启用所有类型物体的非极大值抑制。
扩增像素和金字塔:图像金字塔梯度扩增像素数。
单击 运行检测,开始检测物体,根据显示参数的设置会在图像预览区显示结果。
![]()
步骤7. 配置生成图像掩膜模块
步骤8. 配置加载点云模块
步骤9. 配置顶层点云覆盖度检查模块
- 单击 顶层点云覆盖度检查 模块,然后在右侧配置计算参数。通过最高层的点云和已经检测到的3D物体,来检查最高层点云是否已经被完全覆盖,若没有覆盖则说明漏检。
请尽可能保证输入点云没有除工件之外的其他扰乱点,比如地面点云。
![]()
模式:可选择relative、points_num两种模式。
relative:根据未覆盖率检查顶层点云覆盖度。未覆盖率=未覆盖点数量/每个物体平均点数量。未覆盖率越小,未覆盖点越少。如果未被覆盖率大于完整度阈值,完整度检查失败。
points_num:比较未被覆盖点个数和最大允许的未被覆盖点个数,如果未被覆盖点个数大于最大允许的未被覆盖点个数,完整度检查失败。
z轴阈值:决定一个点经过投影后是否在3D物体内部的z轴阈值。
x/y轴阈值:决定一个点是否在3D物体内部的xy轴阈值。
完整度阈值:该参数仅在relative模式下有效,表示未覆盖率阈值。
最大允许的未被覆盖点个数:该参数仅在points_num模式下有效。
依次单击 运行并获取输入数据 和 检测,检测通过会有弹窗提示。若未通过检测,请调整前面步骤中的参数。
![]()