Programme d’exemple 19 : MM_S19_Vis_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.

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

Project

Projet Mech-Vision

Dans ce projet, le paramètre Planifier tous les résultats de vision de l’Étape Configuration globale dans l’onglet Workflow de l’outil de planification de trajectoire est activé. Vous pouvez cliquer sur Ouvrir l’éditeur dans l’Étape de planification de trajectoire pour ouvrir l’outil de planification de trajectoire.
sample19 1

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.

sample19

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

  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 ;
  • Ligne 36 : 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, R[10] s’incrémente 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_VISP. 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 37 à 39 : R[11], R[12] et R[13] représentent respectivement les registres utilisés pour les positions articulaires, l’étiquette et l’ID d’outil correspondant au point de passage actuel.

  • Ligne 40 : La commande MM_Get_Jps stocke les positions articulaires, l’étiquette et l’ID d’outil d’un point de passage spécifique dans des registres spécifiques. L’ensemble de la commande stocke les positions articulaires, l’étiquette et l’ID d’outil du point de passage dont l’ID est la valeur de R[10] dans les registres R[11], R[12] et R[13], respectivement.

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

  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    ;

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

  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 ;

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

  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 ;

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.

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.