Académique Documents
Professionnel Documents
Culture Documents
3 Cours Modèle Inverse Partie2
3 Cours Modèle Inverse Partie2
Modèle inverse
Exemple 1 : Structure RRRRRR F7
o7
F6 a 6
o6
F5 a5
o5
F4 a 4
F3 a 3 o 4
o3
a2
F2
o2
z1
a1
o1 x1
Vitesse de rotation de la fin d’effecteur par rapport au repère de la base
V⃗(O ∈F /F ) = θ̇ Z⃗ ∧ O O⃗
V⃗(O ∈F /F ) = θ̇ Z⃗ ∧ O O⃗
V⃗(O ∈F /F ) = θ̇ Z⃗ ∧ O O⃗
V⃗(O ∈F /F ) = θ̇ Z⃗ ∧ O O⃗
Expression matricielle de la vitesse de rotation et la vitesse de déplacement de la fin d’effecteur en fonction des
variations des coordonnées articulaires
θ̇
⎡ ⎤
⎢ θ̇ ⎥
⃗
Ω(F /F ) Z⃗ Z⃗ Z⃗ Z⃗ Z⃗ Z⃗ ⎢θ̇ ⎥
= ⎢ ⎥
V⃗(O ∈ F /F ) Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ θ̇
⎢ ⎥
̇
⎢θ ⎥
⎣θ̇ ⎦
θ̇
⎡ ⎤
⎢ θ̇ ⎥
Ω⃗(F /F ) Z⃗ Z⃗ Z⃗ Z⃗ Z⃗ ⃗
Z ⎢θ̇ ⎥
= ⎢ ⎥
V⃗(O ∈ F /F ) Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ θ̇
⎢ ⎥
̇
⎢θ ⎥
⎣θ̇ ⎦
Par rapport à une petite variation de temps ∆t
∆θ
⎡∆θ ⎤
⎢ ⎥
∆Q Z⃗ Z⃗ Z⃗ Z⃗ Z⃗ Z⃗ ⎢∆θ ⎥
=
∆P Z⃗ ∧ O O ⃗ Z⃗ ∧ O O⃗ Z⃗ ∧ O O⃗ Z⃗ ∧ O O⃗ Z⃗ ∧ O O⃗ Z⃗ ∧ O O ⃗ ⎢∆θ ⎥
⎢∆θ ⎥
⎣∆θ ⎦
∆θ
⎡∆θ ⎤
⎢ ⎥
∆Q ⎢∆θ ⎥
= 𝐉
∆P ⎢∆θ𝟒 ⎥
⎢∆θ ⎥
⎣∆θ ⎦
J est la matrice jacobéenne. Les composantes de cette matrice sont exprimées dans le repère lié à la base
Rotation désirée
R
P
∆R
P
Rotation actuelle
R
Base
Robotique Industrielle : 4 ième Année Page 2
Université Moulay Ismail ENSAM de Meknes
function mat=vect(A)
mat=.5*[A(3,2)-A(2,3)
A(1,3)-A(3,1)
A(2,1)-A(1,2)];
End
Cette fonction donne les trois petits angles de rotation ∆θ , ∆θ et ∆θ autour des trois axes fixes x , y et z du repère
fixe.
R=Rz(a)*Ry(b)*Rx(g)
R=simple(R)
V=vect(R)
V=simple(V)
Après calcul :
R=
Vect (R) =
sin(a) a et cos(a) 1
sin(b) b et cos(b) 1
sin(g) g et cos(g) 1
V⃗(O ∈ F /F ) = θ̇ Z⃗ ∧ O O ⃗
V⃗(O ∈ F /F ) = θ̇ Z⃗ ∧ O O ⃗
V⃗(O ∈ F /F ) = θ̇ Z⃗ ∧ O O ⃗
V⃗(O ∈ F /F ) = θ̇ Z⃗ ∧ O O ⃗
V⃗(O ∈ F /F ) = θ̇ Z⃗ ∧ O O ⃗
θ̇
⎡ ⎤
⎢ θ̇ ⎥
⃗
Ω(F /F ) Z⃗ Z⃗ Z⃗ 𝟎⃗ Z⃗ Z⃗ ⎢ θ̇ ⎥
= ⎢ ⎥
⃗
V(O ∈ F /F ) ⃗ ⃗ ⃗ ⃗ ⃗
Z ∧ O O Z ∧ O O Z ∧ O O 𝐙𝟒 ⃗ ⃗ Z ∧ O O Z ∧ O O 𝐝̇𝟒
⃗ ⃗ ⃗ ⃗
⎢ ⎥
̇
⎢θ ⎥
⎣ θ̇ ⎦
∆θ
⎡ ∆θ ⎤
⎢ ⎥
∆Q Z⃗ Z⃗ Z⃗ 𝟎⃗ Z⃗ Z⃗ ⎢ ∆θ ⎥
=
∆P Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ 𝐙⃗ Z⃗ ∧ O O ⃗ Z⃗ ∧ O O ⃗ ⎢∆𝐝𝟒 ⎥
⎢ ∆θ ⎥
⎣ ∆θ ⎦
∆θ
⎡ ∆θ ⎤
⎢ ⎥
∆Q ⎢ ∆θ ⎥
= 𝐉
∆P ⎢∆𝐝𝟒 ⎥
⎢ ∆θ ⎥
⎣ ∆θ ⎦
Expression des composantes de la matrice jacobienne J dans le repère {F1} lié à la base (Bâti)
𝑅 = 𝑅
𝑅 =R ∗ 𝑅 = 𝑅∗ 𝑅
𝑅 =R ∗ 𝑅 = 𝑅∗ 𝑅∗ 𝑅
𝑅 =R ∗ 𝑅 = 𝑅∗ 𝑅∗ 𝑅∗ 𝑅
𝑅 =R ∗ 𝑅 = 𝑅∗ 𝑅∗ 𝑅∗ 𝑅∗ 𝑅
On definit le vecteur k⃗ = [0 , 0 , 1]
Z⃗ = k⃗
Z⃗ = 𝑅12 ∗ k⃗
Z⃗ = 𝑅13 ∗ k⃗
Z⃗ = 𝑅14 ∗ k⃗
Z⃗ = 𝑅15 ∗ k⃗
Z⃗ = 𝑅16 ∗ k⃗
1. Données :
𝛉: configuration initiale des coordonnées articulaire
du robot
𝐓 : matrice de transformation homogène (position
et orientation désirées)
𝐷 : durée de la tache (temps de passage du point
initial au point desiré)
∆𝑡 : pas de la discrétisation du temps
2. Calculer la position et l’orientation initiale en
utilisant le modèle géométrique direct tel que :
𝑻 = MGD(𝛉)
3. Calculer le nombre de configurations :
𝐷
𝑁= +1
∆𝑡
4. Discrétisation de la trajectoire en (𝑁 − 1)
éléments et calcul des coordonnées cartésienne
et orientations de la fin de l’effecteur aux 𝑁
nœuds:
5. Appel a la fonction MATLAB reach.m, 𝑁 fois pour
calculer les 𝑁postures ( chaque posture
correspond a une configuration des coordonnées
articulaire du robot).
1. Données
𝐩 𝐑 : position et orientation désirées
𝛉: coordonnées articulaire initiales
n: nombre maximum d’itérations
e : erreur initiale (choisie grande pour
amorcer le calcul)
e0 : critère de convergence requise
𝑎 : amortissement du pas
2. Calculer la position 𝐩 et l’orientation 𝐑 de la fin de
l’effecteur à l’état initiale par le MGD
3. Calculer 𝐝𝐩 = 𝑎 (𝑝 − 𝐩) et
𝐝𝐪
𝐝𝐪 = 𝑣𝑒𝑐𝑡(𝐑 𝐑 ) Poser 𝐝𝐏 ≡
𝐝𝐩
4. Calculer la matrice Jacobienne 𝐉(𝛉)
5. Calculer 𝐝𝛉 = 𝐉 𝐝𝐏
6. Calculer la nouvelle configuration 𝛉 = 𝛉 + 𝐝𝛉
7. Calculer la nouvelle position 𝐩 et l’orientation 𝐑 de
la fin de l’effecteur pour la nouvelle 𝛉 en utilisant
le MGD
8. Calculer la nouvelle erreur 𝐝𝐩 = 𝐩 − 𝐩 et
𝐝𝐪 = 𝑣𝑒𝑐𝑡 𝐑 ∗ 𝐑 𝒇
𝐝𝐪
9. Calculer l’erreur e=norm( ) et décrémente n
𝐝𝐩
10. Si n > 0 et e > e0 recommencer le calcul a
partir de l’étape 3.
Sinon fin de calcul et retour des nouvelles valeurs
de 𝛉
figure(1)
plot(t,s,'s')
xlabel('temps(s)');
ylabel('Discrétisation de l espace ');
grid on
%--------------------------------------------
% Coordonnées des points sur le segment [P1,P2]
%--------------------------------------------
figure(2)
plot3(P(1,:,:),P(2,:,:),P(3,:,:),'*')
xlabel('x');
ylabel('y ');
zlabel('z ');
grid on
%----------------------------------------------------------
% Vitesse de la fin d'effecteur aus points du segment [P1,P2]
%----------------------------------------------------------
v(1)=0;
for i=2:length(s)-1
v(i)=norm(P(:,i+1)-P(:,i))/pas;
i=i+1;
end
v(length(v)+1)=0;
figure(3)
plot(t,v,'x')
xlabel('temps(s)');
ylabel('vitesse (mm/s) ');
grid on
%---------------------------------------------------------------
% acceleration de la fin d'effecteur aux points du segment [P1,P2]
%---------------------------------------------------------------
a(1)= 0;
for i=2:length(s)-1
a(i)=(v(i+1)-v(i))/pas;
i=i+1;3
end
a(length(a)+1)=0;
figure(4)
plot(t,a,'o')
xlabel('temps(s)');
ylabel('accéleration (mm/s^2) ');
grid on
T3=TranElem(table,3);
T4=TranElem(table,4);
T5=TranElem(table,5);
T6=TranElem(table,6);
R1=T1(1:3,1:3);
R2=T2(1:3,1:3);
R3=T3(1:3,1:3);
R4=T4(1:3,1:3);
R5=T5(1:3,1:3);
R6=T6(1:3,1:3);
R11=R1;
R12=R11*R2;
R13=R12*R3;
R14=R13*R4;
R15=R14*R5;
R16=R15*R6;
k=[0 0 1]';
%------------------------------------------
e1=k;
e2=R11*k;
e3=R12*k;
e4=R13*k;
e5=R14*k;
e6=R15*k;
%-----------------------------------------
P6=T6(1:3,4);
P5=T5(1:3,4);
P4=T4(1:3,4);
P3=T3(1:3,4);
P2=T2(1:3,4);
P1=T1(1:3,4);
%--------------------------------------
r6p=P6;
r5p=P5+R5*r6p;
r4p=P4+R4*r5p;
r3p=P3+R3*r4p;
r2p=P2+R2*r3p;
r1p=P1+R1*r2p;
%-----------------------------------------
r6=R15*r6p;
r5=R14*r5p;
r4=R13*r4p;
r3=R12*r3p;
r2=R11*r2p;
r1=r1p;
%-------------------------------------------
Ja(:,1)=[e1;cross(e1,r1)];
Ja(:,2)=[e2;cross(e2,r2)];
Ja(:,3)=[e3;cross(e3,r3)];
Ja(:,4)=[e4;cross(e4,r4)];
Ja(:,5)=[e5;cross(e5,r5)];
Ja(:,6)=[e6;cross(e6,r6)];
%-------------------------------------------
Fonction Reach
function t=reach(pf,qf,t)
while(n>0 & e>0.0001) % Tant que l'erreur est plus de 0.1mm (et n>0)
dp=a*(pf-p); % Déplacement Cartésien requis
dq= vect(q' * qf); % rotation requise
dT=[dq;dp]; % torseur de vitesse rotation et vitesse de deplacement (dT = J . dt)
J=Jacobienne(t); % Évaluation de la Jacobienne
dt=pinv(J)*dT; % Calcul du déplacement theta approx.
DeltaPos=pf-p;
DeltaRot=vect(qf *q');
Critere=[DeltaPos;DeltaRot]; % Matrice colonne 6x1
function trj=trajectoire2points(teta,posef)
MGD = ModelGD(teta);
teta = reach(P(:,i),Qd,teta);
trj(:,i)=teta;
%pxy(:,i)=position_outil(theta);
end
% trj
% etat=enregistre_trj(trj,pas,'robot2.trj') % Creer le fichier trj