Programme d’exemple 19 : MM_S19_Vis_PlanAllVision
Présentation du programme
Description |
Le robot déclenche l’exécution du projet Mech-Vision. Ensuite, le robot utilise des boucles for pour obtenir toutes les trajectoires planifiées et effectuer des opérations de prise et de dépose. Dans cet exemple, une fois que la caméra capture une image, Mech-Vision planifie des trajectoires de prise pour tous les résultats de vision. Ce programme s’applique aux scénarios où une image est utilisée pour effectuer plusieurs opérations de prise. |
||
File path |
Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier en utilisant le chemin |
||
Project |
Projet Mech-Vision
|
||
Prérequis |
|
| 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 section décrit le programme d’exemple MM_S19_Vis_PlanAllVision.
| La seule différence entre le programme d’exemple MM_S19_Vis_PlanAllVision et le programme d’exemple MM_S3_Vis_Path est que MM_S19_Vis_PlanAllVision peut utiliser des boucles for pour obtenir toutes les trajectoires planifiées et effectuer des opérations de prise et de dépose (le code de cette fonctionnalité est en gras). Ainsi, seule la fonctionnalité consistant à utiliser des boucles for pour obtenir toutes les trajectoires planifiées et effectuer la prise et la dépose est décrite dans la partie suivante. Pour les parties de MM_S19_Vis_PlanAllVision identiques à celles de MM_S3_Vis_Path, voir Programme d’exemple : MM_S3_Vis_Path. |
1: !-------------------------------- ;
2: !FUNCTION: trigger Mech-Vision ;
3: !project, plan all vision results ;
4: !and get all planned paths ;
5: !Mech-Mind, 2023-12-25 ;
6: !-------------------------------- ;
7: ;
8: !set current uframe NO. to 0 ;
9: UFRAME_NUM=0 ;
10: !set current tool NO. to 1 ;
11: UTOOL_NUM=1 ;
12: !move to robot home position ;
13:J P[1] 100% FINE ;
14: !initialize communication ;
15: !parameters(initialization is ;
16: !required only once) ;
17: CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
18: LBL[1:recap] ;
19: !move to image-capturing position ;
20:L P[2] 1000mm/sec FINE ;
21: !trigger NO.1 Mech-Vision project ;
22: CALL MM_START_VIS(1,0,2,10) ;
23: !get planned path from NO.1 ;
24: !Mech-Vision project; 2nd ;
25: !argument (1) means getting pose ;
26: !in JPs ;
27: CALL MM_GET_VISP(1,1,51,52,53) ;
28: !check whether planned path has ;
29: !been got from Mech-Vision ;
30: !successfully ;
31: IF R[53]<>1103,JMP LBL[99] ;
32: !save all waypoint data to local ;
33: !variables using for-loop, a ;
34: !maximum of 50 points are support ;
35: !supported ;
36: FOR R[10]=1 TO R[51] ;
37: R[11]=59+R[10] ;
38: R[12]=69+R[10] ;
39: R[13]=99+R[10] ;
40: CALL MM_GET_JPS(R[10],R[11],R[12],R[13]) ;
41: ENDFOR ;
42: !parse pick cycle count, here ;
43: !suppose 5 points per planned ;
44: !path ;
45: R[30]=R[51] DIV 5 ;
46: R[29]=R[51] MOD 5 ;
47: !check if parsed data is valid; ;
48: !if not, retry to get planned ;
49: !path or add some error handling ;
50: !logic ;
51: IF R[30]<1) OR (R[29]<>0 THEN ;
52: PAUSE ;
53: JMP LBL[1] ;
54: ENDIF ;
55: !repeatedly run pick-and-place ;
56: !cycle using for-loop ;
57: FOR R[10]=1 TO R[30] ;
58: R[20]=R[10]-1 ;
59: R[21]=R[20]*5 ;
60: R[31]=60+R[21] ;
61: R[32]=61+R[21] ;
62: R[33]=62+R[21] ;
63: R[34]=63+R[21] ;
64: R[35]=64+R[21] ;
65: !follow the planned path to pick ;
66:J PR[R[31]] 50% CNT100 ;
67:J PR[R[32]] 50% FINE ;
68:J PR[R[33]] 10% FINE ;
69: !add object grasping logic here, ;
70: !such as "DO[1]=ON" ;
71: PAUSE ;
72:J PR[R[34]] 50% FINE ;
73:J PR[R[35]] 50% CNT100 ;
74: !move to intermediate waypoint ;
75: !of placing ;
76:J P[3] 50% CNT100 ;
77: !move to approach waypoint ;
78: !of placing ;
79:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
80: !move to placing waypoint ;
81:L P[4] 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[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
88: !move to intermediate waypoint ;
89: !of placing ;
90:J P[3] 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=1003 means no ;
102: !point cloud in ROI ;
103: !e.g.: status=1002 means no ;
104: !vision results ;
105: PAUSE ;
Le flux de travail correspondant au code de l’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 la prise et la dépose. Vous pouvez cliquer sur l’hyperlien du nom de commande pour en consulter la description détaillée.
| Fonctionnalité | Code et description |
|---|---|
Stocker la trajectoire planifiée par itération |
|
Calculer les valeurs de R[30] et R[29] |
Cet exemple suppose que chaque trajectoire de prise planifiée comporte 5 points de passage. « R[51] DIV 5 » indique le quotient lorsque la valeur de R[51] est divisée par 5, et « R[51] MOD 5 » indique le reste lorsque la valeur de R[51] est divisée par 5. R[30] indique le nombre total de prises. Si R[29] n’est pas égal à 0, le nombre planifié de points de passage de prise est inférieur à 5 (c’est‑à‑dire qu’une erreur s’est produite lors de la planification de trajectoire et une nouvelle planification est nécessaire). |
Déterminer si une erreur s’est produite lors de la planification de trajectoire |
Si le nombre de prises (R[30]) est inférieur à 1 ou si la valeur de R[29] n’est pas 0, une erreur s’est produite lors de la planification de trajectoire. Vous devez ajouter ici du code de traitement, par exemple le code pour redémarrer le projet Mech-Vision puis obtenir la trajectoire planifiée. |
Effectuer la prise et la dépose en boucle |
Le code ci-dessus indique que, dans la boucle for, le robot se déplace vers les 5 points de passage planifiés à chaque fois pour réaliser l’opération de prise, puis effectue l’opération de dépose. R[10] est utilisé pour contrôler le nombre d’itérations de la boucle (c’est‑à‑dire que la valeur de R[10] commence à 1 et s’incrémente de 1 après chaque itération 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] est incrémentée de 5. L’intervalle allant de 60+R[21] à 64+R[21] (c’est‑à‑dire de R[31] à R[35]) correspond aux IDs des registres où seront stockés les 5 points de passage de chaque trajectoire planifiée. |