Programme d’exemple 9 : MM_S9_Viz_RunInAdvance
Présentation du programme
Description |
Le projet Mech-Viz est déclenché lorsque le robot effectue la prise. Ensuite, la caméra est démarrée par l’étape Branch by Msg du projet lorsque le robot effectue la dépose, afin de planifier la trajectoire suivante et ainsi réduire le temps de cycle. |
||
File path |
Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier via le chemin
|
||
Project |
Projets Mech-Vision et Mech-Viz
|
||
Prerequisites |
|
| Ce programme d’exemple est fourni uniquement à titre de référence. Avant d’utiliser le programme, veuillez le modifier en fonction du scénario réel. |
Description du programme
Cette partie décrit le programme d’exemple MM_S9_Viz_RunInAdvance.
| La seule différence entre le programme d’exemple MM_S9_Viz_RunInAdvance et le programme d’exemple MM_S5_Viz_SetBranch est que MM_S9_Viz_RunInAdvance peut planifier la trajectoire suivante (le code de cette fonctionnalité est en gras). Ainsi, seule la fonctionnalité de planification de la trajectoire suivante est décrite dans la section suivante. Pour des informations sur les parties de MM_S9_Viz_RunInAdvance qui sont identiques à celles de MM_S5_Viz_SetBranch, voir Programme d’exemple 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
Le flux de travail correspondant au code de programme d’exemple ci-dessus est illustré dans la figure ci-dessous.
La partie suivante décrit la fonctionnalité de planification de la trajectoire suivante.
| Fonctionnalité | Code et description | ||
|---|---|---|---|
Planifier à l’avance la trajectoire suivante par bouclage (prise→déclenchement du prochain cycle de planification de trajectoire→dépose) |
Le code ci-dessus indique que le programme boucle sur le code entre LOOP et GOTO LOOP.
Le code ci-dessus indique que le robot obtient la trajectoire planifiée depuis Mech-Viz en exécutant la commande MM_Get_VizData.
Le code ci-dessus indique que le robot stocke la trajectoire planifiée dans la variable spécifiée en exécutant la commande MM_Get_Jps. Cet exemple suppose que jps{1}, jps{2} et jps{3} correspondent respectivement au point d’approche de la prise, au point de prise et au point de départ de la prise.
Le code ci-dessus indique que le robot se déplace vers le point d’approche de la prise puis vers le point de prise, puis la commande DO (par exemple setdo DO_1, 1;) est exécutée pour contrôler l’outil afin d’effectuer la prise.
Le code ci-dessus indique que le robot exécute la commande MM_Start_Viz pour relancer le projet Mech-Viz. Maintenant que le robot a obtenu la trajectoire de prise planifiée de ce cycle et s’est déplacé vers le point de prise, vous pouvez démarrer le projet Mech-Viz à l’avance pour planifier la trajectoire du cycle suivant, au lieu d’attendre la fin de la dépose pour ensuite démarrer le projet Mech-Viz.
Le code ci-dessus indique que le robot se déplace vers le point de départ de la prise (jps{3}), le point intermédiaire (drop_waypoint), puis le point d’approche de la dépose (RelTool(drop,0,0,-100)).
Dans l’exemple ci-dessus, le robot définit le port de sortie de l’étape Branchement par message avec la commande MM_Set_Branch. Sur ce port de sortie, l’étape de reconnaissance visuelle sera exécutée. Ensuite, Mech-Viz planifiera à l’avance la trajectoire de prise suivante en fonction du résultat de vision.
Dans l’exemple ci-dessus, le robot se déplace vers le point de dépose (drop), effectue la dépose (par exemple setdo DO_1, 0;), puis se déplace vers le point de départ de la dépose (RelTool(drop,0,0,-100)) et enfin vers la position d’origine. |