Programme d’exemple 8 : MM_S8_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.

Introduction du programme

Description

Ce programme d’exemple se compose de deux programmes : un programme principal et un programme secondaire. Le programme secondaire (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 en fonction de la trajectoire planifiée. Ensuite, le programme principal déclenche l’exécution du programme secondaire lorsque le robot effectue le dépôt, afin d’obtenir la trajectoire planifiée suivante, ce qui réduit le temps de cycle.

Cet exemple est très similaire au programme d’exemple MM_S10_Viz_Subtask, à ceci près que le moment où le programme principal déclenche le programme secondaire est différent. Il est recommandé de comparer les deux exemples afin de mieux en saisir les nuances.

Chemin du fichier

Programme secondaire : 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/sub_prog/MM_S8_Sub.

Programme principal : 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_S8_Viz_Subtask.

Projet

Projets Mech-Vision et Mech-Viz

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.

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

Description du programme

La partie suivante décrit le programme secondaire.

Semblable au programme d’exemple MM_S2_Viz_Basic, le programme secondaire déclenche l’exécution du projet Mech-Viz et obtient le code de la trajectoire planifiée. Par conséquent, les fonctionnalités du programme secondaire 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_S8_Sub ( )
;---------------------------------------------------
; FUNCTION: run Mech-Viz project and get planned
; path in subtask (run together with MM_S8_Viz_Subtask)
; Mech-Mind, 2023-12-25
;---------------------------------------------------
   $OUT[2000]=FALSE
   ;initialize communication parameters (initialization is required only once)
   MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
   LOOP
      IF $OUT[2000]==TRUE THEN
         ;trigger Mech-Viz project
         MM_Start_Viz(2,init_jps_a)
         ;get planned path, 1st argument (1) means getting pose in JPs
         MM_Get_VizData(1,pos_num_a,vis_pos_num_a,status_a)
         ;check whether planned path has been got from Mech-Viz successfully
         IF status_a==2100 THEN
            ;save waypoints of the planned path to local variables one by one
            MM_Get_Jps(1,pick_point_a[1],label_a[1],toolid_a[1])
            MM_Get_Jps(2,pick_point_a[2],label_a[2],toolid_a[2])
            MM_Get_Jps(3,pick_point_a[3],label_a[3],toolid_a[3])
         ENDIF
         $OUT[2000]=FALSE
      ENDIF
   ENDLOOP
END

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

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

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

La partie suivante décrit le programme principal.

Semblable au programme d’exemple MM_S2_Viz_Basic, le programme principal effectue la prise et le dépôt sur la base du code de trajectoire planifiée. Par conséquent, les fonctionnalités du programme principal 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_S8_Viz_Subtask ( )
;---------------------------------------------------
; FUNCTION: run Mech-Viz project and get planned
; path in subtask (run together with MM_S8_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[2000]=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[2000]==FALSE)
   ;check whether planned path has been got from Mech-Viz successfully
   IF status_a<> 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_a[1]
   Xpick_point2=pick_point_a[2]
   Xpick_point3=pick_point_a[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]
   ;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]
   ;trigger Mech-Viz project and get planned path in advance
   $OUT_C[2000]=TRUE
   ;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.

sample8

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

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[2000]=TRUE

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

Planifier la trajectoire suivante à l’avance par une boucle (prise→déclenchement du prochain cycle de planification de trajectoire→dépôt)

LOOP
    ...
ENDLOOP

Le code ci-dessus indique que le programme principal parcourt en boucle 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[2000]==FALSE)

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

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

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

   ;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]
   ;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]

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), le point intermédiaire du dépôt (drop_waypoint), et enfin le point d’approche du dépôt (drop_app).

;trigger Mech-Viz project and get planned path in advance
$OUT_C[2000]=TRUE

Le code ci-dessus indique que le programme principal définit à nouveau $OUT_C[2000] sur TRUE pour déclencher à nouveau l’exécution du projet Mech-Viz et obtenir la trajectoire planifiée. Étant donné que le robot se trouve dans la zone de dépôt, il peut planifier à l’avance la prochaine trajectoire de prise sans attendre la fin du dépôt puis planifier la prochaine trajectoire de prise.

   ;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

Dans l’exemple ci-dessus, le robot se déplace vers le point de dépôt (drop), effectue le dépôt (par exemple, $OUT[1]=FALSE), puis se déplace vers le point de départ du dépôt (drop_app) et enfin 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.