Bonjour à tous
Dans la cadre d'un pojet de robotique, je cherche à faire suivre une trajectoire à l'effecteur final d'un robot manipulateur plan.
La modèlisation géométrique directe de ce robot me donne la position de l'effecteur finale du robot (X,Y) en fonction de 2 coordonnées articulaire (a,b):
X = a1*cos(a+b) + a2*cos(a)
Y = a1*sin(a+b) + a2*sin(a)
où a1, a2 sont les longueurs des bras articulés du robot
Je cherche le modèle géométrique inverse de ce robot.
c'est à dire à calculer la fonction F telle que:
(a,b) = F(X,Y)
Quelqu'un peut-il m'aider ?
Je suppose que tu essaies de trouver a = F1(X,Y,a1,a2) et b = F2(X,Y,a1,a2) ?
Si oui:
X = a1*cos(a+b) + a2*cos(a) (1)
Y = a1*sin(a+b) + a2*sin(a) (2)
(1)² + (2)² ->
X² + Y² = (a1)² + (a2)² + 2.a1.a2.[cos(a+b).cos(a) + sin(a+b).sin(a)]
Or cos(a+b).cos(a) + sin(a+b).sin(a) = [cos(a)-cos(b)-sin(a).sin(b)].cos(a) + [sin(a).cos(b)+cos(a).sin(b)].sin(a)
cos(a+b).cos(a) + sin(a+b).sin(a) = cos²(a).cos(b)-sin(a).cos(a).sin(b) + sin²(a).cos(b)+ sin(a).cos(a).sin(b)
cos(a+b).cos(a) + sin(a+b).sin(a) = cos²(a).cos(b) + sin²(a).cos(b)
cos(a+b).cos(a) + sin(a+b).sin(a) = [cos²(a)+sin²(a)].cos(b)
cos(a+b).cos(a) + sin(a+b).sin(a) = cos(b)
->
X² + Y² = (a1)² + (a2)² + 2.a1.a2.cos(b)
cos(b) = [X² + Y² - (a1)² - (a2)²]/(2.a1.a2)
-> b = ... (fonction de X , Y, a1 et a2)
-----
Je ne continue pas pour "a" car je ne suis pas sûr que c'est ce que tu veux (et aussi parce que je suis un peu flemmard )
Alors là .. tu m'as sidéré ..
c'est exactement ce que je cherchais ... sans oser le trouver ..MDR
ca fait trois jours que je suis sur le problème .. sans rien trouver .. et toi ... tu lui tords le cou en 10 minutes
Euh ..t'es sur de pas avoir 10 min de libre pour t'attaquer à "a" .. ou pour me donner une piste .. STP
Attention qu'il y a une faute de frappe dans ma réponse précédente (mais qui ne change pas le résultat)
Lire:
Or cos(a+b).cos(a) + sin(a+b).sin(a) = [cos(a).cos(b)-sin(a).sin(b)].cos(a) + [sin(a).cos(b)+cos(a).sin(b)].sin(a)
-----------
Pour a c'est un peu plus dur.
On peut par exemple repartir de:
X = a1*cos(a+b) + a2*cos(a)
X = a1*[cos(a).cos(b)-sin(a).sin(b)]. + a2*cos(a) (1)
cos(b) est connu
et sin²(b) + cos²(b) = 1
sin(b) = +/- V(1 - cos²(b))
A toi de voir le signe du sinus en fonction de b. (si b est dans [0 ; Pi], le sinus est > 0)
En remplaçant sin(b) et cos(b) dans (1) par ce qu'on vient de trouver ci dessus, il reste une équation sans b.
Il suffit (c'est vite dit) d'en tirer "a" (ou sin(a) ou cos(a) ou tg(a) ou ...).
Je n'ai pas fait les calculs.
Il y a peut-être plus simple.
-----
Hé J-P
J'ai essayé de poursuivre le calcul que tu m'as donné ..
Je considère que le cas de "b" est réglé ..
J'essaie de sortir "a" du merdier
X = a1*cos(a+b) + a2*cos(a)
Y = a1*sin(a+b) + a2*sin(a)
Je développe les cos(a+b) et sin(a+b):
X= a1*[cos(a)cos(b) - sin(a)sin(b)] + a2*cos(a)
Y= a1*[sin(a)cos(b) + cos(a)sin(b)] + a2*sin(a)
Je regroupe les inconnues:
X= cos(a).(a1.cos(b)+a2) - a1.sin(b).sin(a)
Y= sin(a).(a1.cos(b)+a2) + a1.sin(b).cos(a)
Je pose :
K1=a1.cos(b)+a2,
K2=a1.sin(b) et
M=cos(a)
Le système devient:
X= K1.M - K2.V(1-M) (1)
Y= K1.V(1-M) + K2.M (2)
(1)/K1-(2)/K2 <=> X/K1-Y/K2 = -(K2/K1+K1/K2)*V(1-M)
d'où:
V(1-M) = -[(X/K1-Y/K2)/(K2/K1+K1/K2)]
avec:
K1=a1.cos(b)+a2,
K2=a1.sin(b) et
M=cos(a)
y'a plus qu'à sortir M=cos(a) de la racine ..
J'ai bon ?
X = a1*cos(a+b) + a2*cos(a)
Y = a1*sin(a+b) + a2*sin(a)
Je développe les cos(a+b) et sin(a+b):
X= a1*[cos(a)cos(b) - sin(a)sin(b)] + a2*cos(a)
Y= a1*[sin(a)cos(b) + cos(a)sin(b)] + a2*sin(a)
Je regroupe les inconnues:
X= cos(a).(a1.cos(b)+a2) - a1.sin(b).sin(a)
Y= sin(a).(a1.cos(b)+a2) + a1.sin(b).cos(a)
Je pose :
K1=a1.cos(b)+a2,
K2=a1.sin(b) et
M=cos(a)
X= K1.M - K2.V(1-M2)
Y= K1.V(1-M2) + K2.M
X/K1-Y/K2 = -(K2/K1+K1/K2)*V(1-M2)
Il vient:
V(1-M2) = -[(X/K1-Y/K2)/(K2/K1+K1/K2)]
avec:
K1=a1.cos(b)+a2,
K2=a1.sin(b) et
M=cos(a)
y'a plus qu'à sortir M=cos(a) de la racine ..
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :