Programme d’exemple 20 : MM_S20_Viz_PlanAllVision
Introduction du programme
Description |
Le robot déclenche l’exécution du projet Mech-Viz. Ensuite, le robot utilise des boucles for pour obtenir toutes les trajectoires planifiées et effectuer les opérations de prise et de dépose. Dans cet exemple, une fois l’image capturée par la caméra, Mech-Viz planifie des trajectoires de prise pour tous les résultats de vision. Ce programme s’applique aux scénarios où une seule image est utilisée pour effectuer plusieurs prises. |
||
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 le modifier en fonction du scénario réel. |
Description du programme
Cette partie décrit le programme d’exemple MM_S20_Viz_PlanAllVision.
| La seule différence entre le programme d’exemple MM_S20_Viz_PlanAllVision et le programme d’exemple MM_S2_Viz_Basic est que MM_S20_Viz_PlanAllVision peut utiliser des boucles for pour obtenir toutes les trajectoires planifiées et effectuer les opérations de prise et de dépose (le code de cette fonctionnalité est mis en gras). Par conséquent, seule la fonctionnalité d’utilisation de boucles for pour obtenir toutes les trajectoires planifiées et effectuer les opérations de prise et de dépose est décrite dans la partie suivante. Pour les informations concernant les parties de MM_S20_Viz_PlanAllVision identiques à celles de MM_S2_Viz_Basic, voir Programme d’exemple 2 : MM_S2_Viz_Basic. |
1: !-------------------------------- ;
2: !FUNCTION: trigger Mech-Viz ;
3: !project, plan all vision results ;
4: !and get all planned results ;
5: !using command 210 ;
6: !Mech-Mind, 2023-12-25 ;
7: !-------------------------------- ;
8: ;
9: !set current uframe NO. to 0 ;
10: UFRAME_NUM=0 ;
11: !set current tool NO. to 1 ;
12: UTOOL_NUM=1 ;
13: !move to robot home position ;
14:J P[1] 100% FINE ;
15: !initialize communication ;
16: !parameters(initialization is ;
17: !required only once) ;
18: CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
19: LBL[1:recap] ;
20: !move to image-capturing position ;
21:L P[2] 1000mm/sec FINE ;
22: !trigger Mech-Viz project ;
23: CALL MM_START_VIZ(2,10) ;
24: !get planned path ;
25: CALL MM_GET_PLNDT(0,3,51,52,53) ;
26: !check whether planned path has ;
27: !been got from Mech-Viz ;
28: !successfully ;
29: IF R[53]<>2100,JMP LBL[99] ;
30: !save all waypoint data to local ;
31: !variables using for-loop, a ;
32: !maximum of 50 points are support ;
33: !supported ;
34: FOR R[10]=1 TO R[51] ;
35: R[11]=59+R[10] ;
36: R[12]=R[10]*30 ;
37: R[13]=31+R[12] ;
38: R[14]=32+R[12] ;
39: R[15]=33+R[12] ;
40: R[16]=34+R[12] ;
41: R[17]=40+R[12] ;
42: CALL MM_GET_PLJOP(R[10],3,R[11],R[13],R[14],R[15],R[16],R[17]) ;
43: ENDFOR ;
44: !parse pick cycle count, here ;
45: !suppose 3 points per planned ;
46: !path ;
47: R[30]=R[51] DIV 3 ;
48: R[31]=R[51] MOD 3 ;
49: !check if parsed data is valid; ;
50: !if not, retry to get planned ;
51: !path or add some error handling ;
52: !logic ;
53: IF R[30]<1) OR (R[31]<>0 THEN ;
54: PAUSE ;
55: JMP LBL[1] ;
56: ENDIF ;
57: !repeatedly run pick-and-place ;
58: !cycle using for-loop ;
59: FOR R[10]=1 TO R[30] ;
60: R[20]=R[10]-1 ;
61: R[21]=R[20]*3 ;
62: R[31]=60+R[21] ;
63: R[32]=61+R[21] ;
64: R[33]=62+R[21] ;
65: !move to intermediate waypoint ;
66: !of picking ;
67:J P[3] 50% CNT100 ;
68: !follow the planned path to pick ;
69:J PR[R[31]] 50% FINE ;
70:J PR[R[32]] 10% FINE ;
71: !add object grasping logic here ;
72: PAUSE ;
73:J PR[R[33]] 50% FINE ;
74: !move to intermediate waypoint ;
75: !of placing ;
76:J P[4] 50% CNT100 ;
77: !move to approach waypoint ;
78: !of placing ;
79:L P[5] 1000mm/sec FINE Tool_Offset,PR[2] ;
80: !move to placing waypoint ;
81:L P[5] 300mm/sec FINE ;
82: !add object releasing logic here, ;
83: !such as "DO[1]=OFF" ;
84: PAUSE ;
85: !move to departure waypoint ;
86: !of placing ;
87:L P[5] 1000mm/sec FINE Tool_Offset,PR[2] ;
88: !move to intermediate waypoint ;
89: !of placing ;
90:J P[4] 50% CNT100 ;
91: ENDFOR ;
92: !finish pick-and-place cycle, and ;
93: !jump back to camera capturing ;
94: JMP LBL[1] ;
95: END ;
96: ;
97: LBL[99:vision error] ;
98: !add error handling logic here ;
99: !according to different ;
100: !error codes ;
101: !e.g.: status=2038 means no ;
102: !point cloud in ROI ;
103: PAUSE ;
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 la fonctionnalité consistant à utiliser des boucles for pour obtenir toutes les trajectoires planifiées et effectuer les opérations de prise et de dépose. Vous pouvez cliquer sur le lien hypertexte associé au nom de la commande pour en afficher la description détaillée.
| Fonctionnalité | Code et description |
|---|---|
Obtenir la trajectoire planifiée |
|
Stocker la trajectoire planifiée par bouclage |
|
Calculer les valeurs de R[30] et R[31] |
Cet exemple suppose que chaque trajectoire de prise planifiée se compose de 3 points de passage. « R[51] DIV 3 » indique le quotient lorsque la valeur de R[51] est divisée par 3, et « R[51] MOD 3 » indique le reste lorsque la valeur de R[51] est divisée par 3. R[30] indique le nombre total de prises. Si R[31] n’est pas égal à 0, le nombre prévu de points de passage de prise est inférieur à 3 (c.-à-d. qu’une erreur s’est produite lors de la planification de la trajectoire et qu’une nouvelle planification est nécessaire). |
Déterminer si une erreur s’est produite lors de la planification de la trajectoire |
Si le nombre de prises (R[30]) est inférieur à 1 ou si la valeur de R[31] n’est pas 0, une erreur s’est produite lors de la planification de la trajectoire. Vous devez ajouter ici du code de traitement, tel que le code pour redémarrer le projet Mech-Viz puis obtenir la trajectoire planifiée. |
Effectuer les opérations de prise et de dépose par bouclage |
Le code ci-dessus indique que, dans la boucle for, le robot se déplace vers les 3 points de passage planifiés à chaque fois pour effectuer l’opération de prise, puis réalise l’opération de dépose. R[10] est utilisé pour contrôler le nombre d’itérations dans la boucle (c’est-à-dire que la valeur de R[10] commence à 1 et augmente de 1 après chaque itération de boucle jusqu’à dépasser la valeur de R[30], moment où la boucle se termine). À chaque fois que la valeur de R[10] augmente de 1, la valeur de R[21] augmente de 3. L’intervalle 60+R[21] à 62+R[21] (c.-à-d. R[31] à R[33]) correspond aux ID des registres dans lesquels seront stockés les 3 points de passage de chaque trajectoire planifiée. |