Programme d’exemple 19: MM_S19_Vis_PlanAllVision
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 |
||
Projet |
Projet Mech-Vision
|
||
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.
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 |
|
Calculer pick_cnt et residual |
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 |
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 |
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. |