Example Program 9: MM_S9_Viz_RunInAdvance

Program Introduction

Description

The Mech-Viz project is triggered when the robot performs picking. Then, the camera is started by the Branch by Msg Step of the project when the robot performs placing to plan the next path, shortening the cycle time.

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_S9_Viz_RunInAdvance path.

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

Project

Mech-Vision and Mech-Viz projects

The Mech-Viz project requires that the Branch by Msg Step be configured beforehand.

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_S9_Viz_RunInAdvance example program.

The only difference between the MM_S9_Viz_RunInAdvance example program and the MM_S5_Viz_SetBranch example program is that MM_S9_Viz_RunInAdvance can plan the next path (this code of this feature is bolded). As such, only the feature of planning the next path is described in the following section. For information about the parts of MM_S9_Viz_RunInAdvance that are consistent with those of MM_S5_Viz_SetBranch, see Example Program 5: MM_S5_Viz_SetBranch.
MODULE MM_S9_Viz_RunInAdvance
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project then set branch and get
! planned path, trigger Mech-Viz project and set branch in
! advance during pick&place process
! 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}:=
[
    [[11.1329,49.0771,-36.9666,0.5343,79.2476,-169.477],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[11.2355,52.1281,-23.3996,0.5938,62.6295,-169.548],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[11.1329,49.0771,-36.9666,0.5343,79.2476,-169.477],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[11.1329,49.0771,-36.9666,0.5343,79.2476,-169.477],[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_9()
    !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;
    !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},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;
    !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},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;
    !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;
    !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;
    GOTO LOOP;
END_LOOP:
    !close socket connection
    MM_Close_Socket;
ENDPROC
ENDMODULE

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

sample9

The following part describes the feature of planning the next path.

Feature Code and description

Plan the next path in advance by looping (picking→triggering the next round of path planning→placing)

LOOP:
    ...
    GOTO LOOP;

The above code indicates that the program loops through the code between LOOP and GOTO LOOP.

!get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData 1, pose_num, vis_pose_num, status;

The above code indicates that the robot obtains the planned path from Mech-Viz by running the MM_Get_VizData command.

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

The above code indicates that the robot stores the planned path in the specified variable by running the MM_Get_Jps command. This example assumes that jps{1}, jps{2}, and jps{3} are the approach waypoint of picking, the picking waypoint, and the departure waypoint of picking.

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

The above code indicates that the robot moves to the approach waypoint of picking and then to the picking waypoint, and then the DO command (such as setdo DO_1, 1;) is run to control the tool to perform picking.

!trigger Mech-Viz project but not to trigger camera capturing
MM_Start_Viz 2,snap_jps;

The above code indicates that the robot runs the MM_Start_Viz command to start the Mech-Viz project again. Now that the robot has obtained the planned picking path and has moved to the picking waypoint, you can start the Mech-Viz project in advance to plan the next path instead of waiting for the placing to complete and then starting the Mech-Viz project.

Once the Mech-Viz project is executed, the project will wait for the MM_Set_Branch command to set the exit port for the Branch by Msg Step. In addition, the Visual Recognition Step (which performs image capturing) was set on a branch of the Branch by Msg Step, so the camera does not perform image capturing at this time point.
!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;

The above code indicates that the robot moves to the departure waypoint of picking (jps{3}), the intermediate waypoint (drop_waypoint), and then the approach waypoint of placing (RelTool(drop,0,0,-100)).

!set branch exit port and trigger camera capturing when robot moves out of camera's field of view
MM_Set_Branch 1,1;

In the above example, the robot sets the exit port of the Branch by Msg Step with the MM_Set_Branch command. On this exit port, the Visual Recognition Step will be executed. Then, Mech-Viz will plan the next picking path in advance based on the vision result.

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

In the above example, the robot moves to the placing waypoint (drop), performs placing (for example, setdo DO_1, 0;), and then moves to the departure waypoint of placing (RelTool(drop,0,0,-100)) and then the home position.

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.