样例程序1:MM_S1_Vis_Basic

您正在查看最新版本(V2.1.0)的文档。如果您想查阅其他版本的文档,可以点击页面右上角“切换版本”按钮进行切换。

■ 如果您不确定当前使用的产品是哪个版本,请随时联系梅卡曼德技术支持。

程序简介

功能说明

机器人触发Mech-Vision工程运行,然后获取视觉结果,进而执行抓取和放置操作。

文件路径

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

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

所需工程

Mech-Vision工程

使用前提

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

  2. 已完成自动标定。

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

程序解读

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

MODULE MM_S1_Vis_Basic
!--------------------------------------------------------------
! FUNCTION: trigger Mech-Vision project and get vision result
! Mech-Mind, 2023-12-25
!-------------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num label:=0;
LOCAL VAR num toolid:=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 pick_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 pickpoint:=[[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[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]];
!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_1()
    !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 NO.1 Mech-Vision project
    MM_Start_Vis 1,0,2,snap_jps;
    !get vision result from NO.1 Mech-Vision project 
    MM_Get_VisData 1,pose_num,status;
    !check whether vision result has been got from Mech-Vision successfully
    IF status<>1100 THEN
        !add error handling logic here according to different error codess
        !e.g.: status=1003 means no point cloud in ROI
        !e.g.: status=1002 means no vision result
        Stop;
    ENDIF
    !close socket connection
    MM_Close_Socket;
    !save first vision point data to local variables
    MM_Get_Pose 1,pickpoint,label,toolid;
    !move to intermediate waypoint of picking
    MoveJ pick_waypoint,v1000,z50,gripper1;
    !move to approach waypoint of picking
    MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;
    !move to picking waypoint
    MoveL pickpoint,v300,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_1, 1;"
    Stop;
    !move to departure waypoint of picking
    MoveL RelTool(pickpoint,0,0,-100),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

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

sample1

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

流程 代码及说明

定义变量

!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num label:=0;
LOCAL VAR num toolid:=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 pick_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 pickpoint:=[[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[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]];
!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-Vision工程的位姿(snap_jps变量)、拍照点(camera_capture变量)、抓取的过渡点(pick_waypoint变量)、放置的过渡点(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-Vision工程

!trigger NO.1 Mech-Vision project
MM_Start_Vis 1,0,2,snap_jps;
  • MM_Start_Vis:触发运行Mech-Vision工程的指令。

  • 1:Mech-Vision工程编号。

  • 0:期望Mech-Vision工程返回所有视觉点。

  • 2:将机器人的当前法兰位姿传入Mech-Vision工程。

  • snap_jps:用户自定义的关节角数据,此样例中该关节角数据无实际用处,但必须设定该关节角数据。

因此,整条指令表示机器人触发视觉系统运行编号为1的Mech-Vision工程,且期望Mech-Vision工程返回所有视觉点。

获取视觉结果

!get vision result from NO.1 Mech-Vision project
MM_Get_VisData 1,pose_num,status;
  • MM_Get_VisData:获取视觉结果的指令。

  • 1:Mech-Vision工程编号。

  • pose_num:该变量保存获取的视觉点数量。

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

因此,整条指令表示机器人获取Mech-Vision工程1返回的视觉结果。

由于返回的视觉结果保存在机器人内存中,此时用户无法直接获取到视觉结果,必须通过后续“转存视觉结果”才可访问。
!check whether vision result has been got from Mech-Vision successfully
IF status<>1100 THEN
    !add error handling logic here according to different error codess
    !e.g.: status=1003 means no point cloud in ROI
    !e.g.: status=1002 means no vision result
    Stop;
ENDIF

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

关闭通信

!close socket connection
MM_Close_Socket;

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

转存视觉结果

!save first vision point data to local variables
MM_Get_Pose 1,pickpoint,label,toolid;
  • MM_Get_Pose:转存视觉结果的指令。

  • 1:将转存第一个视觉点。

  • pickpoint:该变量将保存第一个视觉点的工具位姿,即抓取点的工具位姿。

  • label:该变量将保存第一个视觉点对应的标签。

  • toolid:该变量将保存第一个视觉点对应的末端工具编号。

因此,整条指令表示将第一个视觉点的工具位姿、标签和末端工具编号分别转存至指定变量。

移动到中间过渡点

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

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

  • z50:转弯半径为50mm。

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

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

移动到抓取接近点

!move to approach waypoint of picking
MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;
  • MoveL:ABB机器人的移动指令,表示机器人要执行一条直线移动。

  • RelTool(pickpoint,0,0,-100):指定机器人移动的目标位置,其中RelTool表示相对于工具坐标系的移动,pickpoint(抓取点)是工具坐标系的基准点,“0,0,-100”表示相对于pickpoint的Z轴负方向100mm处(即机器人移动到抓取点上方的100mm处,到达抓取接近点)。

因此,整条指令表示机器人直线移动到抓取点上方100mm处,速度为1000mm/s。

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

移动到抓取点

!move to picking waypoint
MoveL pickpoint,v300,fine,gripper1;

机器人以直线移动方式从抓取接近点移动到抓取点。

设置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
MoveL RelTool(pickpoint,0,0,-100),v1000,fine,gripper1;

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

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

移动到中间过渡点

!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;

机器人移动到放置点上方的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 来确保您在访问本网站时不会被跟踪或记住。