Programme d’exemple 7 : MM_S7_Viz_SwitchTCP

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 robot démarre le projet Mech-Viz, obtient le résultat de planification de trajectoire, puis change l’outil en fonction de l’ID d’outil du point de passage de prise afin d’effectuer la prise et la dépose.

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

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 à titre de référence uniquement. Avant d’utiliser le programme, veuillez modifier le programme en fonction du scénario réel.

Description du programme

Cette partie décrit le programme d’exemple MM_S7_Viz_SwitchTCP.

La seule différence entre le programme d’exemple MM_S7_Viz_SwitchTCP et le programme d’exemple MM_S2_Viz_Basic est que MM_S7_Viz_SwitchTCP peut changer l’outil en fonction de l’ID d’outil(ce code de cette fonctionnalité est en gras). Par conséquent, seule la fonctionnalité de changement d’outil selon l’ID d’outil est décrite dans la section suivante. Pour les parties de MM_S7_Viz_SwitchTCP identiques à celles de MM_S2_Viz_Basic, voir Programme d’exemple 2 : MM_S2_Viz_Basic.
MODULE MM_S7_Viz_SwitchTCP
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project and get planned path,
! switch TCP according to the label
! 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 robtarget pos{5}:=
[
    [[502.502,99.5586,399.968],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[500,100,300],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[502.502,99.5586,399.968],[0.00226227,-0.99991,-0.00439596,0.0124994],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define LOCAL tooldata variables
LOCAL PERS tooldata cur_gripper:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];
LOCAL PERS tooldata gripper{5}:=,[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]],
[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]]];

PROC Sample_7()
    !set the acceleration parameters
    AccSet 50, 50;
    !set the velocity parameters
    VelSet 50, 1000;
    !move to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,cur_gripper;
    !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,cur_gripper;
    !open socket connection
    MM_Open_Socket;
    !trigger Mech-Viz project
    MM_Start_Viz 2,snap_jps;
    !get planned path, 1st argument (2) means getting pose in TCP
    MM_Get_VizData 2, 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
    !close socket connection
    MM_Close_Socket;
    !save waypoints of the planned path to local variables one by one
    MM_Get_Pose 1,pos{1},label{1},toolid{1};
    MM_Get_Pose 2,pos{2},label{2},toolid{2};
    MM_Get_Pose 3,pos{3},label{3},toolid{3};
    !reset tool signals according to received toolId
    IF toolid{vis_pose_num}=1 Then
        cur_gripper:=gripper{toolid{vis_pose_num}};
        !reset tool signal;
    ELSEIF toolid{vis_pose_num}=2 Then
        cur_gripper:=gripper{toolid{vis_pose_num}};
        !reset tool signal;
    ELSE
        Stop;
        !reset tool signal;
    ENDIF
    !follow the planned path to pick
    !move to approach waypoint of picking
    MoveL pos{1},v1000,fine,cur_gripper;
    !move to picking waypoint
    MoveL pos{2},v300,fine,cur_gripper;
    !add object grasping logic here
    IF toolid{vis_pose_num}=1 Then
        Stop;
        !open tool signal;
    ELSEIF toolid{vis_pose_num}=2 Then
        Stop;
        !open tool signal;
    ELSE
        Stop;
        !open tool signal;
    ENDIF
    !move to departure waypoint of picking
    MoveL pos{3},v1000,fine,cur_gripper;
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint,v1000,z50,cur_gripper;
    !move to approach waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,cur_gripper;
    !move to placing waypoint
    MoveL drop,v300,fine,cur_gripper;
    !add object releasing logic here
    IF toolid{vis_pose_num}=1 Then
        Stop;
        !reset tool signal;
    ELSEIF toolid{vis_pose_num}=2 Then
        Stop;
        !reset tool signal;
    ELSE
        Stop;
        !reset tool signal;
    ENDIF
    !move to departure waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,cur_gripper;
    !move back to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,cur_gripper;
ENDPROC
ENDMODULE

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

sample7

Le tableau ci-dessous décrit le code en gras.

Fonctionnalité Code et description

Obtenir la trajectoire planifiée

!get planned path, 1st argument (2) means getting pose in TCP
MM_Get_VizData 2, pose_num, vis_pose_num, status;
  • MM_Get_VizData: La commande permettant d’obtenir la trajectoire planifiée par Mech-Viz.

  • 2: Le type de pose du point de passage obtenu est défini sur TCP.

  • 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 passage de prise) dans la trajectoire.

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

L’ensemble de l’instruction indique que le robot obtient la trajectoire planifiée depuis le projet Mech-Viz.

La trajectoire planifiée renvoyée est enregistrée dans la mémoire du robot et ne peut pas être obtenue directement. Pour y accéder, vous devez enregistrer la trajectoire planifiée lors d’une étape ultérieure.

Stocker la trajectoire planifiée

!save waypoints of the planned path to local variables one by one
MM_Get_Pose 1,pos{1},label{1},toolid{1};
MM_Get_Pose 2,pos{2},label{2},toolid{2};
MM_Get_Pose 3,pos{3},label{3},toolid{3};
  • MM_Get_Pose: La commande permettant de stocker la trajectoire planifiée.

  • 1: Stocke le premier point de passage.

  • pos{1}: La variable qui stocke le TCP du premier point de passage.

  • label{1}: La variable qui stocke l’étiquette du premier point de passage.

  • toolid{1}: La variable qui stocke l’ID d’outil correspondant au premier point de passage.

L’ensemble de la commande “MM_Get_Pose 1,pos{1},label{1},toolid{1}” enregistre le TCP, l’étiquette et l’ID d’outil du premier point de passage dans les variables spécifiées.

  • Veuillez stocker la trajectoire planifiée en fonction du projet Mech-Viz réel. Dans cet exemple, la trajectoire planifiée par Mech-Viz se compose de trois points de passage: le premier est le point de passage d’approche de la prise (pos{1}), le deuxième est le point de passage de prise (pos{2}) et le troisième est le point de passage de départ de la prise (pos{3}). De plus, vis_pose_num indique le numéro de séquence du point de passage de prise dans la trajectoire. Par conséquent, toolid{vis_pose_num} est équivalent à toolid{2}. L’un ou l’autre des deux paramètres peut spécifier l’ID d’outil utilisé par le robot lorsqu’il se déplace vers le point de passage de prise (pos{2}).

  • Cet exemple changera l’ID d’outil en fonction de la valeur de toolid{vis_pose_num}. Par conséquent, le projet Mech-Viz utilisé doit inclure une étape Change Tool et les paramètres de l’étape Change Tool doivent être correctement définis.

    • L’étape Change Tool doit être connectée au port de sortie Dispose de résultats de l’étape Check Vision Result.

    • Le paramètre Mode de fonctionnement de l’étape Change Tool doit être défini sur Bascule automatique vers l’outil approprié.

Changer l’outil en fonction de l’ID d’outil

!reset tool signals according to received toolId
IF toolid{vis_pose_num}=1 Then
    cur_gripper:=gripper{toolid{vis_pose_num}};
    !reset tool signal;
ELSEIF toolid{vis_pose_num}=2 Then
    cur_gripper:=gripper{toolid{vis_pose_num}};
    !reset tool signal;
ELSE
    Stop;
    !reset tool signal;
ENDIF

toolid{vis_pose_num} indique l’ID d’outil du point de passage de prise. Vous pouvez déterminer l’outil à utiliser lorsque le robot se déplace vers la pose cible (point de passage de prise) en fonction de la valeur de la variable toolid {vis_pose_num}, c’est-à-dire changer l’outil selon l’ID d’outil. La description du code ci-dessus est présentée ci-dessous.

  • Lorsque l’ID d’outil du point de passage de prise est 1, le robot utilisera l’outil gripper1 pour effectuer la prise.

  • Lorsque l’ID d’outil du point de passage de prise est 2, le robot utilisera l’outil gripper2 pour effectuer la prise.

  • Lorsque l’ID d’outil du point de passage de prise est défini sur une autre valeur, le robot s’arrêtera. Vous pouvez ajouter du code supplémentaire selon la situation réelle.

Lorsque le robot se déplace vers le point de passage de prise, vous pouvez activer les signaux DO correspondant à l’ID d’outil, comme illustré dans le code suivant.

!add object grasping logic here
IF toolid{vis_pose_num}=1 Then
    Stop;
    !open tool signal;
ELSEIF toolid{vis_pose_num}=2 Then
    Stop;
    !open tool signal;
ELSE
    Stop;
    !open tool signal;
ENDIF

Lorsque le robot se déplace vers le point de passage de dépose, vous pouvez désactiver et réinitialiser les signaux DO correspondant à l’ID d’outil, comme illustré dans le code suivant.

!add object releasing logic here
IF toolid{vis_pose_num}=1 Then
    Stop;
    !reset tool signal;
ELSEIF toolid{vis_pose_num}=2 Then
    Stop;
    !reset tool signal;
ELSE
    Stop;
    !reset tool signal;
ENDIF

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.