方案部署

本节将介绍如何进行高反光圆盘方案部署,包括视觉系统硬件搭建和视觉方案部署,具体说明如下。

视觉系统硬件搭建

视觉系统硬件搭建是将硬件设备(相机和工控机)集成到实际工作环境中,以支持视觉系统的正常运行。

在该阶段,你需要完成视觉系统硬件的安装与连接。详细信息请参考视觉系统硬件搭建

视觉方案部署

本节将介绍高反光圆盘视觉方案的部署,总体流程如下图所示。

solution configuration overview

机器人通信配置

机器人通信配置前,需先获取方案。请单击此处查看方案获取方法。
  1. 打开Mech-Vision软件。

  2. 在Mech-Vision欢迎页中单击从案例库新建按钮,打开案例库。

  3. 进入案例库中的典型案例分类,单击右上角的 get resource 图标以获取更多资源,并在弹出的窗口中单击确定按钮。

  4. 获取案例资源后,选择有序工件拣选分类下的高反光圆盘,在下方填写方案名称和路径,最后单击创建按钮,并在弹出的窗口中单击确定按钮下载高反光圆盘方案。

    下载完成后,在Mech-Vision中将自动打开该方案。

在部署梅卡曼德视觉方案前,需要完成梅卡曼德视觉系统与机器人侧(机器人、PLC 或上位机)的通信对接。

高反光圆盘方案使用标准接口通信,具体操作方法请参考标准接口通信配置

手眼标定

手眼标定是指建立相机坐标系与机器人坐标系对应关系的过程,将视觉系统确定的物体位姿转换为机器人坐标系下的位姿,从而引导机器人精准完成抓取任务。

请参考机器人手眼标定操作指南完成手眼标定。

每次安装相机后,或标定后相机与机器人的相对位置发生变化时,都需要重新进行手眼标定。

视觉工程配置

完成通信配置和手眼标定后,即可使用Mech-Vision进行视觉工程配置。

视觉工程配置的流程如下图所示。

vision overall

连接相机并采集图像

  1. 连接相机。

    打开Mech-Eye Viewer,找到待连接的相机,单击连接按钮。

    vision click connect camera
  2. 调节相机参数。

    为确保相机采集到的2D图像清晰,点云无缺失,需调节相机参数。参数调节方法请参考LSR L相机参数参考指南

  3. 采集图像。

    相机连接成功且设置参数组后,即可开始采集工件图像。单击界面上方的 vision click capture icon 按钮,进行单次图像采集,此时即可查看采集到的工件2D图像和点云,确保2D图像清晰,点云无缺失且边缘清晰。合格的工件2D图像和点云分别如下图中左图、右图所示。

    vision image and cloud
  4. 在Mech-Vision中连接相机。

    单击从相机获取图像步骤,在界面右下角步骤参数中关闭虚拟模式,然后单击选择相机按钮。

    vision select camera

    在弹出的窗口中单击某相机编号右侧的 vision connect camera before icon 图标,该图标变为 vision connect camera after icon 后,代表相机连接成功。相机连接成功后,单击右侧的参数组下拉框选择标定的参数组,如下图所示。

    vision connect camera

    以上设置完成后即已连接真实相机,无需调节其他参数。单击从相机获取图像步骤右侧的 vision run step camera icon 图标运行该步骤,如无报错即表示相机连接成功,并可正确采集图像。

3D工件识别

高反光圆盘方案使用3D工件识别步骤识别工件。单击3D工件识别步骤界面的配置向导按钮,打开3D工件识别工具进行相关配置。总体配置流程如下图所示。

vision 3d target object recognition overall
点云预处理

点云预处理阶段,需调整各参数对数据进行预处理,使原始点云更加清晰,从而提高识别的准确度和效率。

  1. 设置识别区

    设置有效的识别区,将干扰因素屏蔽在区域外,提升识别效率。ROI需包含工件和托盘的点云,并去除其他场景点云。为了兼容来料偏差,ROI的长和宽的值可在托盘尺寸的基础上各增加100mm。

  2. 调节参数

    通常情况下,该分类下的参数保持默认值即可。若场景中仍存在较多杂点,可尝试调节相关参数以滤除杂点。

点云预处理完成后,单击运行步骤按钮。预处理效果如下图所示。

vision point cloud preprocessing effect
识别工件

高反光圆盘方案需要使用深度学习辅助识别工件。先从工件库中制作工件的点云模板,然后在3D工件识别工具中使用深度学习辅助识别并设置匹配相关参数,用于匹配点云模板。

  1. 制作工件模板。

    使用示教法设置对称性工件的抓取点时,为提高抓取精度,识别的工件位姿的X轴朝向和用示教法设置的抓取点位姿的X轴朝向应尽量一致。
  2. 使用深度学习辅助识别

    导入并选择深度学习模型包(可单击此处下载),设置ROI,并在推理配置窗口中设置置信度阈值,高于该阈值的结果将被保留。

    设置ROI时,为了使深度学习的辅助识别达到更好的效果,同时防止物料位置波动,应保留约1/3托盘尺寸的余量。
  3. 设置识别相关参数

    • 开启识别工件右侧的高级模式开关。

    • 避免误匹配:将调整位姿设置为调整X轴朝向,并将X轴朝向的角度设置为,使得匹配输出工件位姿的X轴朝向和物体中心点的X轴朝向尽量一致。

    • 输出-最大结果输出个数:将该参数值设置为托盘满载时的工件数量。本方案中将最大输出结果个数设置为18

上述参数设置完成后,单击运行步骤按钮,匹配效果如下图所示。

vision target object recognition effect
配置步骤端口

完成工件识别后,需配置步骤端口,为后续步骤提供视觉结果和点云,用于路径规划和碰撞检测。

由于后续步骤中需要对抓取点进行相关处理,在选择端口下选择抓取点相关端口,并勾选相机采集原始点云选项,然后单击保存按钮。设置完成后3D工件识别步骤新增了对应的输出端口,如下图所示。

vision general settings effect

调整位姿

获取工件位姿后,需使用调整位姿V2步骤对位姿进行调整。单击调整位姿V2步骤界面的配置向导按钮,打开位姿调整工具进行位姿调整相关配置。总体配置流程如下图所示。

vision adjust poses overall
  1. 位姿转换

    为了输出工件在机器人坐标系下的位姿,需勾选将位姿转换至机器人坐标系,将工件位姿从相机坐标系转换至机器人坐标系。

  2. 位姿方向调整

    方向调整设置为自动对齐应用场景设置为Z轴对齐(上下料),使机器人能够按照指定方向抓取工件,避免碰撞。

  3. 位姿排序

    排序类型设置为“Z”形平面排序,因来料方向固定,需选择通过拖拽器设置的方式来设置参考位姿,参考位姿的X轴应与托盘平行。将行的方向设置为参考位姿X轴正方向列的方向设置为参考位姿Y轴正方向,以保证抓取顺序最优。

  4. 角度过滤

    为了减少后续路径规划耗时,需根据位姿Z轴和参考方向之间的夹角过滤明显不可抓取的工件。本教程中,需把最大角度差设置为30°

  5. 通用设置。

    设置新增端口数量设置为1,该步骤将新增输入和输出端口各一个,连接3D工件识别步骤输出的抓取点信息,并将其输出到路径规划步骤。

路径规划

完成工件识别后,即可使用Mech-Vision的路径规划步骤进行路径规划,然后编写机器人程序用于抓取工件。

单击选中路径规划步骤,然后单击配置向导按钮,进入路径规划工具页面,了解如何进行规划路径。

路径规划的配置流程如下图所示。

viz overall
配置场景物体

配置场景物体的目的是还原真实现场场景,以此来辅助用户规划机器人运动路径。具体操作方法请参考配置场景物体

在确保抓取可行性的基础上,应在严格还原真实作业环境的前提下配置场景物体。本方案中场景物体配置情况如下图所示

viz scene objects configuration effect
配置末端工具

配置末端工具的目的是在三维仿真空间中显示末端工具的模型,并用于碰撞检测。具体操作方法请参考配置末端工具

  • 为了减少制作末端工具碰撞模型所需的操作时间,在创建凸包时无需完全复原模型,可根据模型的实际情况有选择地忽略部分细节。

  • 制作抓取时与工件实际接触的部分时应当力求精细,确保其形态能高度还原实物,以保证碰撞检测的准确性。对于距离抓取点(工件)部分较远的机械结构,可以简化处理,使用长方体凸包来替代复杂的结构设计,以提高效率。本方案中的末端工具如下图所示:

    viz end tool configuration effect
调整工作流程

场景物体和末端工具配置完成后,即可根据实际需求调整路径规划步骤中路径规划工具的工作流程。抓取工件时的工作流程如下图所示。

viz adjust workflow overall

其中,筐上方固定点1和2是两个定点移动,这两个点为机器人程序中实际示教点位,不对外发送路径点,其他3个移动点将对外发送路径点,合计共发送3个路径点。

仿真与测试

单击工具栏中的仿真按钮,即可对搭建完成的路径规划工具中的工程进行仿真,以测试视觉系统是否已成功搭建。

将工件有序摆放在托盘上,然后单击路径规划工具工具栏的仿真按钮模拟抓取工件。每次抓取成功后需重新布置工件,循环仿真抓取10次。若10次仿真抓取均能顺利进行,即可判定视觉系统可正常工作。

若仿真过程中出现异常,请参考方案部署常见问题解决问题。

输出视觉结果

将当前工程的视觉结果发送给通信组件,用于后续抓取任务。

机器人抓放

机器人程序编写

若仿真效果满足预期,即可编写ABB机器人抓放程序。

ABB机器人样例程序MM_S3_Vis_Path可以基本满足本典型案例所需要的功能。你可以在样例程序基础上进行修改。关于MM_S3_Vis_Path程序的解释详细,请参考样例程序解读

修改说明

基于样例程序,请参考如下步骤修改程序文件:

  1. 指定工控机IP地址和端口号。将MM_Init_Socket指令中的IP地址和端口号修改为工控机实际IP地址和端口号,确保与视觉系统中的设置一致。

    修改前 修改后(示例)
      MM_Init_Socket "127.0.0.1",50000,300;
      MM_Init_Socket "127.0.3.5",50000,400;
  2. 设置DO端口执行抓取的信号,以闭合夹具抓取工件。注意,DO指令应根据现场实际使用的DO端口号设置。

    修改前 修改后(示例)
      !add object grasping logic here, such as "setdo DO_1, 1;"
      Stop;
      !add object grasping logic here, such as "setdo DO_2, 0;"
      setdo DO_2, 0;
  3. 设置DO端口执行放置的信号,以放置工件。注意,DO指令应根据现场实际使用的DO端口号设置。

    修改前 修改后(示例)
      !add object releasing logic here, such as "setdo DO_1, 0;"
      Stop;
      !add object releasing logic here, such as "setdo DO_2, 1;"
      setdo DO_2, 1;
参考:修改后的样例程序
MODULE MM_S3_Vis_Path
!----------------------------------------------------------
! FUNCTION: trigger Mech-Vision project and get planned path
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num toolid{5}:=[0,0,0,0,0];
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num label{5}:=[0,0,0,0,0];
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS jointtarget jps{5}:=
[
    [[-9.7932,85.483,6.0459,-20.5518,-3.0126,-169.245],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.7932,85.483,6.0459,-20.5518,-3.0126,-169.245],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define local tooldata variables*LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];

PROC Sample_3()
    !set the acceleration parameters
    AccSet 50, 50;
    !set the velocity parameters
    VelSet 50, 1000;
    !move to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
    !initialize communication parameters (initialization is required only once)
    MM_Init_Socket "127.0.3.5",50000,400;
    !move to image-capturing position
    MoveL camera_capture,v1000,fine,gripper1;
    !open socket connection
    MM_Open_Socket;
    !trigger NO.1 Mech-Vision project
    MM_Start_Vis 1,0,2,snap_jps;
    !get planned path from NO.1 Mech-Vision project; 2nd argument (1) means getting pose in JPs
    MM_Get_VisPath 1,1,pose_num,vis_pose_num,status;
    !check whether planned path has been got from Mech-Vision successfully
    IF status<>1103 THEN
        !add error handling logic here according to different error codes
        !e.g.: status=1003 means no point cloud in ROI
        !e.g.: status=1002 means no vision results
        Stop;
    ENDIF
    !close socket connection
    MM_Close_Socket;
    !save waypoints of the planned path to local variables one by one
    MM_Get_Jps 1,jps{1},label{1},toolid{1};
    MM_Get_JPS 2,jps{2},label{2},toolid{2};
    MM_Get_JPS 3,jps{3},label{3},toolid{3};
    !follow the planned path to pick
    !move to approach waypoint of picking
    MoveAbsJ jps{1},v1000,fine,gripper1;
    !move to picking waypoint
    MoveAbsJ jps{2},v1000,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_2, 0;"
    setdo DO_2, 0;
    !move to departure waypoint of picking
    MoveAbsJ jps{3},v1000,fine,gripper1;
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint,v1000,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move to placing waypoint
    MoveL drop,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_2, 1;"
    setdo DO_2, 1;
    !move to departure waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move back to robot home position
    MoveAbsJ Home\NoEOffs,v3000,fine,gripper1;
ENDPROC
ENDMODULE

抓取测试

为保证实际生产的稳定运行,需要运行修改后的样例程序,引导机器人测试抓取工件。具体方法请参考测试标准接口通信的操作。

进行抓取测试前,请先示教如下点位。

名称 变量 解析

Home点

home

示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。

输入Mech-Vision工程的位姿

snap_jps

用户自定义的关节角数据。

拍照点

camera_capture

示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。

放置的过渡点

drop_waypoint

过渡点用于保证机器人平滑移动,同时避免一些不必要的碰撞。

放置点

drop

放置工件的目标点。

工具数据

gripper1

机器人在移动时所使用的末端工具。

完成示教后,将工件摆放在下表所列场景中,使用机器人测试低速抓取。本方案中,若工件有序码放,且无其他异常来料情况,只需在真实场景中进行抓取测试即可。

真实场景抓取测试

工件摆放状态

图示

工件有序摆放

picking test 1

若在上述抓取测试场景中,机器人可成功抓取工件,即可判定已成功部署视觉系统。

我们重视您的隐私

我们使用 cookie 为您在我们的网站上提供最佳体验。继续使用该网站即表示您同意使用 cookie。如果您拒绝,将使用一个单独的 cookie 来确保您在访问本网站时不会被跟踪或记住。