Programme d’exemple 8 : MM_S8_Viz_Subtask

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

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 effectue la dépose afin d’obtenir la trajectoire planifiée suivante, ce qui réduit le temps de cycle.

Ce programme d’exemple est très similaire au programme d’exemple MM_S10_Viz_Subtask, à ceci près que le moment où le programme principal déclenche le sous-programme est différent. Il est recommandé de comparer les deux exemples pour mieux comprendre leurs nuances.

Chemin du fichier

Sous-programme : Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier en utilisant le chemin Communication Component/Robot_Interface/ABB/sample/sub_prog/MM_S8_Sub.

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 Communication Component/Robot_Interface/ABB/sample/MM_S8_Viz_Subtask.

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

Projet

Projets Mech-Vision et Mech-Viz

Prérequis

  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.

  • Le programme principal est un programme au premier plan. Le sous-programme est un programme en arrière-plan qui doit être exécuté automatiquement après le démarrage du système robotisé.

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. En conséquence, 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.
MODULE 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
!----------------------------------------------------------
!define variables
PERS num pose_num_a:=5;
PERS num vis_pose_num_a:=3;
PERS num toolid_a{5}:=[0,0,0,0,0];
PERS num label_a{5}:=[0,0,0,0,0];
PERS num status_a:=2100;
PERS bool flag_vis_a:=FALSE;
CONST jointtarget snap_jps_a:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
PERS jointtarget jps_a{5}:=
[
    [[0,0,0,0,90,0],[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]],
    [[0,0,0,0,90,0],[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]]
];

PROC main()
    flag_vis_a:=FALSE;
    !initialize communication parameters (initialization is required only once)
    MM_Init_Socket "127.0.0.1",50000,300;
    WHILE TRUE DO
        IF flag_vis_a=TRUE THEN
            MM_Open_Socket;
            !trigger Mech-Viz project
            MM_Start_Viz 2,snap_jps_a;
            !get planned path, 1st argument (1) means getting pose in JPs
            MM_Get_VizData 1, pose_num_a, vis_pose_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,jps_a{1},label_a{1},toolid_a{1};
                MM_Get_JPS 2,jps_a{2},label_a{2},toolid_a{2};
                MM_Get_JPS 3,jps_a{3},label_a{3},toolid_a{3};
            ENDIF
            MM_Close_Socket;
            flag_vis_a:=FALSE;
        ENDIF
    ENDWHILE
ENDPROC
ENDMODULE

Le code ci-dessus montre que le sous-programme définit flag_vis_a sur FALSE, initialise les paramètres de communication, puis écoute en continu la valeur de flag_vis_a via la boucle WHITE.

  • Lorsque flag_vis_a 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 flag_vis_a sur FALSE.

  • Lorsque flag_vis_a est défini sur FALSE, le sous-programme écoute en continu la valeur de flag_vis_a.

La partie suivante décrit le programme principal.

À l’instar du programme d’exemple MM_S2_Viz_Basic, le programme principal effectue des opérations de prise et de dépose 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.
MODULE 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
!----------------------------------------------------------
!define local num variables
PERS bool flag_vis_a:=FALSE;
PERS num status_a:=2100;
PERS num pose_num_a:=5;
PERS num toolid_a{5}:=[0,0,0,0,0];
PERS num label_a{5}:=[0,0,0,0,0];
PERS num vis_pose_num_a:=3;
LOCAL VAR num count:=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 PERS robtarget pick_wait_point:=[[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]];
PERS jointtarget jps_a{5}:=
[
    [[0,0,0,0,89,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,89,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[0,0,0,0,89,0],[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_8()
    !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;
    !trigger Mech-Viz project and get planned path
    trigger_vis_a;
LOOP:
    !move to wait position for picking
    MoveL pick_wait_point,v1000,fine,gripper1;
    !wait until subtask program finished
    WaitUntil(flag_vis_a=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
       Stop;
    ENDIF
    !follow the planned path to pick
    !move to approach waypoint of picking
    MoveAbsJ jps_a{1},v1000,fine,gripper1;
    !move to picking waypoint
    MoveAbsJ jps_a{2},v300,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_1, 1;"
    Stop;
    !move to departure waypoint of picking
    MoveAbsJ jps_a{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;
    !trigger Mech-Viz project and get planned path in advance
    trigger_vis_a;
    !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;
ENDPROC
PROC trigger_vis_a()
    flag_vis_a:=TRUE;
ENDPROC
ENDMODULE

La séquence de travail correspondant au code du programme d’exemple ci-dessus est illustrée dans la figure ci-dessous.

sample8

Le tableau ci-dessous illustre le code central du programme principal.

Fonctionnalité Code et description

Déclencher l’exécution du projet Mech-Viz et obtenir la trajectoire planifiée

!trigger Mech-Viz project and get planned path
trigger_vis_a;

Dans l’exemple ci-dessus, le programme principal appelle la fonction trigger_vis_a(). Le code de cette fonction est présenté ci-dessous.

PROC trigger_vis_a()
    flag_vis_a:=TRUE;

Dans l’exemple ci-dessus, lorsque flag_vis_a est défini sur TRUE dans la fonction trigger_vis_a(), le sous-programme détecte la valeur TRUE, déclenche l’exécution du projet Mech-Viz, puis obtient la trajectoire planifiée.

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

LOOP:
    …​
    GOTO LOOP;

Le code ci-dessus indique que le programme principal parcourt en boucle le code entre LOOP et GOTO LOOP.

!move to wait position for picking
MoveL pick_wait_point,v1000,fine,gripper1;
!wait until subtask program finished
WaitUntil(flag_vis_a=FALSE);

Dans l’exemple ci-dessus, le robot se déplace vers un point de passage d’attente avant la prise et attend que le sous-programme obtienne et stocke la trajectoire planifiée (c’est-à-dire que flag_vis_a passe de TRUE à FALSE).

!follow the planned path to pick
!move to approach waypoint of picking
MoveAbsJ jps_a{1},v1000,fine,gripper1;
!move to picking waypoint
MoveAbsJ jps_a{2},v300,fine,gripper1;
!add object grasping logic here, such as "setdo DO_1, 1;"
Stop;
!move to departure waypoint of picking
MoveAbsJ jps_a{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;

Dans l’exemple ci-dessus, le robot suit la trajectoire planifiée jusqu’au point de passage d’approche de la prise (jps_a{1}), puis jusqu’au point de passage de prise (jps_a{2}), effectue la prise (par exemple, setdo DO_1, 1;), puis se déplace vers le point de passage de départ de la prise (jps_a{3}), le point de passage intermédiaire de la dépose (drop_waypoint), puis le point de passage d’approche de la dépose (RelTool(drop,0,0,-100)).

!trigger Mech-Viz project and get planned path in advance
trigger_vis_a;

Dans l’exemple ci-dessus, le programme principal appelle à nouveau la fonction trigger_vis_a() pour déclencher l’exécution du projet Mech-Viz et obtenir la trajectoire planifiée. Étant donné que le robot se trouve alors dans la zone de dépose, il peut planifier à l’avance la trajectoire de prise suivante sans attendre la fin de la dépose avant de planifier la trajectoire de prise suivante.

!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 passage de dépose (drop), effectue la dépose (par exemple, setdo DO_1, 0;), puis se déplace vers le point de passage de départ de la dépose (RelTool(drop,0,0,-100)) et enfin vers la position de référence (home).

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.