Programme d’exemple 8 : MM_S8_Viz_Subtask
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.
|
||
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 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 |
||
Projet |
Projets Mech-Vision et Mech-Viz |
||
Prérequis |
|
|
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.
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 |
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) |
Le code ci-dessus indique que le programme principal parcourt en boucle 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 programme secondaire obtienne et stocke la trajectoire planifiée (c’est-à-dire que $OUT[2000] passe de TRUE à FALSE).
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.
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).
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.
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. |