Programme d’exemple 10 : MM_S10_Viz_Subtask
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.
|
||
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 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 |
||
Projet |
Projets Mech-Vision et Mech-Viz |
||
Prérequis |
|
|
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.
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 |
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) |
Le code ci-dessus indique que le programme principal boucle sur le code entre LOOP et ENDLOOP.
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).
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.
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 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.
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. |