Example Program 7: MM_S7_Viz_SwitchTCP
Program Introduction
Description |
The robot starts the Mech-Viz project, obtains the path planning result, and then changes the tool according to the tool ID of the picking waypoint to perform picking and placing. |
||
File path |
You can navigate to the installation directory of Mech-Vision and Mech-Viz and find the file by using the
|
||
Project |
Mech-Vision and Mech-Viz projects |
||
Prerequisites |
|
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_S7_Viz_SwitchTCP example program.
The only difference between the MM_S7_Viz_SwitchTCP example program and the MM_S2_Viz_Basic example program is that MM_S7_Viz_SwitchTCP can change the tool according to the tool ID(this code of this feature is bolded). As such, only the feature of changing the tool according to the tool ID is described in the following section. For information about the parts of MM_S7_Viz_SwitchTCP that are consistent with those of MM_S2_Viz_Basic, see Example Program 2: MM_S2_Viz_Basic. |
MODULE MM_S7_Viz_SwitchTCP
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project and get planned path,
! switch TCP according to the label
! 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 robtarget pos{5}:=
[
[[502.502,99.5586,399.968],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[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]],
[[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]],
[[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]],
[[502.502,99.5586,399.968],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define LOCAL tooldata variables
LOCAL PERS tooldata cur_gripper:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];
LOCAL PERS tooldata gripper{5}:=,[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]]];
PROC Sample_7()
!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;
!move to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,cur_gripper;
!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,cur_gripper;
!open socket connection
MM_Open_Socket;
!trigger Mech-Viz project
MM_Start_Viz 2,snap_jps;
!get planned path, 1st argument (2) means getting pose in TCP
MM_Get_VizData 2, 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_Pose 1,pos{1},label{1},toolid{1};
MM_Get_Pose 2,pos{2},label{2},toolid{2};
MM_Get_Pose 3,pos{3},label{3},toolid{3};
!reset tool signals according to received toolId
IF toolid{vis_pose_num}=1 Then
cur_gripper:=gripper{toolid{vis_pose_num}};
!reset tool signal;
ELSEIF toolid{vis_pose_num}=2 Then
cur_gripper:=gripper{toolid{vis_pose_num}};
!reset tool signal;
ELSE
Stop;
!reset tool signal;
ENDIF
!follow the planned path to pick
!move to approach waypoint of picking
MoveL pos{1},v1000,fine,cur_gripper;
!move to picking waypoint
MoveL pos{2},v300,fine,cur_gripper;
!add object grasping logic here
IF toolid{vis_pose_num}=1 Then
Stop;
!open tool signal;
ELSEIF toolid{vis_pose_num}=2 Then
Stop;
!open tool signal;
ELSE
Stop;
!open tool signal;
ENDIF
!move to departure waypoint of picking
MoveL pos{3},v1000,fine,cur_gripper;
!move to intermediate waypoint of placing
MoveJ drop_waypoint,v1000,z50,cur_gripper;
!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,cur_gripper;
!move to placing waypoint
MoveL drop,v300,fine,cur_gripper;
!add object releasing logic here
IF toolid{vis_pose_num}=1 Then
Stop;
!reset tool signal;
ELSEIF toolid{vis_pose_num}=2 Then
Stop;
!reset tool signal;
ELSE
Stop;
!reset tool signal;
ENDIF
!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,cur_gripper;
!move back to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,cur_gripper;
ENDPROC
ENDMODULE
The workflow corresponding to the above example program code is shown in the figure below.
The table below describes the bolded code.
Feature | Code and description | ||
---|---|---|---|
Obtain the planned path |
The entire statement indicates that the robot obtains the planned path from the Mech-Viz project.
|
||
Store the planned path |
The entire command “MM_Get_Pose 1,pos{1},label{1},toolid{1}” stores the TCP, label, and tool ID of the first waypoint in the specified variables.
|
||
Change the tool based on the tool ID |
toolid{vis_pose_num} indicates the tool ID of the picking waypoint. You can determine the tool to be used when the robot moves to the target pose (picking waypoint) based on the value of the toolid {vis_pose_num} variable, i.e., change the tool according to the tool ID. The description of the above code is shown below.
When the robot moves to the picking waypoint, you can enable the DO signals corresponding to the tool ID, as shown in the following code.
When the robot moves to the placing waypoint, you can disable and reset the DO signals corresponding to the tool ID, as shown in the following code.
|