样例程序2:MM_S2_Viz_Basic

程序简介

功能说明

机器人触发Mech-Viz工程运行,然后获取路径规划结果,进而执行抓取和放置操作。

文件路径

Mech-Vision和Mech-Viz软件安装目录下Communication Component/Robot_Interface/ABB/sample/MM_S2_Viz_Basic

对于RobotWare6系统,文件后缀为.mod。对于RobotWare7系统,用户需将.mod修改为.modx

所需工程

Mech-Vision工程和Mech-Viz工程

使用前提

  1. 已完成标准接口通信配置。

  2. 已完成自动标定。

此样例程序仅是示例程序。用户需根据实际情况在此基础上进行修改,请勿直接使用该程序。

程序解读

以下为MM_S2_Viz_Basic样例程序的代码及相关解释说明。

MODULE MM_S2_Viz_Basic
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz 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}:=
[
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[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_2()
    !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.0.1",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;
    !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
    !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},v300,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_1, 1;"
    Stop;
    !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_1, 0;"
    Stop;
    !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

上述样例程序代码对应的流程如下图所示。

sample2

下表为上述程序的逻辑解读。用户单击指令名称的超链接便可查看该指令的详细说明。

流程 代码及说明

定义变量

!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}:=
[
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,0,0],[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]];

定义局部变量。上述局部变量仅在本程序中生效。

用户需提前示教Home点(home变量)、传入Mech-Viz工程的位姿(snap_jps变量)、拍照点(camera_capture变量)、放置的过渡点(drop_waypoint变量)、放置点(drop变量),并设置工具数据(gripper1变量)。

具体示教方法可参考自动标定中“示教标定起始点”的操作。

设置加速度和速度

!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;

AccSet 50, 50:将加速度限制在正常值的50%,加速度增减率限制在正常值的50%。

VelSet 50, 1000:将速率设置为编程速率的50%,将最大TCP速率设置为1000mm/s。

移动到Home点

!move to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
  • MoveAbsJ:ABB机器人的绝对位置移动指令,表示机器人的各关节轴独立运动至指定位置。

  • home:指定机器人移动的目标位置,即示教的Home点。Home点通常是一个安全的位置(机器人需远离工件和周边设备)。

  • \NoEOffs:运动不受外部轴影响。

  • v3000:机器人的速度为3000mm/s。

  • fine:准确移动到指定位置。

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

因此,整条指令表示机器人准确移动到示教的Home点(不受外部轴影响),速度为3000mm/s。

初始化通信参数

!initialize communication parameters (initialization is required only once)
MM_Init_Socket "127.0.0.1",50000,300;

机器人通过MM_Init_Socket指令指定通信对象(工控机)的IP地址(127.0.0.1)、端口号(50000)以及超时等待时间(300秒)。

用户需根据实际情况修改此处的工控机IP地址和端口号,确保与视觉系统设置的参数一致。

移动到拍照点

!move to image-capturing position
MoveL camera_capture,v1000,fine,gripper1;
  • MoveL:ABB机器人的直线移动指令,表示机器人沿直线移动至指定位置。

  • camera_capture:指定机器人移动的目标位置,即示教的相机拍照点。拍照点指相机采集图像时机器人所在的位置。在此位置,机器人手臂应不遮挡相机视野。

因此,整条指令表示机器人以直线移动方式准确移动至示教的拍照点,速度为1000mm/s。

建立通信

!open socket connection
MM_Open_Socket;

机器人通过MM_Open_Socket指令与视觉系统之间建立TCP协议通信连接。

触发运行Mech-Viz工程

!trigger Mech-Viz project
MM_Start_Viz 2,snap_jps;
  • MM_Start_Viz:触发运行Mech-Viz工程的指令。

  • 2:将snap_jps变量所表示的关节角数据传入Mech-Viz工程。

  • snap_jps:用户自定义的关节角数据,用户需提前对其进行示教。在规划抓取路径时,Mech-Viz工程中仿真机器人将从该关节角开始运动到第一个路径点。

因此,整条指令表示机器人触发视觉系统运行Mech-Viz工程,然后Mech-Viz基于Mech-Vision输出的视觉结果规划机器人的抓取路径。

获取规划路径

!get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData 1, pose_num, vis_pose_num, status;
  • MM_Get_VizData:获取Mech-Viz规划路径的指令。

  • 1:指定获取路径点的位姿形式为关节角。

  • pose_num:该变量保存视觉系统返回的路径点个数。

  • vis_pose_num:该变量保存视觉移动路径点(抓取点)在路径中的位置编号。

  • status:该变量保存指令执行的状态码。

因此,整条指令表示机器人获取Mech-Viz工程返回的规划路径。

由于返回的规划路径保存在机器人内存中,此时用户无法直接获取到规划路径,必须通过后续“转存规划路径”才可访问。
!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

当状态码status为2100时,则机器人成功获取到规划路径;否则视觉系统发生异常。用户可根据具体异常状态码做相应的处理。

关闭通信

!close socket connection
MM_Close_Socket;

机器人通过MM_Close_Socket指令断开与视觉系统之间的TCP协议通信连接。

转存规划路径

!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};
  • MM_Get_Jps:转存规划路径的指令。

  • 1:将转存第一个路径点。

  • jps{1}:该变量将保存第一个路径点的关节角。

  • label{1}:该变量将保存第一个路径点对应的标签。

  • toolid{1}:该变量将保存第一个路径点对应的末端工具编号。

因此,“MM_Get_JPS 1,jps{1},label{1},toolid{1};”整条指令表示将第一个路径点的关节角、标签和末端工具编号分别转存至指定变量。

本样例假设Mech-Viz规划的路径包含三个路径点,其中第一个路径点为抓取接近点,第二个路径点为抓取点,第三个路径点为抓取离开点。用户需结合实际Mech-Viz工程转存规划路径。

移动到抓取接近点

!move to approach waypoint of picking
MoveAbsJ jps{1},v1000,fine,gripper1;

机器人移动到抓取接近点(即jps{1}所表示的位置)。

移动到抓取点

!move to picking waypoint
MoveAbsJ jps{2},v300,fine,gripper1;

机器人移动到抓取点(即jps{2}所表示的位置)。

设置DO执行抓取

!add object grasping logic here, such as "setdo DO_1, 1;"
Stop;

机器人移动到抓取点后,通过设置DO指令(例如“setdo DO_1, 1;”),控制末端工具进行抓取。用户需根据实际场景增加设置DO的操作。

Stop表示暂停程序执行。用户如果已添加设置DO的语句,此处可以删除Stop语句。

移动到抓取离开点

!move to departure waypoint of picking
MoveAbsJ jps{3},v1000,fine,gripper1;

机器人移动到抓取离开点(即jps{3}所表示的位置)。

移动到中间过渡点

!move to intermediate waypoint of placing
MoveJ drop_waypoint,v1000,z50,gripper1;
  • MoveJ:ABB机器人的关节角移动指令,表示机器人沿弧线移动至指定位置。

  • drop_waypoint:指定机器人移动的目标位置,即中间过渡点。

  • z50:转弯半径为50mm。

因此,整条指令表示机器人以关节角移动方式移动至抓取离开点与放置接近点之间的某个过渡点,速度为1000mm/s,转弯半径为50mm。

添加过渡点可保证机器人平滑移动,同时避免一些不必要的碰撞。用户可根据实际场景添加多个过渡点。

移动到放置接近点

!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
  • RelTool(pickpoint,0,0,-100):指定机器人移动的目标位置,其中RelTool表示相对于工具坐标系的移动,drop(放置点)是工具坐标系的基准点,“0,0,-100”表示相对于drop的Z轴负方向100mm处。

因此,整条指令表示机器人移动到放置点上方的100mm处,即到达放置接近点。

增加放置接近点可防止机器人在移动过程中与场景物体(例如料筐)发生碰撞。用户可根据实际场景修改此处的Z轴负方向偏移量,保证接近过程无碰撞。

移动到放置点

!move to placing waypoint
MoveL drop,v300,fine,gripper1;

机器人从放置接近点移动到放置点。

设置DO执行放置

!add object releasing logic here, such as "setdo DO_1, 0;"
Stop;

机器人移动到放置点后,通过设置DO指令(例如“setdo DO_1, 0;”),控制末端工具进行放置。用户需根据实际场景增加设置DO的操作。

Stop表示暂停程序执行。用户如果已添加设置DO的语句,此处可以删除Stop语句。

移动到放置离开点

!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;

机器人移动到放置点上方的100mm处,即到达放置离开点。

增加放置离开点可防止机器人在移动过程中与场景物体(例如料筐)发生碰撞。用户可根据实际场景修改此处的Z轴负方向偏移量,保证离开过程无碰撞。

移动到Home点

!move back to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;

机器人从放置离开点重新移动到Home点。

我们重视您的隐私

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