Programme d’exemple 16: MM_S16_Viz_GetDirection

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

Après que le robot a obtenu la trajectoire planifiée et terminé la prise, le robot adopte différentes stratégies de dépose en fonction de l’orientation du groupe d’objets.

Chemin du fichier

Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier via le chemin Communication Component/Robot_Interface/KUKA/sample/MM_S16_Viz_GetDirection.

Projet

Projet Mech-Vision et projet Mech-Viz (l’outil est un préhenseur à vide pour la dépalettisation)

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 partie décrit le programme d’exemple MM_S16_Viz_GetDirection.

Comparé au programme d’exemple MM_S15_Viz_GetDoList, ce programme d’exemple ne contient que la modification suivante (le code de cette modification est en gras). Par conséquent, seule la modification est décrite dans la section suivante. Pour des informations sur les parties de MM_S16_Viz_GetDirection qui sont cohérentes avec celles de MM_S15_Viz_GetDoList, voir Programme d’exemple 15: MM_S15_Viz_GetDoList.
DEF  MM_S16_Viz_GetDirection ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Viz project, then get
; planned path and get box direction using command
; 210
; 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)
   ;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
   ;trigger Mech-Viz project
   MM_Start_Viz(2,init_jps)
   ;get planned path
   MM_Get_PlanData(0,3,pos_num,vis_pos_num,status)
   ;check whether planned path has been got from Mech-Viz successfully
   IF status<> 2100 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=2038 means no point cloud in ROI
      halt
   ENDIF
   ;get gripper control signal list
   MM_Get_Dolist(0,0)
   ;save waypoints of the planned path to local variables one by one
   FOR count=1 TO pos_num
     MM_Get_PlanJps(count,3,pick_point[count],move_type[count],tool_num[count],speed[count])
   ENDFOR
   Xpick_point1=pick_point[1]
   Xpick_point2=pick_point[2]
   Xpick_point3=pick_point[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
   halt
   ;set gripper control signal
   MM_Set_Dolist(0)
   ;move to departure waypoint of picking
PTP pick_point3 Vel=50 % PDAT3 Tool[1] Base[0]
   ;get box direction status from planned results
   box_direction=MM_Plan_Results[17]
   IF box_direction==0 THEN
      ;move to intermediate waypoint of placing
PTP drop_waypoint_1 CONT Vel=100 % PDAT4 Tool[1] Base[0]
      ;move to approach waypoint of placing
LIN drop_app_1 Vel=1 m/s CPDAT2 Tool[1] Base[0]
      ;move to placing waypoint
LIN drop_1 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_1 Vel=1 m/s CPDAT2 Tool[1] Base[0]
   ELSE
      ;move to intermediate waypoint of placing
PTP drop_waypoint_2 CONT Vel=100 % PDAT5 Tool[1] Base[0]
      ;move to approach waypoint of placing
LIN drop_app_2 Vel=1 m/s CPDAT4 Tool[1] Base[0]
      ;move to placing waypoint
LIN drop_2 Vel=0.3 m/s CPDAT5 Tool[1] Base[0]
      ;add object releasing logic here, such as "$OUT[1]=FALSE"
      halt
      ;move to departure waypoint of placing
LIN drop_app_2 Vel=1 m/s CPDAT4 Tool[1] Base[0]
   ENDIF
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT
END

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

sample16

Le tableau ci-dessous décrit le code en gras. Vous pouvez cliquer sur l’hyperlien du nom de la commande pour en afficher la description détaillée.

Fonctionnalité Code et description

Obtenir l’orientation du groupe d’objets

;get box direction status from planned results
box_direction=MM_Plan_Results[17]
Dans le projet Mech-Viz, les données Vision Move désignent les données produites par l’étape Vision Move, incluant les étiquettes des objets prélevés, le nombre d’objets prélevés, le nombre d’objets à prélever cette fois, l’ID de bord ou d’angle du préhenseur à vide, le décalage du TCP, l’orientation du groupe d’objets, l’orientation de l’objet et les dimensions du groupe d’objets.

Le robot obtient les données Vision Move des points de passage en exécutant la commande MM_Get_PlanData, puis enregistre dans le tableau global MM_Plan_Results les données Vision Move des points de passage qui sont stockées dans la mémoire du robot en exécutant la commande MM_Get_PlanJps.

Dans le tableau global MM_Plan_Results, MM_Plan_Results[17] spécifie la relation d’orientation entre le groupe d’objets et le côté long du préhenseur à vide. 0 indique parallèle, tandis que 1 indique perpendiculaire.

Le code ci-dessus indique que si MM_Plan_Results[17] est affecté à la variable box_direction, la variable box_direction indiquera l’orientation du groupe d’objets.

Adopter une stratégie de dépose basée sur l’orientation du groupe d’objets

   IF box_direction==0 THEN
      ;move to intermediate waypoint of placing
PTP drop_waypoint_1 CONT Vel=100 % PDAT4 Tool[1] Base[0]
      ;move to approach waypoint of placing
LIN drop_app_1 Vel=1 m/s CPDAT2 Tool[1] Base[0]
      ;move to placing waypoint
LIN drop_1 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_1 Vel=1 m/s CPDAT2 Tool[1] Base[0]
   ELSE
      ;move to intermediate waypoint of placing
PTP drop_waypoint_2 CONT Vel=100 % PDAT5 Tool[1] Base[0]
      ;move to approach waypoint of placing
LIN drop_app_2 Vel=1 m/s CPDAT4 Tool[1] Base[0]
      ;move to placing waypoint
LIN drop_2 Vel=0.3 m/s CPDAT5 Tool[1] Base[0]
      ;add object releasing logic here, such as "$OUT[1]=FALSE"
      halt
      ;move to departure waypoint of placing
LIN drop_app_2 Vel=1 m/s CPDAT4 Tool[1] Base[0]
   ENDIF

Le code ci-dessus indique que si le groupe d’objets est parallèle au côté long du préhenseur à vide (c’est-à-dire si box_direction est réglé sur 0), le groupe d’objets sera déposé à drop_1 ; sinon, le groupe d’objets sera déposé à drop_2.

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.