Programme d’exemple 7 : MM_S7_Viz_SwitchTCP
Présentation du programme
Description |
Le robot démarre le projet Mech-Viz, obtient le résultat de planification de trajectoire, puis change l’outil en fonction de l’ID d’outil du point de passage de prise afin d’effectuer la prise et la dépose. |
||
Chemin du fichier |
Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier en utilisant le chemin
|
||
Projet |
Projets Mech-Vision et Mech-Viz |
||
Prérequis |
|
| Ce programme d’exemple est fourni à titre de référence uniquement. Avant d’utiliser le programme, veuillez modifier le programme en fonction du scénario réel. |
Description du programme
Cette partie décrit le programme d’exemple MM_S7_Viz_SwitchTCP.
| La seule différence entre le programme d’exemple MM_S7_Viz_SwitchTCP et le programme d’exemple MM_S2_Viz_Basic est que MM_S7_Viz_SwitchTCP peut changer l’outil en fonction de l’ID d’outil(ce code de cette fonctionnalité est en gras). Par conséquent, seule la fonctionnalité de changement d’outil selon l’ID d’outil est décrite dans la section suivante. Pour les parties de MM_S7_Viz_SwitchTCP identiques à celles de MM_S2_Viz_Basic, voir Programme d’exemple 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
Le flux de travail correspondant au code du programme d’exemple ci-dessus est illustré dans la figure ci-dessous.
Le tableau ci-dessous décrit le code en gras.
| Fonctionnalité | Code et description | ||
|---|---|---|---|
Obtenir la trajectoire planifiée |
L’ensemble de l’instruction indique que le robot obtient la trajectoire planifiée depuis le projet Mech-Viz.
|
||
Stocker la trajectoire planifiée |
L’ensemble de la commande “MM_Get_Pose 1,pos{1},label{1},toolid{1}” enregistre le TCP, l’étiquette et l’ID d’outil du premier point de passage dans les variables spécifiées.
|
||
Changer l’outil en fonction de l’ID d’outil |
toolid{vis_pose_num} indique l’ID d’outil du point de passage de prise. Vous pouvez déterminer l’outil à utiliser lorsque le robot se déplace vers la pose cible (point de passage de prise) en fonction de la valeur de la variable toolid {vis_pose_num}, c’est-à-dire changer l’outil selon l’ID d’outil. La description du code ci-dessus est présentée ci-dessous.
Lorsque le robot se déplace vers le point de passage de prise, vous pouvez activer les signaux DO correspondant à l’ID d’outil, comme illustré dans le code suivant.
Lorsque le robot se déplace vers le point de passage de dépose, vous pouvez désactiver et réinitialiser les signaux DO correspondant à l’ID d’outil, comme illustré dans le code suivant.
|