实现抓放

在本教程中,你将先了解本案例实现的抓取和放置流程、然后了解如何完成抓取和放置流程配置。

抓取和放置流程

本案例实现的抓取和放置逻辑流程如下图所示。

picking workflow

通信方案说明

在上述流程中,“机器人触发相机拍照并获取规划路径”需要机器人与视觉系统使用标准接口通信方式,并且标准接口与视觉系统的配合方式为“使用Mech-Viz获取规划路径”。

使用该配合方式时,你需要配置好Mech-Vision工程(已在“视觉工程配置”章节配置)和Mech-Viz工程,并编写机器人程序。请参考“抓取放置流程配置”完成Mech-Viz工程的配置和机器人程序的编写。

抓取和放置流程配置

要实现抓取和放置逻辑流程,需要依次完成如下配置:

picking workflow config

配置Mech-Viz工程进行路径规划和仿真

在Mech-Viz创建工程可以为机器人提供如下功能:

  • 路径规划:规划机器人的抓取路径。注意规划的路径不包含放置的路径。放置路径需在机器人程序中添加。

  • 碰撞检测:Mech-Viz在路径规划时进行碰撞检测,为机器人提供无碰撞的抓取路径。

  • 仿真运行:Mech-Viz可以可视化仿真机器人的抓取流程,方便进行调试。

配置Mech-Viz工程的流程如下图所示。

viz project config workflow

Mech-Vision案例库中的“单品类拆垛”案例内置了Mech-Viz工程“Viz-Single-Case Depalletizing”。在开始下方配置前,请打开Mech-Viz,在菜单栏选择文件  打开,选择本地“单品类拆垛”方案中的“Viz-Single-Case Depalletizing”文件夹。

open viz project

配置场景物体

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

在确保抓取动作可行性的基础上,应对实际作业环境进行更为严格的还原,本方案中场景物体设置情况如下。

config scene objects

配置末端工具

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

关联工件与末端工具

在配置完末端工具后,需要在工件库中将工件与用于抓取的末端工具关联,这样配置的末端工具才可以用于抓取工具。本案例抓取的工件为纸箱,不需要工件模型进行匹配,因此只需要在工件库中创建一个无点云匹配模板的工件(默认工件)。

  1. 在工程资源树的工件节点下单击设置按钮以打开工件库。

  2. 请选择工件配置流程窗口,单击无匹配识别卡片。该操作将自动创建一个默认工件并添加一个默认抓取点。

  3. 设置抓取点选项卡中的抓取配置区域,勾选启用Mech-Viz中所有末端工具选项,实现末端工具与工件的绑定。

碰撞模型简化

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

模型简化思路:夹具与机器人连接部分的螺孔和其他细节特征可以被去除。由于吸盘原本模型是长方体,此处不需要简化。

模型简化示例如下图。

simplify tool model

搭建工作流程

“单品类拆垛”案例内置的Mech-Viz工程“Viz-Single-Case Depalletizing”已搭建了工作流程。工作流程中每个步骤的说明如下。

步骤 说明 用途
define home

定义Home点

仅用于仿真,不发送给机器人

set branch

消息分支

等待机器人程序发送指令开始拍照

visual recognition

调用Mech-Vision视觉结果

/

check vision result

检查是否有视觉结果

/

relative move 1

规划抓取接近点

发送给机器人

vision move

规划抓取点

发送给机器人

relative move 2

规划抓取离开点

发送给机器人

define immediate point

定义中间过渡点

仅用于仿真,不发送给机器人

配置吸盘偏置策略

在“视觉移动”步骤中,可以根据现场抓取要求配置吸盘偏置策略。

sucker offset setting

配置碰撞检测参数

Mech-Viz能够通过碰撞检测功能来防止机器人在运动过程中发生不必要的碰撞。本应用需要开启点云碰撞检测功能。具体操作请参考碰撞检测配置

  • 本应用需要开启点云碰撞检测功能,参与碰撞检测的点云形式为“点云立方体”。点云碰撞检测功能主要检查夹具与点云的碰撞,机器人关节碰撞检测可根据实际需求开启,以缩短规划时间。

  • 工件碰撞检测主要检查被抓工件与场景物体的碰撞,对于纸箱场景一般不需要开启。

  • 常见问题解决方法:需要开启问题一,并根据现场的点云情况设置Z向点云移除范围拓展XY向点云移除范围拓展。注意,XY向点云移除范围拓展不可设置过大,否则可能导致抓取时吸盘压到旁边的纸箱。

collision detection

仿真运行

单击工具栏中的仿真按钮,即可对搭建完成的Mech-Viz工程进行仿真。

simulation

仿真测试目标

将纸箱摆放在托盘上,然后使用Mech-Viz软件仿真抓取。每次抓取成功后将仿真抓取成功的纸箱人工移除,循环仿真测试一层纸箱,若均能顺利进行,即可判定视觉工程搭建无异常。

simulation

配置机器人参数和编写机器人程序

ABB标准接口样例程序MM_S9_Viz_RunInAdvance可以基本满足本案例所需要的功能。你可以在样例程序基础上进行修改。关于样例程序MM_S9_Viz_RunInAdvance的详细解释,请参考样例程序解读

基于样例程序,请在机器人端完成如下操作:

  1. 示教Home点(初始位)。

    将机器人移动到示教的初始位。初始位应远离待抓取物体及周边设备,且不遮挡相机视野。完成后,记录此时的机器人位姿到变量home。

  2. 指定工控机IP地址和端口号。将MM_INIT_SKT指令中的IP地址和端口号修改为工控机实际IP地址和端口号。

    修改前 修改后(示例)
        MM_Init_Socket "127.0.0.1",50000,300;
        MM_Init_Socket "192.168.10.111",50000,300;
  3. 示教机器人拍照位。

    将机器人移动到示教的相机拍照位。拍照位指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。完成后,记录此时的机器人位姿到变量camera_capture。

  4. 设置DO端口信号,以打开吸盘吸取纸箱。注意,DO指令应根据现场实际使用的DO端口号设置。

    修改前 修改后(示例)
        !add object grasping logic here, such as "setdo DO_1, 1;"
        Stop;
        !add object grasping logic here, such as "setdo DO_1, 1;"
        setDo do0, 1;
        !Stop;
  5. 示教放置过渡点和放置点。

    将机器人移动到示教的过渡点及放置点,并分别记录机器人位姿到变量drop_waypoint和drop。

  6. 设置DO端口信号,以关闭吸盘放置纸箱。注意,DO指令应根据现场实际使用的DO端口号设置。

    修改前 修改后(示例)
        !add object releasing logic here, such as "setdo DO_1, 0;"
        Stop;
        !add object releasing logic here, such as "setdo DO_1, 0;"
        setDo do0, 0;
        setDo do4, 1;
        Stop;

运行测试机器人抓放效果

执行如下步骤测试机器人抓放效果:

  1. 将示教器上选择调试  PP 移至例行程序

  2. 确认选中MM_S9_Viz_RunInAdvance后,点击确定

  3. 用手适度按压住上电按钮,直到示教器状态栏显示电机处于上电状态。

  4. 按下示教器面板上的运行按钮。

如果机器人可以成功抓取和放置纸箱,则说明机器人程序符合要求。

参考:修改后的样例程序

最终修改后的样例程序如下:

PROC Sample_9()
    !set the acceleration parameters
    AccSet 50, 50;
    !set the velocity parameters
    VelSet 50, 1000;
    !move to robot home position
    MoveAbsJ home\NoEOffs,v500,fine,gripper1;
    !initialize communication parameters (initialization is required only once)
    MM_Init_Socket "192.168.10.111",50000,300;
    !move to image-capturing position
    MoveL camera_capture,v1000,fine,gripper1;
    !open socket connection
    MM_Open_Socket;
    !trigger Mech-Viz project
    MM_Start_Viz 2,snap_jps;
    !set branch exit port
    MM_Set_Branch 1,1;
LOOP:
    !get planned path, 1st argument (1) means getting pose in JPs
    MM_Get_VizData 1, pose_num, vis_pose_num, status;
    !check whether planned path has been got from Mech-Viz successfully
    IF status <> 2100 THEN
        !add error handling logic here according to different error codes
        !e.g.: status=2038 means no point cloud in ROI
        Stop;
    ENDIF
    !save waypoints of the planned path to local variables one by one
    MM_Get_JPS 1,jps{1},label{1},speed{1};
    MM_Get_JPS 2,jps{2},label{2},speed{2};
    MM_Get_JPS 3,jps{3},label{3},speed{3};
    !follow the planned path to pick
    !move to approach waypoint of picking
    MoveAbsJ jps{1},v500,fine,gripper1;
    !move to picking waypoint
    MoveAbsJ jps{2},v300,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_1, 1;"
    setDo do0, 1;
    !Stop;
    !trigger Mech-Viz project but not to trigger camera capturing
    MM_Start_Viz 2,snap_jps;
    !move to departure waypoint of picking
    MoveAbsJ jps{3},v500,fine,gripper1;
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint,v500,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop,0,0,-100),v500,fine,gripper1;
    !set branch exit port and trigger camera capturing when robot moves out of camera’s field of view
    MM_Set_Branch 1,1;
    !move to placing waypoint
    MoveL drop,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_1, 0;"
    !Stop;
    setDo do0, 0;
    setDo do4, 1;
    !move to departure waypoint of placing
    MoveL RelTool(drop,0,0,-100),v500,fine,gripper1;
    setDo do4, 0;
    !move back to robot home position
    MoveAbsJ home\NoEOffs,v500,fine,gripper1;
    GOTO LOOP;
END_LOOP:
    !close socket connection
    MM_Close_Socket;
ENDPROC
ENDMODULE

至此,你已完成了3D视觉引导机器人单品类纸箱拆垛应用的部署。

我们重视您的隐私

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