Programme d’exemple 16 : MM_S16_Viz_GetDirection
Présentation du programme
Description |
Après que le robot a obtenu le trajet planifié et terminé la prise, il adopte différentes stratégies de dépose selon l’orientation du groupe d’objets. |
Chemin du fichier |
Accédez au répertoire d’installation de Mech-Vision et Mech-Viz et trouvez le fichier en utilisant le chemin |
Projet |
Projet Mech-Vision et projet Mech-Viz (l’outil est une pince à vide de dépalletisation) |
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 partie décrit le programme d’exemple MM_S16_Viz_GetDirection.
| Comparé au programme d’exemple MM_S15_Viz_GetDoList, ce programme ne contient que la modification suivante (le code de cette modification est en gras). Ainsi, seule la modification est décrite dans la section suivante. Pour les parties de MM_S16_Viz_GetDirection identiques à celles de MM_S15_Viz_GetDoList, consultez Programme d’exemple 15 : MM_S15_Viz_GetDoList. |
1: !-------------------------------- ;
2: !FUNCTION: trigger Mech-Viz ;
3: !project, then get planned path ;
4: !and get box direction using ;
5: !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: !move to image-capturing position ;
20:L P[2] 1000mm/sec FINE ;
21: !trigger Mech-Viz project ;
22: CALL MM_START_VIZ(2,10) ;
23: !get planned path ;
24: CALL MM_GET_PLNDT(0,3,51,52,53) ;
25: !check whether planned path has ;
26: !been got from Mech-Viz ;
27: !successfully ;
28: IF R[53]<>2100,JMP LBL[99] ;
29: !get gripper control signal list ;
30: CALL MM_GET_DL(0,0) ;
31: !save waypoints of the planned ;
32: !path to local variables one ;
33: !by one ;
34: CALL MM_GET_PLJOP(1,3,60,61,62,63,64,70) ;
35: CALL MM_GET_PLJOP(2,3,61,91,92,93,94,100) ;
36: CALL MM_GET_PLJOP(3,3,62,121,122,123,124,130) ;
37: !get box direction status from ;
38: !planned results of 2nd point ;
39: R[10]=R[116] ;
40: !follow the planned path to pick ;
41: !move to approach waypoint ;
42: !of picking ;
43:J PR[60] 50% FINE ;
44: !move to picking waypoint ;
45:J PR[61] 10% FINE ;
46: !add object grasping logic here ;
47: PAUSE ;
48: !set gripper control signal ;
49: CALL MM_SET_DL(0) ;
50: !move to departure waypoint ;
51: !of picking ;
52:J PR[62] 50% FINE ;
53: !place the box according to its ;
54: !direction ;
55: IF R[10]=0,JMP LBL[1] ;
56: IF R[10]<>0,JMP LBL[2] ;
57: ;
58: LBL[1:place position 1] ;
59: !move to intermediate waypoint ;
60: !of placing ;
61:J P[3] 50% CNT100 ;
62: !move to approach waypoint ;
63: !of placing ;
64:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
65: !move to placing waypoint ;
66:L P[4] 300mm/sec FINE ;
67: !add object releasing logic here, ;
68: !such as "DO[1]=OFF" ;
69: PAUSE ;
70: !move to departure waypoint ;
71: !of placing ;
72:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
73: JMP LBL[3] ;
74: ;
75: LBL[2:place position 2] ;
76: !move to intermediate waypoint ;
77: !of placing ;
78:J P[5] 50% CNT100 ;
79: !move to approach waypoint ;
80: !of placing ;
81:L P[6] 1000mm/sec FINE Tool_Offset,PR[2] ;
82: !move to placing waypoint ;
83:L P[6] 300mm/sec FINE ;
84: !add object releasing logic here, ;
85: !such as "DO[1]=OFF" ;
86: PAUSE ;
87: !move to departure waypoint ;
88: !of placing ;
89:L P[6] 1000mm/sec FINE Tool_Offset,PR[2] ;
90: JMP LBL[3] ;
91: ;
92: LBL[3] ;
93: !move back to robot home position ;
94:J P[1] 100% FINE ;
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 le code en gras. Vous pouvez cliquer sur le lien hypertexte du nom de la commande pour en afficher la description détaillée.
| Fonctionnalité | Code et description | ||
|---|---|---|---|
Obtenir l’orientation du groupe d’objets |
Le robot obtient les données Vision Move des points de passage en exécutant la commande MM_GET_PLNDT, puis enregistre les données Vision Move des points de passage stockées dans la mémoire du robot dans des registres spécifiés en exécutant la commande MM_GET_PLJOP. Dans l’exemple, les données Vision Move pour le point de prélèvement (PR[61]) sont stockées dans des registres à partir de R[100]. R[116] indique la position relative entre le groupe d’objets et la longueur de la pince à vide. La valeur est 0 ou 1, où 0 signifie parallèle et 1 verticale. Le code ci-dessus affecte la valeur de R[116] à R[10]. Dans ce cas, R[10] indiquera l’orientation du groupe d’objets. |
||
Adopter une stratégie de dépose basée sur l’orientation du groupe d’objets |
Le code ci-dessus indique que si le groupe d’objets est parallèle au grand côté de la pince à vide (c.-à-d. R[10] vaut 0), le groupe d’objets sera déposé à P[4] ; sinon, le groupe d’objets sera déposé à P[6]. |