Example Program 15: MM_S15_Viz_GetDoList

Program Introduction

Description

After obtaining the picking path and DO signals, the robot can perform picking and placing by repeatedly moving to the picking waypoint and setting the DO signals in a loop. This example program is used in depalletizing scenarios, and the tool used by the robot is a multi-section vacuum gripper.

File path

You can navigate to the installation directory of Mech-Vision and Mech-Viz and find the file by using the Communication Component/Robot_Interface/ABB/sample/MM_S15_Viz_GetDoList path.

For RobotWare6, the file extension is .mod. For RobotWare7, please modify the file extension from .mod to .modx.

Project

Mech-Vision project and Mech-Viz project (the tool is a depalletizing vacuum gripper)

Prerequisites

  1. You have set up the standard interface communication.

  2. Automatic calibration is completed.

This example program is provided for reference only. Before using the program, please modify the program according to the actual scenario.

Program Description

This part describes the MM_S15_Viz_GetDoList example program.

Compared with the MM_S2_Viz_Basic example program, this example program contains only the following modification (the code of this modification is bolded). As such, only the modification is described in the following section. For information about the parts of MM_S15_Viz_GetDoList that are consistent with those of MM_S2_Viz_Basic, see Example Program 2: MM_S2_Viz_Basic.
MODULE MM_S15_Viz_GetDoList
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project, then get planned path
! and gripper control signal using command 210
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num movetype{5}:=[0,0,0,0,0];
LOCAL VAR num toolnum{5}:=[0,0,0,0,0];
LOCAL VAR num speed{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 VAR robtarget pickpoint:=[[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 VAR 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 VAR 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}:=
[
    [[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[1.2008,45.8522,-13.6729,0.1512,57.8163,176.689],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[36.2634,-36.6956,48.5019,-1.0197,78.1304,356.473],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,90,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_15()
    !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
    MM_Get_PlanData 0, 3, 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
    !get gripper control signal list
    MM_Get_Dolist 0,0;
    !close socket connection
    MM_Close_Socket;
    !save waypoints of the planned path to local variables one by one
    FOR i FROM 1 TO pose_num DO
        count:=i;
        MM_Get_PlanJps count,3,JPS{count},movetype{count},toolnum{count},speed{count};
    ENDFOR
    !follow the planned path to pick
    FOR j FROM 1 TO pose_num DO
        count:=j;
        MoveAbsJ jps{count},v1000,fine,gripper1;
        !set gripper control signal when current waypoint is picking waypoint
        IF count=vis_pose_num THEN
            !add object grasping logic here
            Stop;
            !set gripper control signal
            !MM_Set_DoList 0, 1, go16_1;
            !MM_Set_DoList 0, 2, go16_2;
            !MM_Set_DoList 0, 3, go16_3;
            !MM_Set_DoList 0, 4, go16_4;
        ENDIF
    ENDFOR
    !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

The workflow corresponding to the above example program code is shown in the figure below.

sample15

The table below describes the bolded code. You can click the hyperlink to the command name to view its detailed description.

Feature Code and description

Obtain the planned path

!get planned path
MM_Get_PlanData 0, 3, pose_num, vis_pose_num, status;
  • MM_Get_PlanData: The command to obtain the planned path. The Vision Move waypoints obtained by this command contain Vision Move data and custom data (if any) in addition to poses, while Vision Move waypoints obtained by the MM_Get_VizData command do not contain Vision Move data or custom data.

  • 0: Obtain the planned path from Mech-Viz.

  • 3: The format of the data that is expected to be returned, which is pose (in joint positions), motion type, tool ID, velocity, Mech-Viz Vision Move data, element 1 in custom output data, ..., element N in custom output data.

  • pose_num: The variable that stores the number of waypoints returned by the vision system.

  • vis_pose_num: The variable that stores the position of the Vision Move waypoint (picking waypoint) in the path.

  • status: The variable that stores the command execution status code.

Obtain the gripper DO list

!get gripper control signal list
MM_Get_Dolist 0,0;
  • MM_Get_Dolist: The command to obtain the gripper DO list.

  • First 0: Specify the source of the DO signals, i.e., obtain the multi-section gripper DO signals from Mech-Viz.

  • Second 0: Obtain all planned gripper DO signals.

Store the planned path by looping

FOR i FROM 1 TO pose_num DO
    count:=i;
    MM_Get_PlanJps count,3,JPS{count},movetype{count},toolnum{count},speed{count};
ENDFOR
  • Line 1: FOR indicates a for loop. i is used to control the number of iterations in the loop (i.e., i starts from 1 and increments by 1 after each loop iteration until it exceeds the value of pose_num, at which point the loop ends). pose_num is the third parameter of the MM_Get_PlanData command, which represents the number of waypoints returned by the vision system.

  • Line 2: Assign the value of i to count, where count represents the ID of the current waypoint in the planned path.

  • Line 3: The MM_Get_PlanJps command stores the joint positions, motion type, tool ID, and velocity of a specific waypoint in specific variables. The entire command stores the joint positions, motion type, tool ID, and velocity of the waypoint with an ID of count in the JPS{count}, movetype{count}, toolnum{count}, and speed{count} variables respectively.

Perform picking by looping

FOR j FROM 1 TO pose_num DO
    count:=j;
    MoveAbsJ jps{count},v1000,fine,gripper1;
    !set gripper control signal when current waypoint is picking waypoint
    IF count=vis_pose_num THEN
        !add object grasping logic here
        Stop;
        !set gripper control signal
        !MM_Set_DoList 0, 1, go16_1;
        !MM_Set_DoList 0, 2, go16_2;
        !MM_Set_DoList 0, 3, go16_3;
        !MM_Set_DoList 0, 4, go16_4;
    ENDIF
ENDFOR
  • Line 1: FOR indicates a for loop. j is used to control the number of iterations in the loop (i.e., j starts from 1 and increments by 1 after each loop iteration until it exceeds the value of pose_num, at which point the loop ends). pose_num is the third parameter of the MM_Get_PlanData command, which represents the number of waypoints returned by the vision system.

  • Line 2: Assign the value of j to count, where count represents the ID of the current waypoint in the planned path.

  • Line 3: Move the robot to the waypoint whose sequential number in the planned path is count.

  • Line 5-13: If the count waypoint is a Vision Move waypoint (picking waypoint), set the gripper DO signals by running the MM_Set_DoList command to finish picking.

We Value Your Privacy

We use cookies to provide you with the best possible experience on our website. By continuing to use the site, you acknowledge that you agree to the use of cookies. If you decline, a single cookie will be used to ensure you're not tracked or remembered when you visit this website.