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.

Introduction 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 la prise et la dépose. Dans cet exemple, dès que la caméra capture une image, Mech-Vision planifie des trajectoires de prise pour tous les résultats de vision. Ce programme est applicable aux scénarios où une 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/KUKA/sample/MM_S19_Vis_PlanAllVision.

Projet

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 la prise et la dépose (le code de cette fonctionnalité est en gras). Par conséquent, 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 section suivante. Pour plus d’informations sur les parties de MM_S19_Vis_PlanAllVision identiques à celles de MM_S3_Vis_Path, voir Programme d’exemple: MM_S3_Vis_Path.
DEF  MM_S19_Vis_PlanAllVision ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Vision project, plan all
; vision results and get all planned paths
; Mech-Mind, 2023-12-25
;---------------------------------------------------
   ;set current tool no. to 1
   BAS(#TOOL,1)
   ;set current base no. to 0
   BAS(#BASE,0)
   ;move to robot home position
PTP HOME Vel=100 % DEFAULT
   ;initialize communication parameters (initialization is required only once)
   MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
RECAP:
   ;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
   ;trigger Mech-Viz project
   MM_Start_Vis(1,0,2,init_jps)
   ;get planned path from NO.1 Mech-Vision project; 2nd argument (1) means getting pose in JPs
   MM_Get_Vispath(1,1,pos_num,vis_pos_num,status)
   ;check whether planned path has been got from Mech-Vision successfully
   IF status<> 1103 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=1003 means no point cloud in ROI
      ;e.g.: status=1002 means no vision results
      halt
   ENDIF
   ;save waypoints of the planned path to local variables one by one
   FOR count=1 TO pos_num
      MM_Get_Jps(count,pick_point[count],label[count],toolid[count])
   ENDFOR
   ;parse pick cycle count, here suppose 5 points per planned path
   pick_cnt = pos_num / 5
   residual = pos_num - pick_cnt*5
   ;check if parsed data is valid; if not, retry to get planned path or add some error handling logic
   IF (pick_cnt<1) OR (residual<>0) THEN
      halt
      GOTO RECAP
   ENDIF
   ;repeatedly run pick-and-place cycle using for-loop
   FOR i=1 TO pick_cnt
      count=(i-1)*5
      Xpick_point1=pick_point[1+count]
      Xpick_point2=pick_point[2+count]
      Xpick_point3=pick_point[3+count]
      Xpick_point4=pick_point[4+count]
      Xpick_point5=pick_point[5+count]
      ;follow the planned path to pick
      ;move to approach waypoint of picking
PTP pick_point1 CONT Vel=50 % PDAT1 Tool[1] Base[0]
PTP pick_point2 Vel=50 % PDAT2 Tool[1] Base[0]
PTP pick_point3 Vel=10 % PDAT3 Tool[1] Base[0]
      ;add object grasping logic here, such as "$OUT[1]=TRUE"
      halt
PTP pick_point4 Vel=50 % PDAT5 Tool[1] Base[0]
PTP pick_point5 CONT Vel=50 % PDAT6 Tool[1] Base[0]
      ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT4 Tool[1] Base[0]
      ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
      ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT3 Tool[1] Base[0]
      ;add object releasing logic here, such as "$OUT[1]=FALSE"
      halt
      ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
      ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT4 Tool[1] Base[0]
   ENDFOR
   ;finish pick and-place cycle, and jump back to camera capturing
   GOTO RECAP
END

Le workflow correspondant au code du programme d’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 la commande pour afficher sa description détaillée.

Fonctionnalité Code et description

Enregistrer la trajectoire planifiée par une boucle

FOR count=1 TO pos_num
   MM_Get_Jps(count,pick_point[count],label[count],toolid[count])
ENDFOR
  • Ligne 1: FOR indique une boucle for. count est utilisé pour contrôler le nombre d’itérations de la boucle (c’est-à-dire que count commence à 1 et s’incrémente de 1 après chaque itération jusqu’à dépasser la valeur de pose_num, moment où la boucle se termine). pose_num est le troisième paramètre de la commande MM_Get_Vispath, qui représente le nombre de points de passage renvoyés par le système de vision.

  • Ligne 2: La commande MM_Get_Jps stocke les positions articulaires, l’étiquette et l’ID de l’outil d’un point de passage spécifique dans des variables spécifiques. L’ensemble de la commande stocke les positions articulaires, l’étiquette et l’ID de l’outil du point de passage dont l’ID est count dans les variables pick_point[count], label[count] et toolid[count], respectivement.

  • Ligne 3: La boucle for se termine.

Calculer pick_cnt et residual

;parse pick cycle count, here suppose 5 points per planned path
pick_cnt = pos_num / 5
residual = pos_num - pick_cnt*5

Ce programme d’exemple suppose que chaque trajectoire de prise planifiée contient 5 points de passage. «pos_num / 5» représente le quotient de la valeur pose_num divisée par 5, et «pos_num - pick_cnt*5» représente le reste de la valeur pose_num divisée par 5. pick_cnt est le nombre total de prises planifiées. Si residual n’est pas défini à 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 s’il y a eu une erreur lors de la planification de trajectoire

IF (pick_cnt<1) OR (residual<>0) THEN
   halt
   GOTO RECAP
ENDIF

Si le nombre de prises (pick_cnt) est inférieur à 1 ou si la valeur de residual n’est pas 0, une erreur s’est produite lors de la planification de trajectoire. Vous devez ajouter ici du code de traitement, tel que le code pour redémarrer le projet Mech-Vision puis obtenir la trajectoire planifiée.

Effectuer la prise et la dépose par une boucle

   FOR i=1 TO pick_cnt
      count=(i-1)*5
      Xpick_point1=pick_point[1+count]
      Xpick_point2=pick_point[2+count]
      Xpick_point3=pick_point[3+count]
      Xpick_point4=pick_point[4+count]
      Xpick_point5=pick_point[5+count]
      ;follow the planned path to pick
      ;move to approach waypoint of picking
PTP pick_point1 CONT Vel=50 % PDAT1 Tool[1] Base[0]
PTP pick_point2 Vel=50 % PDAT2 Tool[1] Base[0]
PTP pick_point3 Vel=10 % PDAT3 Tool[1] Base[0]
      ;add object grasping logic here, such as "$OUT[1]=TRUE"
      halt
PTP pick_point4 Vel=50 % PDAT5 Tool[1] Base[0]
PTP pick_point5 CONT Vel=50 % PDAT6 Tool[1] Base[0]
      ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT4 Tool[1] Base[0]
      ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
      ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT3 Tool[1] Base[0]
      ;add object releasing logic here, such as "$OUT[1]=FALSE"
      halt
      ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
      ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT4 Tool[1] Base[0]
   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. i est utilisé pour contrôler le nombre d’itérations de la boucle (c’est-à-dire que i commence à 1 et s’incrémente de 1 après chaque itération jusqu’à dépasser la valeur de pick_cnt, moment où la boucle se termine). Lorsque i s’incrémente de 1, count s’incrémente de 5. [1+count] à [5+count] indiquent l’ID des 5 points de passage planifiés à chaque fois dans la trajectoire totale 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.