Programme d’exemple 20 : MM_S20_Viz_PlanAllVision

Vous consultez actuellement la documentation pour la dernière version (2.1.2). Pour accéder à une autre version, cliquez sur le bouton "Changer de version" situé dans le coin supérieur droit de la page.

■ Si vous n’êtes pas sûr de la version du produit que vous utilisez, veuillez contacter le support technique Mech-Mind pour obtenir de l’aide.

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 Communication Component/Robot_Interface/FANUC/sample/MM_S20_Viz_PlanAllVision.

Projet

Projets Mech-Vision et Mech-Viz

Dans le projet Mech-Viz, le paramètre Réutiliser le résultat de vision de l’étape Déplacement par vision doit être activé.
sample20 1

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.

sample20

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

  24:  !get planned path ;
  25:  CALL MM_GET_PLNDT(0,3,51,52,53) ;
  • MM_GET_PLNDT : La commande permettant d’obtenir la trajectoire planifiée. Les points de passage Vision Move obtenus par cette commande contiennent, en plus des poses, les données Vision Move et les données personnalisées (le cas échéant), tandis que les points de passage Vision Move obtenus par la commande MM_GET_VIZDATA ne contiennent ni données Vision Move ni données personnalisées.

  • 0: Obtenir la trajectoire planifiée depuis Mech-Viz.

  • 3: Le format des données attendu en retour, à savoir : pose (en positions articulaires), type de mouvement, ID d’outil, vitesse, données Vision Move de Mech-Viz, élément 1 des données personnalisées, ..., élément N des données personnalisées.

  • 51: Le registre numérique R[51], qui stocke le nombre de points de passage renvoyés par le système de vision.

  • 52: Le registre numérique R[52], qui stocke le numéro de séquence du point de passage Vision Move (point de prise) dans la trajectoire.

  • 53: Le registre numérique R[53], qui stocke le code d’état d’exécution de la commande.

Stocker la trajectoire planifiée par bouclage

  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 ;
  • Ligne 34 : FOR indique le début d’un segment de boucle. R[10] est utilisé pour contrôler le nombre d’itérations (à partir de 1, la valeur de R[10] augmente de 1 après chaque itération jusqu’à dépasser la valeur définie dans R[51], moment où la boucle se termine). R[51] est le registre numérique indiqué par le troisième paramètre de la commande MM_GET_PLNDT. Le registre numérique stocke le nombre de points de passage renvoyés par le système de vision. Ainsi, R[10] peut indiquer l’ID de position du point de passage actuel dans la trajectoire planifiée.

  • Lignes 35 à 41 : Les registres R[11], R[12], R[13], R[14], R[15], R[16] et R[17] stockent respectivement les positions articulaires, le type de mouvement, l’ID d’outil, la vitesse, les données Vision Move et les données personnalisées du point de passage actuel.

  • Ligne 42 : La commande MM_GET_PLJOP stocke les positions articulaires, le type de mouvement, l’ID d’outil, la vitesse, les données Vision Move et les données personnalisées d’un point de passage spécifique dans des registres spécifiés. Cela signifie que les positions articulaires, le type de mouvement, l’ID d’outil, la vitesse, les données Vision Move et les données personnalisées du point de passage représenté par R[10] sont stockés séquentiellement dans les registres indiqués par R[11], R[12], R[13], R[14], R[15], R[16] et R[17].

Calculer les valeurs de R[30] et R[31]

  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    ;

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

  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 ;

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

  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 ;

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.

Cette page est-elle utile ?

Veuillez nous indiquer comment améliorer :

Nous accordons de l’importance à votre vie privée

Nous utilisons des cookies pour vous offrir la meilleure expérience possible sur notre site web. En continuant à utiliser le site, vous reconnaissez accepter l’utilisation des cookies. Si vous refusez, un cookie unique sera utilisé pour garantir que vous ne soyez pas suivi ou reconnu lors de votre visite sur ce site.