Exemple de programme 15 : MM_S15_Viz_GetDoList

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 obtention du trajet de prélèvement et des signaux DO, le robot peut effectuer le prélèvement et la dépose en se déplaçant de manière répétée vers le point de prélèvement et en définissant les signaux DO dans une boucle. Ce programme d’exemple est utilisé dans des scénarios de dépalletisation, et l’outil utilisé par le robot est une pince à vide multi-sections.

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

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

Projet

projet Mech-Vision et projet Mech-Viz (l’outil est une pince à vide de dépalletisation)

Prérequis

  1. Vous avez configuré la communication de 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_S15_Viz_GetDoList.

Comparé au programme d’exemple MM_S2_Viz_Basic, 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_S15_Viz_GetDoList qui sont identiques à celles de MM_S2_Viz_Basic, voir Exemple de programme 2 : MM_S2_Viz_Basic.
MODULE MM_S15_Viz_GetDoList
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project, then get planned path
! and gripper control signal using command 210
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num movetype{5}:=[0,0,0,0,0];
LOCAL VAR num toolnum{5}:=[0,0,0,0,0];
LOCAL VAR num speed{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 VAR robtarget pickpoint:=[[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 VAR 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 VAR 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}:=
[
    [[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[1.2008,45.8522,-13.6729,0.1512,57.8163,176.689],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[36.2634,-36.6956,48.5019,-1.0197,78.1304,356.473],[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_15()
    !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;
    !get planned path
    MM_Get_PlanData 0, 3, 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
    !get gripper control signal list
    MM_Get_Dolist 0,0;
    !close socket connection
    MM_Close_Socket;
    !save waypoints of the planned path to local variables one by one
    FOR i FROM 1 TO pose_num DO
        count:=i;
        MM_Get_PlanJps count,3,JPS{count},movetype{count},toolnum{count},speed{count};
    ENDFOR
    !follow the planned path to pick
    FOR j FROM 1 TO pose_num DO
        count:=j;
        MoveAbsJ jps{count},v1000,fine,gripper1;
        !set gripper control signal when current waypoint is picking waypoint
        IF count=vis_pose_num THEN
            !add object grasping logic here
            Stop;
            !set gripper control signal
            !MM_Set_DoList 0, 1, go16_1;
            !MM_Set_DoList 0, 2, go16_2;
            !MM_Set_DoList 0, 3, go16_3;
            !MM_Set_DoList 0, 4, go16_4;
        ENDIF
    ENDFOR
    !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;
    !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;
ENDPROC
ENDMODULE

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

sample15

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

Fonctionnalité Code et description

Obtenir le trajet planifié

!get planned path
MM_Get_PlanData 0, 3, pose_num, vis_pose_num, status;
  • MM_Get_PlanData: La commande permettant d’obtenir le trajet planifié. Les points de passage Vision Move obtenus par cette commande contiennent, en plus des poses, des données Vision Move et des données personnalisées (le cas échéant), tandis que les points de passage Vision Move obtenus par la commande MM_Get_VizData ne contiennent ni données Vision Move ni données personnalisées.

  • 0 : Obtenir le trajet planifié depuis Mech-Viz.

  • 3 : Le format des données attendues en retour, à savoir : pose (en positions articulaires), type de mouvement, ID d’outil, vitesse, données Vision Move de Mech-Viz, élément 1 des données de sortie personnalisées,…​, élément N des données de sortie personnalisées.

  • pose_num : La variable qui stocke le nombre de points de passage renvoyés par le système de vision.

  • vis_pose_num : La variable qui stocke le numéro de séquence du point de passage Vision Move (point de prélèvement) dans le trajet.

  • status : La variable qui stocke le code d’état d’exécution de la commande.

Obtenir la liste des DO de la pince

!get gripper control signal list
MM_Get_Dolist 0,0;
  • MM_Get_Dolist: La commande permettant d’obtenir la liste des DO de la pince.

  • Premier 0 : Spécifie la source des signaux DO, c’est-à-dire obtenir les signaux DO de la pince multisections depuis Mech-Viz.

  • Second 0 : Obtenir tous les signaux DO planifiés.

Stocker le trajet planifié en boucle

FOR i FROM 1 TO pose_num DO
    count:=i;
    MM_Get_PlanJps count,3,JPS{count},movetype{count},toolnum{count},speed{count};
ENDFOR
  • Ligne 1 : FOR indique une boucle for. 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 pose_num, moment où la boucle se termine). pose_num est le troisième paramètre de la commande MM_Get_PlanData, qui représente le nombre de points de passage renvoyés par le système de vision.

  • Ligne 2 : Attribuer la valeur de i à count, où count représente l’ID du point de passage actuel dans le trajet planifié.

  • Ligne 3 : La commande MM_Get_PlanJps stocke les positions articulaires, le type de mouvement, l’ID d’outil et la vitesse d’un point de passage spécifique dans des variables spécifiques. Toute la commande stocke respectivement les positions articulaires, le type de mouvement, l’ID d’outil et la vitesse du point de passage dont l’ID est count dans les variables JPS{count}, movetype{count}, toolnum{count} et speed{count}.

Effectuer le prélèvement en boucle

FOR j FROM 1 TO pose_num DO
    count:=j;
    MoveAbsJ jps{count},v1000,fine,gripper1;
    !set gripper control signal when current waypoint is picking waypoint
    IF count=vis_pose_num THEN
        !add object grasping logic here
        Stop;
        !set gripper control signal
        !MM_Set_DoList 0, 1, go16_1;
        !MM_Set_DoList 0, 2, go16_2;
        !MM_Set_DoList 0, 3, go16_3;
        !MM_Set_DoList 0, 4, go16_4;
    ENDIF
ENDFOR
  • Ligne 1 : FOR indique une boucle for. j est utilisé pour contrôler le nombre d’itérations de la boucle (c’est-à-dire que j commence à 1 et s’incrémente de 1 après chaque itération jusqu’à dépasser la valeur de pose_num, moment où la boucle se termine). pose_num est le troisième paramètre de la commande MM_Get_PlanData, qui représente le nombre de points de passage renvoyés par le système de vision.

  • Ligne 2 : Attribuer la valeur de j à count, où count représente l’ID du point de passage actuel dans le trajet planifié.

  • Ligne 3 : Déplacer le robot vers le point de passage dont le numéro séquentiel dans le trajet planifié est count.

  • Lignes 5-13 : Si le point de passage count est un point de passage Vision Move (point de prélèvement), définir les signaux DO de la pince en exécutant la commande MM_Set_DoList pour terminer le prélèvement.

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.