Post on 24-Sep-2020
1
GPA546 Robots industriels
Ahmed Joubair, ing., Ph.D. Chargé de cours, ÉTS
Ilian Bonev, ing., Ph.D. Professeur, ÉTS
4
Cours 2 : Révision
IRB 1600 - 5/1.45 type A IRC5 avec FlexPendant
5
Cours 2 : Révision
Mouvement des axes (tous les axes en position zéro)
(+180º, −180º)
(+120º, −90º)
(+65º, −245º) (+200º, −200º) ou 380 tours max !!!
(+115, −115º)
(+400º, −400º) ou 576 tours max !!!
Attention !
Dans cette configuration, le robot est
en singularité (axes 4 et 6 sont alignés)
6
Cours 2 : Révision DANGER !
7
Cours 2 : Révision
8
Cours 2 : Révision
9
Cours 2 : Révision
Modélisation d’une cellule
Modélisation d’outils
Programmation interactive
Éditeur RAPID
Programmation MultiMove
Simulation
Cours 3 : Langage RAPID
Structure d’un programme en RAPID
11
MODULE MainModule
PROC main()
Rotuine1;
Routine2;
ENDPROC
PROC Routine1()
MoveL;
ENDPROC
PROC Routine2()
MoveL;
ENDPROC
ENDMODULE
<?xml version="1.0" encoding="ISO-8859-1" ?>
<Program>
<Module>ModuleA.mod</Module>
<Module>MainModule.mod</Module>
</Program>
Pick_and_Place_Cell_A.pgf
MainModule.mod
MODULE ModuleA
PROC RoutineA1()
MoveL;
MoveL;
ENDPROC
ENDMODULE
ModuleA.mod
Exemple d’un programme en RAPID
12
MODULE Exemple
PERS robtarget A:=[[300,0,500],[0,1,0,0],[0,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PERS robtarget B:=[[0,300,500],[0,1,0,0],[0,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
CONST tooldata tPince_bout:= [TRUE,[[0,0,233.37],[0.707107,0,0,0.707107]],
[1.7,[12.2,0,158],[1,0,0,0],0.009,0.003,0.012]];
PROC main()
deplacer_piece;
ENDPROC
PROC fermer_pince()
Set DO01_EE_PINCE01;
ENDPROC
PROC deplacer_piece()
VAR num reponse;
MoveJ A,v100,z5,tPince_bout\WObj:=wobj0;
MoveL B,v800,fine,tPince_bout\WObj:=wobj0;
WaitDI DI14_ZS0104, 1;
fermer_pince;
TPWrite "Le bloc est dans la pince. Êtes-vous satisfait?";
TPReadFK reponse, "", stEmpty, stEmpty, stEmpty, "Oui", "Non";
ENDPROC
ENDMODULE
Règles de base
13
Chaque instruction se termine par un point-virgule (sauf FOR, IF, PROC, etc.).
Une ligne commençant par ! ne sera pas interprétée.
RAPID n’est pas sensible à la casse, mais il est recommandé d’écrire tous les mots réservés (VAR, PROC, etc.) en majuscules.
Le premier caractère d’un identificateur doit être une lettre. Les
autres caractères peuvent être des lettres, des chiffres ou “ _ ”. La
longueur maximale est 32 caractères.
RAPID est un langage à structure non imposée, ce qui signifie que l’on
peut utiliser des espaces n’importe où sauf dans les identificateurs,
les mots réservés, les valeurs numériques.
Sortes de données
14
Trois sortes : constantes, variables et persistantes.
− Une constante représente une valeur statique et peut seulement
recevoir une nouvelle valeur manuellement.
− Une variable peut également recevoir une valeur en cours
d’exécution du programme.
− Une persistante peut être décrite comme étant une variable
“persistante”. Lorsqu’un programme est sauvegardé, la valeur
d’initialisation est mise à jour par la valeur actuelle de la
persistante.
Exemples :
CONST num Decalage := 200;
CONST string auteur := "Jean Tremblay";
CONST speeddata LowSpeed := [250,500,5000,1000];
VAR bool PresenceTrou;
VAR num N;
VAR num maxno{10} := [1,2,3,4,5,6,7,8,9,10];
PERS robtarget table := [[300,0,500],[0,1,0,0],
[0,-1,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
Types de données
15
Trois types : atomic, record et alias.
− Un type de données est atomic (atomique) dans le sens où il n’est
pas défini en se basant sur un autre type et qu’il ne peut pas être divisé en parties ou composantes (bool, num et string).
− Un type de données record (d’enregistrement), est un type avec
des composantes ayant un nom et un ordre, par exemple pos. Une
composante pourra être soit du type atomic soit du type record.
VAR pos pos1 := [200, 300, 150];
VAR orient orient1 := [1, 0, 0, 0];
VAR pose frame1;
frame1:= [pos1,orient1];
pos1.x := pos1.x + 20;
frame1.trans.y := 300;
− Un type de données pseudonymes est, par définition, équivalent à
un autre type. Les types pseudonymes permettent de classer les objets de données. Par exemple, dionum (digital output num,
retournée par la fonction Doutput )est équivalent à num.
Routines
16
Trois types : procédures, fonctions et interruptions.
− Les procédures ne fournissent pas de valeur et sont utilisées dans
le contexte des instructions.
− Les fonctions fournissent une valeur d’un type spécifique et sont
utilisées dans le contexte des expressions.
− Les routines d’interruption fournissent un moyen de gérer les
interruptions.
Locales (LOCAL PROC routine1()) et globales (PROC routine2()).
Quatre types de paramètres :
PROC routine1(num in_par, INOUT num inout_par, VAR num var_par,
PERS num pers_par)
Exemple de fonction :
FUNC num veclen(pos vector)
RETURN SQRT(POW(vector.x,2)+POW(vector.y,2)+POW(vector.z,2));
ENDFUNC
Routines
17
Types de données : Records
18
robtarget : Définit la pose d’un référentiel d’outil du robot
par rapport à un autre référentiel, la configurations des axes du robot,
et les axes externes. Les composantes :
− trans de type pos;
− rot de type orient;
− robconf de type confdata;
− extax de type extjoint (toujours [9E9,9E9,9E9,9E9,9E9,9E9] pour nos robots).
PERS robtarget Retrait:=[[-306.31,517.44,768.63],
[0.263201,-0.442148,-0.833986,-0.199236],
[1,1,-3,0], [9E9,9E9,9E9,9E9,9E9,9E9]];
Types de données : Records
19
orient : utilisé pour les orientations.
L’orientation est décrite sous la forme d’un
quaternion composé de quatre éléments :
q1, q2, q3 et q4, de type num.
− L’orientation doit être normalisée,
c’est-à-dire que la somme des carrés
doit être égale à 1.
− Absolument non intuitives et difficiles à utiliser!!!
− Ne jamais entrer une orientation en quaternions directement!
− Heureusement, il y a les fonctions suivantes :
object.rot := OrientZYX(roll1, pitch1, yaw1);
yaw2 := EulerZYX(\X, object.rot);
pitch2 := EulerZYX(\Y, object.rot);
roll2 := EulerZYX(\Z, object.rot);
!Note : il y a 50% de probabilité que yaw2 yaw1, etc.
yaw pitch
roll
x2
y2 z2
180o
x2
y2
z2
180o
x2
y2
z2
180o
x1
y1
z1
-90o
x1 y1
z1
-90o x y
z x2 y2
z2
180o
x2 y2
z2
180o
x2
y2
z2
180o
x3
y3 z3
90o x y
z
Angles d’Euler
20
Applet JavaScript xR
yR
zR
Yaw Pitch
Roll
Convention d’angles d’Euler utilisée par ABB
interprétation 1 : ZR (r) Y’(p) X’’(w)
interprétation 2 : XR (w) YR (p) ZR (r)
L’ordre des rotations est important!!!
xR yR
zR
x
y
z
90o x
y z
90o
Exemple :
w = 90o
p = −90o
r = 180o
x1
y1
z1
-90o
Attention !
Il y a 2 ou inf. solutions [−180o,180o]
solution 1 : w, p, r
solution 2 : w ± 180o, ±180o − p, r ± 180o
Types de données : Records
21
confdata : Configuration d’axes du robot (cf1, cf4, cf6 et cfx). Défini sous
la forme de la révolution de quart de cercle des axes 1, 4 et 6. La
première révolution de quart de cercle positive allant de 0 à 90 est fixée
à 0, ensuite 1, 2, 3, etc., ou −1, −2, etc.
− Très difficile à utiliser!!!
− On peut ignorer la configuration avec
ConfL \Off ou ConfJ \Off.
Types de données : Records
23
speeddata : permet de spécifier la vitesse à laquelle le robot et les
axes externes se déplacent. Les composantes :
− v_tcp : vitesse du point central de l’outil (TCP) en mm/s;
− v_ori : vitesse angulaire du TCP, exprimée en degrés/s;
− v_leax : vitesse des axes externes linéaires en mm/s;
− v_reax : vitesse des axes externes rotatifs en mm/s;
plusieurs vitesses prédéfinies : v5, v10, …, v6000, v5000, vmax.
VelSet : permet de changer la vitesse programmée
AccSet : permet de changer l’accélération.
Types de données : Records
24
zonedata (interpolation): permet de spécifier la façon dont une
position doit être terminée, c'est-à-dire à quelle distance de la
position programmée les axes doivent se trouver avant de se déplacer
vers la position suivante.
plusieurs points de passages prédéfinies : z0, z1, …, z200.
point d’arrêt : fine.
75mm 50mm
fine
fine
fine
z50
Zone
d’interpolation
Instructions de mouvement
26
MoveL : permet de déplacer l’outil du robot, d’une pose à une autre, en
gardant le TCP le long d’une trajectoire linéaire (sauf raccordements).
aucune option pour contrôler le changement d’orientation de l’outil.
très sensibles aux singularités.
exemples :
MoveL rtStart, v2000, z40, tPince_bout\WObj:=fixture;
Instructions de mouvement
28
MoveJ : permet de déplacer le robot rapidement d’un point à un autre
lorsqu’il n’est pas nécessaire que ce déplacement se fasse en ligne
droite. Le robot et les axes externes se déplacent vers la destination le
long d’une trajectoire non linéaire.
Chaque axe est déplacé selon une vitesse d’axe constante et tous les
axes atteignent la destination en même temps, ce qui résulte en une
trajectoire Cartésienne non linéaire.
ConfJ \Off : le robot ne change pas la configuration des axes 1 à 3,
mais il recherche la solution pour les axes 4 à 6 la plus proche de celle
du départ.
Instructions de mouvement
29
MoveC : permet de déplacer l’outil du robot, d’une pose à une autre,
en gardant le TCP le long d’une trajectoire circulaire.
CirPathMode : permet de sélectionner différents modes de
réorientation de l’outil au cours des mouvements circulaires.
exemple :
MoveC p_int, p_final, v500, z30, tPince_bout;
Instructions de mouvement
30
MoveAbsJ : permet de déplacer le robot vers une configuration donnée,
définie dans les positions d’axes. Utilisé lorsque cette configuration est
singulière.
MoveJDO (ou MoveLDO) : MoveJ (ou MoveLDO) + le signal de sortie
logique spécifié est mis à 1/remis à 0 au milieu du raccordement.
CalcRobT : permet de calculer des données robtarget à partir de
données jointtarget.
CalcJointT : permet de calculer les angles des axes du robot et des axes
externes à partir de données robtarget spécifiées.
Offs : permet de décaler la position d’un robot dans le repère objet. (MoveL Offs(p2, 0, 0, 10), v1000, z50, tool1\WObj:=fixture;).
RelTool : permet d’ajouter un déplacement et/ou une rotation, exprimé
dans le système de coordonnées de l’outil. (MoveL RelTool(CRobT,0,0,10 \Rz:=25), v1000, z50, tool1;).
Systèmes de coordonnées
(Référentiels)
31
XF
ZF
YF
Référentiel Poignet (tool0)
YT
XT
ZT
Référentiel Outil
Z0
Y0
X0
Référentiel Base
ZR
YR
XR
Référentiel Atelier
tooldata : permet de définir le
référentiel de l’outil.
Systèmes de coordonnées : wobj
32
ZR
YR
XR
Référentiel ATELIER
wobj0
X
Y Z
uframe X
Z
Y
oframe
X
Z
Y
uframe
oframe =
wobjdata : permet de décrire l’objet de travail que le robot soude,
exécute, dans lequel il se déplace, etc.
Exemples :
Feuille := DefFrame(P_1,P_2,P_3);!retourne une pose `a partir de l’origine 3 robtargets
WobjFeuille.uframe := Feuille;
WobjFeuille.oframe.trans := [100,130,0];
WobjFeuille.oframe.rot := OrientZYX(90,0,0);
Systèmes de coordonnées : wobj
33
ZR
YR
XR
Référentiel ATELIER
wobj0
X
Y Z uframe X
Z Y
oframe
Systèmes de coordonnées : wobj
34
X1
X2
Y1 X2
X1
« Enregistre » pour
mémoriser les points
de mesure (pour
contrôles ultérieurs)
Y1
Instructions I/O
35
SetDO : permet de changer la valeur d’un signal de sortie digitale, avec
ou sans retard de synchronisation. SetDO DO01_EE_PINCE01, 1; SetDO DO011_EE_PINCE01, 0;
Set (ou Reset) : mettre (remettre) un signal de sortie à 1 (0).
Pour lire la valeur d’un signal d’entrée :
IF DI09_ZS0101 = 1 THEN ...
WaitDI DI09_ZS0101, 1;
WaitDI diPresenceBloc,1 \MaxTime:=2000;
WHILE not TestDI(DI09_ZS0101) DO ...
WaitTime : attendre un laps de temps donné en secondes.
Synchronisation I/O
36
P40
P30 P20
p10
Synchronisation I/O
37
MoveL p10, v300, z10, tspray;
! Start spraying
SetDO do1, 1;
MoveL p20, v300, z10, tspray;
! Stop spraying
SetDO do1, 0;
MoveL p30, v300, fine, tspray;
Contrôle du programme
38
FOR : répétition un nombre donné de fois.
FOR i FROM 1 TO 10 DO
routine1;
ENDFOR
pas besoin de déclarer la variable du compteur ;
cette variable est accessible uniquement à l’intérieur du boucle (par exemple, on ne peut pas utiliser i dans la routine routine1).
Communication à l’aide de TP
39
TPErase : permet d’effacer l’écran du FlexPendant.
TPWrite : permet d’écrire du texte sur le FlexPendant.
(TPWrite "Max. TCP speed in mm/s for my robot ="
\Num:=MaxRobSpeed();)
TPReadFK : permet d’écrire du texte sur les touches de fonction et
détecter la touche appuyée.
(TPReadFK reponse, "Encore?", stEmpty, stEmpty, stEmpty,
"Oui", "Non"; où reponse est de num)
TPReadNum : permet lire un nombre à partir du FlexPendant.
(TPReadNum reponse, "Nombre de blocs?";)