Programme d’exemple 9 : MM_S9_Viz_RunInAdvance

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

Le projet Mech-Viz est déclenché lorsque le robot effectue la prise. Ensuite, la caméra est démarrée par l’étape Branch by Msg du projet lorsque le robot effectue la dépose, afin de planifier la trajectoire suivante et ainsi réduire le temps de cycle.

File path

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/ABB/sample/MM_S9_Viz_RunInAdvance.

Pour RobotWare6, l’extension de fichier est .mod. Pour RobotWare7, veuillez modifier l’extension de fichier de .mod en .modx.

Project

Projets Mech-Vision et Mech-Viz

Le projet Mech-Viz nécessite que l’étape Branchement par message soit configurée au préalable.

Prerequisites

  1. Vous avez configuré la communication via l’interface standard.

  2. L’étalonnage automatique est terminé.

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_S9_Viz_RunInAdvance.

La seule différence entre le programme d’exemple MM_S9_Viz_RunInAdvance et le programme d’exemple MM_S5_Viz_SetBranch est que MM_S9_Viz_RunInAdvance peut planifier la trajectoire suivante (le code de cette fonctionnalité est en gras). Ainsi, seule la fonctionnalité de planification de la trajectoire suivante est décrite dans la section suivante. Pour des informations sur les parties de MM_S9_Viz_RunInAdvance qui sont identiques à celles de MM_S5_Viz_SetBranch, voir Programme d’exemple 5 : MM_S5_Viz_SetBranch.
MODULE MM_S9_Viz_RunInAdvance
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project then set branch and get
! planned path, trigger Mech-Viz project and set branch in
! advance during pick&place process
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num toolid{5}:=[0,0,0,0,0];
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num label{5}:=[0,0,0,0,0];
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS jointtarget jps{5}:=
[
    [[11.1329,49.0771,-36.9666,0.5343,79.2476,-169.477],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[11.2355,52.1281,-23.3996,0.5938,62.6295,-169.548],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[11.1329,49.0771,-36.9666,0.5343,79.2476,-169.477],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[11.1329,49.0771,-36.9666,0.5343,79.2476,-169.477],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define local tooldata variables
LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];

PROC Sample_9()
    !set the acceleration parameters
    AccSet 50, 50;
    !set the velocity parameters
    VelSet 50, 1000;
    !move to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
    !initialize communication parameters (initialization is required only once)
    MM_Init_Socket "127.0.0.1",50000,300;
    !move to image-capturing position
    MoveL camera_capture,v1000,fine,gripper1;
    !open socket connection
    MM_Open_Socket;
    !trigger Mech-Viz project
    MM_Start_Viz 2,snap_jps;
    !set branch exit port
    MM_Set_Branch 1,1;
LOOP:
    !get planned path, 1st argument (1) means getting pose in JPs
    MM_Get_VizData 1, pose_num, vis_pose_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
        Stop;
    ENDIF
    !save waypoints of the planned path to local variables one by one
    MM_Get_Jps 1,jps{1},label{1},toolid{1};
    MM_Get_JPS 2,jps{2},label{2},toolid{2};
    MM_Get_JPS 3,jps{3},label{3},toolid{3};
    !follow the planned path to pick
    !move to approach waypoint of picking
    MoveAbsJ jps{1},v1000,fine,gripper1;
    !move to picking waypoint
    MoveAbsJ jps{2},v300,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_1, 1;"
    Stop;
    !trigger Mech-Viz project but not to trigger camera capturing
    MM_Start_Viz 2,snap_jps;
    !move to departure waypoint of picking
    MoveAbsJ jps{3},v1000,fine,gripper1;
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint,v1000,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !set branch exit port and trigger camera capturing when robot moves out of camera’s field of view
    MM_Set_Branch 1,1;
    !move to placing waypoint
    MoveL drop,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_1, 0;"
    Stop;
    !move to departure waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move back to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
    GOTO LOOP;
END_LOOP:
    !close socket connection
    MM_Close_Socket;
ENDPROC
ENDMODULE

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

sample9

La partie suivante décrit la fonctionnalité de planification de la trajectoire suivante.

Fonctionnalité Code et description

Planifier à l’avance la trajectoire suivante par bouclage (prise→déclenchement du prochain cycle de planification de trajectoire→dépose)

LOOP:
    …​
    GOTO LOOP;

Le code ci-dessus indique que le programme boucle sur le code entre LOOP et GOTO LOOP.

!get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData 1, pose_num, vis_pose_num, status;

Le code ci-dessus indique que le robot obtient la trajectoire planifiée depuis Mech-Viz en exécutant la commande MM_Get_VizData.

!save waypoints of the planned path to local variables one by one
MM_Get_JPS 1,jps{1},label{1},toolid{1};
MM_Get_JPS 2,jps{2},label{2},toolid{2};
MM_Get_JPS 3,jps{3},label{3},toolid{3};

Le code ci-dessus indique que le robot stocke la trajectoire planifiée dans la variable spécifiée en exécutant la commande MM_Get_Jps. Cet exemple suppose que jps{1}, jps{2} et jps{3} correspondent respectivement au point d’approche de la prise, au point de prise et au point de départ de la prise.

!follow the planned path to pick
!move to approach waypoint of picking
MoveAbsJ jps{1},v1000,fine,gripper1;
!move to picking waypoint
MoveAbsJ jps{2},v300,fine,gripper1;
!add object grasping logic here, such as "setdo DO_1, 1;"
Stop;

Le code ci-dessus indique que le robot se déplace vers le point d’approche de la prise puis vers le point de prise, puis la commande DO (par exemple setdo DO_1, 1;) est exécutée pour contrôler l’outil afin d’effectuer la prise.

!trigger Mech-Viz project but not to trigger camera capturing
MM_Start_Viz 2,snap_jps;
  • MM_Start_Viz: La commande pour déclencher l’exécution du projet Mech-Viz.

  • 2: Envoie les positions articulaires représentées par la variable snap_jps au projet Mech-Viz.

  • snap_jps: Positions articulaires personnalisées qui doivent être enseignées au préalable. Les positions articulaires seront envoyées au projet Mech-Viz comme point de départ du prochain cycle de planification. Ainsi, si le robot se trouve hors de la zone de capture d’image, le projet Mech-Viz peut être déclenché à l’avance pour planifier la trajectoire du cycle suivant.

Le code ci-dessus indique que le robot exécute la commande MM_Start_Viz pour relancer le projet Mech-Viz. Maintenant que le robot a obtenu la trajectoire de prise planifiée de ce cycle et s’est déplacé vers le point de prise, vous pouvez démarrer le projet Mech-Viz à l’avance pour planifier la trajectoire du cycle suivant, au lieu d’attendre la fin de la dépose pour ensuite démarrer le projet Mech-Viz.

Une fois le projet Mech-Viz exécuté, le projet attendra la commande MM_Set_Branch pour définir le port de sortie de l’étape Branchement par message. De plus, l’étape de reconnaissance visuelle (qui effectue la capture d’image) a été placée sur une branche de l’étape Branchement par message; la caméra n’effectue donc pas de capture d’image à ce moment-là.
!move to departure waypoint of picking
MoveAbsJ jps{3},v1000,fine,gripper1;
!move to intermediate waypoint of placing
MoveJ drop_waypoint,v1000,z50,gripper1;
!move to approach waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;

Le code ci-dessus indique que le robot se déplace vers le point de départ de la prise (jps{3}), le point intermédiaire (drop_waypoint), puis le point d’approche de la dépose (RelTool(drop,0,0,-100)).

!set branch exit port and trigger camera capturing when robot moves out of camera’s field of view
MM_Set_Branch 1,1;

Dans l’exemple ci-dessus, le robot définit le port de sortie de l’étape Branchement par message avec la commande MM_Set_Branch. Sur ce port de sortie, l’étape de reconnaissance visuelle sera exécutée. Ensuite, Mech-Viz planifiera à l’avance la trajectoire de prise suivante en fonction du résultat de vision.

!move to placing waypoint
MoveL drop,v300,fine,gripper1;
!add object releasing logic here, such as "setdo DO_1, 0;"
Stop;
!move to departure waypoint of placing
MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
!move back to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;

Dans l’exemple ci-dessus, le robot se déplace vers le point de dépose (drop), effectue la dépose (par exemple setdo DO_1, 0;), puis se déplace vers le point de départ de la dépose (RelTool(drop,0,0,-100)) 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.