Programme d’exemple 10 : MM_S10_Viz_Subtask

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

Ce programme d’exemple se compose de deux programmes : un programme principal et un sous-programme. Le sous-programme (programme en arrière-plan) déclenche l’exécution du projet Mech-Viz afin d’obtenir la trajectoire planifiée. Le programme principal (programme au premier plan) déplace le robot sur la base de la trajectoire planifiée. Ensuite, le programme principal déclenche l’exécution du sous-programme lorsque le robot quitte la zone de prise afin d’obtenir la prochaine trajectoire planifiée, ce qui raccourcit le temps de cycle.

Cet exemple est très similaire au programme d’exemple MM_S8_Viz_Subtask, à la différence que le moment où le programme principal déclenche le sous-programme est différent. Il est recommandé de comparer les deux exemples pour mieux en comprendre les nuances.

Chemin du fichier

Sous-programme : Vous pouvez naviguer jusqu’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/sub_prog/MM_S10_Sub.

Programme principal : Vous pouvez naviguer jusqu’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_S10_Viz_Subtask.

Projet

Projets Mech-Vision et Mech-Viz

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.

  • Le programme principal est un programme au premier plan. Le sous-programme est un programme en arrière-plan qui doit être exécuté automatiquement après le démarrage du système robotique.

Description du programme

La partie suivante décrit le sous-programme.

À l’instar du programme d’exemple MM_S2_Viz_Basic, le sous-programme déclenche l’exécution du projet Mech-Viz et obtient le code de trajectoire planifiée. Par conséquent, les fonctionnalités du sous-programme similaires à celles de MM_S2_Viz_Basic ne sont pas décrites dans cette partie. Pour plus d’informations sur ces fonctionnalités, voir Programme d’exemple 2 : MM_S2_Viz_Basic.
DEF MM_S10_Sub ( )
;---------------------------------------------------
; FUNCTION: run Mech-Viz project and get planned
; path in subtask (run together with
; MM_S10_Viz_Subtask)
; Mech-Mind, 2023-12-25
;---------------------------------------------------
   $OUT[2001]=FALSE
   ;initialize communication parameters (initialization is required only once)
   MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
   LOOP
      IF $OUT[2001]==TRUE THEN
         ;trigger Mech-Viz project
         MM_Start_Viz(2,init_jps_b)
         ;get planned path, 1st argument (1) means getting pose in JPs
         MM_Get_VizData(1,pos_num_b,vis_pos_num_b,status_b)
         ;check whether planned path has been got from Mech-Viz successfully
         IF status_b==2100 THEN
            ;save waypoints of the planned path to local variables one by one
            MM_Get_Jps(1,pick_point_b[1],label_b[1],toolid_b[1])
            MM_Get_Jps(2,pick_point_b[2],label_b[2],toolid_b[2])
            MM_Get_Jps(3,pick_point_b[3],label_b[3],toolid_b[3])
         ENDIF
         $OUT[2001]=FALSE
      ENDIF
   ENDLOOP
END

Le code ci-dessus montre que le sous-programme fixe $OUT[2001] à FALSE, initialise les paramètres de communication, puis écoute en continu la valeur de $OUT[2001] au moyen d’une boucle.

  • Lorsque $OUT[2001] est défini sur TRUE, le sous-programme déclenche l’exécution du projet Mech-Viz, obtient la trajectoire planifiée, puis définit $OUT[2001] sur FALSE.

  • Lorsque $OUT[2001] est défini sur FALSE, le sous-programme écoute en continu la valeur de $OUT[2001].

La partie suivante décrit le programme principal.

À l’instar du programme d’exemple MM_S2_Viz_Basic, le programme principal effectue la prise et la dépose sur la base du code de trajectoire planifiée. Par conséquent, les fonctionnalités du sous-programme similaires à celles de MM_S2_Viz_Basic ne sont pas décrites dans cette partie. Pour plus d’informations sur ces fonctionnalités, voir Programme d’exemple 2 : MM_S2_Viz_Basic.
DEF  MM_S10_Viz_Subtask ( )
;---------------------------------------------------
; FUNCTION: run Mech-Viz project and get planned
; path in subtask (run together with MM_S10_Sub)
; 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
   ;trigger Mech-Viz project and get planned path
   $OUT[2001]=TRUE
LOOP
   ;move to wait position for picking
LIN pick_wait_point Vel=1 m/s CPDAT6 Tool[1] Base[0]
   ;wait until subtask program finished
   WAIT FOR ($OUT[2001]==FALSE)
   ;check whether planned path has been got from Mech-Viz successfully
   IF status_b<> 2100 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=2038 means no point cloud in ROI
      halt
   ENDIF
   ;save waypoints of the planned path to jps variables one by one
   Xpick_point1=pick_point_b[1]
   Xpick_point2=pick_point_b[2]
   Xpick_point3=pick_point_b[3]
   ;follow the planned path to pick
   ;move to approach waypoint of picking
PTP pick_point1 Vel=50 % PDAT1 Tool[1] Base[0]
   ;move to picking waypoint
PTP pick_point2 Vel=10 % PDAT2 Tool[1] Base[0]
   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   halt
   ;move to departure waypoint of picking
PTP pick_point3 Vel=50 % PDAT3 Tool[1] Base[0]
   ;trigger Mech-Viz project and get planned path in advance
   TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO $OUT[2001]=TRUE
   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0]
   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[1] Base[0]
   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT4 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 CPDAT3 Tool[1] Base[0]
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT
ENDLOOP
END

Le flux de travail correspondant au code du programme d’exemple ci-dessus est illustré dans la figure ci-dessous.

sample10

Le tableau ci-dessous illustre le code principal du programme.

Flux de travail Code et description

Déclencher l’exécution du projet Mech-Viz et obtenir la trajectoire planifiée

;trigger Mech-Viz project and get planned path
$OUT[2001]=TRUE

Le code ci-dessus indique que le programme principal définit $OUT[2001] sur TRUE. Dans ce cas, le sous-programme détecte que la valeur de $OUT[2001] est TRUE. Ensuite, le sous-programme déclenche l’exécution du projet Mech-Viz et obtient la trajectoire planifiée.

Planifier la trajectoire suivante à l’avance par bouclage (prise→déclenchement du prochain cycle de planification de trajectoire→dépose)

LOOP
    ...
ENDLOOP

Le code ci-dessus indique que le programme principal boucle sur le code entre LOOP et ENDLOOP.

   ;move to wait position for picking
LIN pick_wait_point Vel=1 m/s CPDAT6 Tool[1] Base[0]
   ;wait until subtask program finished
   WAIT FOR ($OUT[2001]==FALSE)

Dans l’exemple ci-dessus, le robot se déplace vers un point d’attente avant la prise et attend que le sous-programme obtienne et stocke la trajectoire planifiée (c’est-à-dire que $OUT[2001] passe de TRUE à FALSE).

;save waypoints of the planned path to jps variables one by one
Xpick_point1=pick_point_b[1]
Xpick_point2=pick_point_b[2]
Xpick_point3=pick_point_b[3]

Dans l’exemple ci-dessus, la trajectoire planifiée (pick_point_b[1], pick_point_b[2] et pick_point_b[3]) obtenue par le sous-programme sera stockée dans Xpick_point1, Xpick_point2 et Xpick_point3.

   ;move to approach waypoint of picking
PTP pick_point1 Vel=50 % PDAT1 Tool[1] Base[0]
   ;move to picking waypoint
PTP pick_point2 Vel=10 % PDAT2 Tool[1] Base[0]
   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   halt
   ;move to departure waypoint of picking
PTP pick_point3 Vel=50 % PDAT3 Tool[1] Base[0]

Dans l’exemple ci-dessus, le robot se déplace le long de la trajectoire planifiée vers le point d’approche de la prise (pick_point1), puis vers le point de prise (pick_point2), effectue la prise (par exemple, $OUT[1]=TRUE), puis se déplace vers le point de départ de la prise (pick_point3).

;trigger Mech-Viz project and get planned path in advance
TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO $OUT[2001]=TRUE
  • TRIGGER WHEN DISTANCE …​ DELAY …​ DO …​ : Cela permet de déclencher une commande prédéfinie qui s’exécute de manière synchrone avec le mouvement du robot et qui est étroitement liée au point de départ ou au point cible de l’instruction de mouvement. Le point de départ est pick_point3 et le point cible est drop_waypoint.

  • DISTANCE : Spécifie la position de déclenchement de la commande prédéfinie, avec une valeur de 0 ou 1.

    • 0 : La commande est déclenchée au point de départ de l’instruction de mouvement.

    • 1 : La commande est déclenchée au point cible de l’instruction de mouvement. Si le point cible est sous forme d’approximation de trajectoire, l’instruction sera déclenchée au point médian de l’arc de trajectoire approximé.

  • DELAY : Spécifie le temps de retard pour le déclenchement de la commande à la position sélectionnée. La valeur peut être positive ou négative, exprimée en millisecondes, et doit être inférieure à 10,000,000 ms.

  • DO $OUT[2001]=TRUE : Spécifie que la commande prédéfinie est $OUT[2001]=TRUE, ce qui signifie déclencher l’exécution du projet Mech-Viz et obtenir la trajectoire planifiée.

Le code ci-dessus indique que lorsque le robot approche du point cible (drop_waypoint, le point intermédiaire lors de la dépose), le robot appelle $OUT[2001] = TRUE. Cette commande signifie que le sous-programme déclenche à nouveau l’exécution du projet Mech-Viz et obtient la trajectoire planifiée. Étant donné que le robot se trouve désormais en dehors de la zone de dépose, il peut planifier à l’avance la prochaine trajectoire de prise sans attendre la fin de la dépose puis planifier la prochaine trajectoire de prise.

Veuillez noter la différence entre ce programme d’exemple et le programme d’exemple MM_S8_Viz_Subtask. Le programme d’exemple MM_S8_Viz_Subtask déclenche le sous-programme avant que le robot ne se déplace vers le point de dépose, tandis que ce programme d’exemple déclenche le sous-programme après que le robot a quitté la zone de prise.
   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0]
   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[1] Base[0]
   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT4 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 CPDAT3 Tool[1] Base[0]
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT

L’exemple ci-dessus indique que le robot se déplace vers le point intermédiaire de dépose (drop_waypoint), le point d’approche de dépose (drop_app), puis le point de dépose (drop), effectue la dépose (par exemple, $OUT[1]=FALSE), puis se déplace vers le point de départ de la dépose (drop_app) et ensuite vers la position d’origine.

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.