Composition de rotation

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

Composition de rotation

par virenque » 23 Juin 2013, 18:11

Bonjour à tous,

J'ai un problème de géométrie qui pourrait paraitre simple.
J'ai à disposition un banc de test qui permet des rotations sur deux axes. Ce banc de test me permet de corriger des erreurs de linéarités de capteur.
Je souhaite également utiliser ce banc de test pour corriger ce qu'on appelle le cross-coupling, c'est à dire l'impact d'un axe sur un autre.
Cependant, les deux axes ne sont pas libres entre eux.Mon problème serait évident sinon. :lol3:
En fait je peux faire uniquement des rotations de plan dans l'espace sur deux axes.
J'ai résumé mon problème ci-dessous:

Soit les 3 vecteurs x[1,0,0] ,y[0,1,0] et z[0,0,1] d'un repère orthonormé classique de centre O[0,0,0]
nommé O(x,y,z).
La rotation R d'angle ;) autour de l'axe z, transforme le repère O(x,y,z) en repère O'(x',y',z').
Avec la matrice de rotation R suivante:

R(;)) = [cos(;)), -sin(;)), 0
[INDENT]sin(;)), cos(;)) , 0[/INDENT]
[INDENT] 0 , 0 , 1][/INDENT]

Donc le plan xOy est transformé en plan x'Oy' et les vecteurs Ox[1,0,0], Oy[0,1,0] et Oz[0,0,1] sont transformés en:
Ox' = R;)Ox = [cos(;)) sin(;)) 0] dans le repère Oxyz
Oy'= R;)Oy = [-sin(;)) cos(;)) 0] dans le repère Oxyz
Oz'= Oz inchangé (c'est l'invariant de la rotation)


La rotation S d'angle ;) autour de l'axe y', transforme le repère O'(x',y',z') en repère O''(x'',y'',z'').

Avec la matrice de rotation S suivante:

S(;)) = [cos(;)) , 0, sin(;))
[INDENT] 0 , 1, 0[/INDENT]
[INDENT] -sin(;)), 0, cos(;))][/INDENT]

Donc le plan x'Oy' est transformé en plan x''Oy'' et les vecteurs Ox'[1,0,0], Oy[0,1,0] et Oz[0,0,1] sont transformés en:
Ox" = S;) Ox' = [cos(;)) 0 -sin(;))] dans le repère Ox'y'z'
Oy" = Oy' inchangé
Oz" = S;) Oz' = [sin(;)) 0 cos(;))] dans le repère Ox'y'z'

Les points O,O',O" sont identiques.
Problème: Quels sont les angles ;) et ;) qui permettent d'obtenir la rotation des vecteurs u[1,0,0] et v[0,1,0] du plan O(x,y,z) en vecteurs a[cos(15),0,c] et b[0,cos(10),d] toujours dans le plan O(x,y,z)? (c et d sont quelconques)
La réponse n'est pas ;) = 15 et ;) = 10 (degré).

Merci à tous d'avoir lu jusqu'ici !!!



Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 23 Juin 2013, 18:33

Bonjour,
J'ai déjà vu des réponses à ce problème difficile, mais je ne souviens plus où. Peut-être "angles d'Euiler" ?
Vous parlez d'"angles", vous avez donc un dispositif de mesure d'angle ?
Je vous avoue que je n'ai par très bien compris le détail de votre explication. Qui dit transformation, dit "avant et après" ou "objet et image".
Avant de vous dire des bêtises, il vaudrait mieux que vous précisiez ces deux points.

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 23 Juin 2013, 18:43

Oui le banc, possède des mesures d'angles.
Le banc de test est comme un plateau sur lequel on pose des produits à calibrer.
Le plateau peut tourner sur son axe central(axe perpendiculaire au plateau) et sur son axe horizontal (passant par le centre du plateau).
J'espère être plus clair maintenant.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 23 Juin 2013, 19:10

Si j'étais vous, j'utiliserais la formule de base de transformation en 3D
X = XX.x + XY.y + XZ.z
Y = YX.x + YY.y + YZ.z
Z = ZX.x + ZY.y + ZZ.z
les 6 paramètres sont des fonctions des deux angles, via leurs lignes trigonométriques (sin et cos).
Vous appliquez cette formule dans un sens, c'est à dire avec une rotation, puis le résultat avec l'autre rotation, enfin, vous identifiez les différentes expressions.
Si tout va bien, vous devriez obtenir un système pouvant être résolu.
Si vous n'y arrivez pas demain j'essaye de faire le calcul.

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 23 Juin 2013, 19:37

Dlzlogic, merci de nous gratifier encore une fois ton système horrible à 9 paramètres (et pas 6, me semble-t-il)...

virenque a écrit:Problème: Quels sont les angles ;) et ;) qui permettent d'obtenir la rotation des vecteurs u[1,0,0] et v[0,1,0] du plan O(x,y,z) en vecteurs a[cos(15),0,c] et b[0,cos(10),d] toujours dans le plan O(x,y,z)? (c et d sont quelconques)

Qu'entendez-vous par "c et d sont quelconques" ?

Par ailleurs, si j'ai bien compris votre problème, vous ne pourrez pas trouver une rotation envoyant simultanément u sur a et v sur b : en effet, si on suppose qu'une telle rotation existe, alors

- d'une part, u et v sont orthogonaux, et comme on les transporte sur a et b par une rotation, cela implique que a et b sont également orthogonaux, donc le produit c.d est forcément nul.

- d'autre part, u et v sont de norme 1, et comme on les transporte sur a et b par une rotation, cela implique que a et b sont également de norme 1, ce qui impose c et d non nuls.

Contradiction.

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 23 Juin 2013, 21:03

leon1789 a écrit:Dlzlogic, merci de nous gratifier encore une fois ton système horrible à 9 paramètres (et pas 6, me semble-t-il)...


Qu'entendez-vous par "c et d sont quelconques" ?

Par ailleurs, si j'ai bien compris votre problème, vous ne pourrez pas trouver une rotation envoyant simultanément u sur a et v sur b : en effet, si on suppose qu'une telle rotation existe, alors

- d'une part, u et v sont orthogonaux, et qu'on les transporte sur a et b par une rotation, cela implique que a et b sont également orthogonaux, donc le produit c.d est forcément nul.

- d'autre part, u et v sont de norme 1, et comme on les transporte sur a et b par une rotation, cela implique que a et b sont également de norme 1, ce qui impose c et d non nuls.

Contradiction.



Alors, je vais vous expliquez l'origine de mon problème.
Je souhaite pouvoir corriger les erreurs de cross-coupling d'une centrale inertielle possédant deux capteur d'inclinaison (communément appelé inclinomètre).
Cette centrale inertielle est calibrer sur ce banc possédant deux axes de rotation.
Imaginez que cette centrale inertielle est une cube de dimension 1, çà sera plus simple.
Ce cube est posé sur ce plateau possédant deux axes de rotation.
Les capteurs d'inclinaisons mesure les inclinaisons des axes x et y de la centrale inertielle.
Je sais parfaitement calibrer inclinomètre de l'axe X et celui de l'axe Y. Cependant, je souhaite également calibrer le mésalignement mécanique de la centrale (cross-coupling axe X/Y).
Pour cela, il m'est indispensable de pouvoir fixer des positions prédéfinies sur l'axe X et l'axe Y simultanément. Par exemple 15° sur l'axe X et 10° sur l'axe Y. L'axe Z n'a aucune influence sur ma calibration (d'où le "c" et "d" quelconque).
J'ai pris cet exemple de deux vecteurs orthogonaux u et v car ils caractérisent la face inférieure du cube.

Concernant les angles d'euler, si j'ai tout bien compris, cela concernant des compositions de rotations mais toujours dans le même repère.
Mon problème est de trouver la composition de deux rotations dans deux repères différents m'envoyant mon "cube" à une position donnée.

Ces explications d'un dimanche soir 22h ne sont peut-être pas forcément plus claires ...

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 24 Juin 2013, 11:15

Bonjour,
J'ai calculé la composition des 2 rotations.
XX = cos(;)) . cos(;))
XY = -sin(;)) . cos(;))
XZ = sin(;))
YX = sin(;))
YY = cos(;))
YZ = 0
ZX = -sin(;)) . cos(;))
ZY = sin(;)) . sin(;))
ZZ = cos(;))

Par contre, l'identification que je prévoyais ne marche pas, puisque la seule solution est 0.

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 24 Juin 2013, 16:44

Dlzlogic a écrit:Bonjour,
J'ai calculé la composition des 2 rotations.
XX = cos(;)) . cos(;))
XY = -sin(;)) . cos(;))
XZ = sin(;))
YX = sin(;))
YY = cos(;))
YZ = 0
ZX = -sin(;)) . cos(;))
ZY = sin(;)) . sin(;))
ZZ = cos(;))

Par contre, l'identification que je prévoyais ne marche pas, puisque la seule solution est 0.


Bonjour Mr Dlzlogic,
Si je comprends tout bien votre matrice, les valeurs
XX = cos(;)) . cos(;))
XY = -sin(;)) . cos(;))
XZ = sin(;))
YX = sin(;))
YY = cos(;))
YZ = 0
ZX = -sin(;)) . cos(;))
ZY = sin(;)) . sin(;))
ZZ = cos(;))

correspondent aux valeurs de la matrice de transformation 3D
X = XX.x + XY.y + XZ.z
Y = YX.x + YY.y + YZ.z
Z = ZX.x + ZY.y + ZZ.z
avec x,y,z les valeurs du point original et X,Y,Z les valeurs du points transformé par les rotations d'angle ;) puis ;).
Comme, je connais les points après transformation, cela ne devrait pas être trop compliqué de trouver ;) puis ;).
Du coup, je vais pouvoir tester çà sur mon banc de test sur de multiples positions.
Merci pour votre calcul.

Dlzlogic
Membre Transcendant
Messages: 5273
Enregistré le: 14 Avr 2009, 12:39

par Dlzlogic » 24 Juin 2013, 18:20

Oui, c'est tout à fait ça, mais n'oubliez pas que je ne suis pas à l'abri d'une faute de calcul.
Donc, si vous avez le moindre doute, n'hésitez pas à appeler au secours.

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 24 Juin 2013, 19:40

Je reviens dès que j'ai fait les calculs des angles ;) puis ;) en fonction des points d'arrivée.
Si il y a erreur de calcul je le verrai vite fait avec le banc de test. Mes produits sont calibrés, donc si ils ne me donnent pas les bons angles, c'est qu'il y a eu erreur de calcul !

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 25 Juin 2013, 06:41

:we: ha ben, je ne me doutais pas qu'il vous suffirait de faire le produit matriciel



...
et pourquoi pas

Mais (si je comprends bien le problème de virenque) je pense que cela ne satisfera pas virenque : ces deux multiplications ci-dessus suppose que l'on garde toujours le même repère pour effectuer la seconde rotation. Or l'axe de la seconde rotation a bougé suite à la première rotation car les axes de rotation sont fixés sur le cube et donc bougent en même temps que celui-ci.

Plus vraisemblablement, la bonne matrice est

qui donne la matrice (dans le repère initial O(x,y,z)) de
>.

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 25 Juin 2013, 07:55

:we: ha ben, je ne me doutais pas qu'il vous suffirait de faire le produit matriciel




Si je comprends bien le problème de virenque, je pense que cela ne le satisfera pas : cette multiplication ci-dessus suppose que l'on garde toujours le même repère initial O(x,y,z) pour effectuer la seconde rotation. Or, dans le problème de virenque, l'axe de la seconde rotation bouge suite à la première rotation car les axes de rotation sont fixés sur le cube et donc bougent en même temps que celui-ci.

Plus vraisemblablement, la bonne matrice est

qui donne dans le repère initial O(x,y,z) la matrice de >.

Edit. Précision importante : l'origine du repère O doit être le centre de gravité du cube (un point qui reste fixe quand on fait opérer les rotations).

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 25 Juin 2013, 11:09

leon1789 a écrit::we: ha ben, je ne me doutais pas qu'il vous suffirait de faire le produit matriciel




Si je comprends bien le problème de virenque, je pense que cela ne le satisfera pas : cette multiplication ci-dessus suppose que l'on garde toujours le même repère initial O(x,y,z) pour effectuer la seconde rotation. Or, dans le problème de virenque, l'axe de la seconde rotation bouge suite à la première rotation car les axes de rotation sont fixés sur le cube et donc bougent en même temps que celui-ci.

Plus vraisemblablement, la bonne matrice est

qui donne dans le repère initial O(x,y,z) la matrice de >.

Edit. Précision importante : l'origine du repère O doit être le centre de gravité du cube (un point qui reste fixe quand on fait opérer les rotations).


En effet, l'axe de la seconde rotation bouge suite à la première rotation.
Cependant, je n'arrive pas à comprendre le résultat de la composition de rotation :

Comment arrivez-vous à ce résultat ?

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 25 Juin 2013, 12:34

virenque a écrit:En effet, l'axe de la seconde rotation bouge suite à la première rotation.
Cependant, je n'arrive pas à comprendre le résultat de la composition de rotation :

Comment arrivez-vous à ce résultat ?

La formule utilisée est la formule de changement de base où pour nous fait office de matrice de passage entre la base O(x,y,z) et la base O(x',y',z') (l'origine des repère étant toujours au même endroit, je n'en parle pas).

La matrice code une action effectuée dans la base O(x',y',z') (base obtenue via ) , et la matrice code la même action mais exprimée dans la base initiale O(x,y,z).

Pour vraiment entrer dans les explications la formule du changement de base (souvent énoncée avec M matrice d'une action exprimée dans la base initiale, D matrice de la même action exprimée dans la base donnée par la matrice de passage P), je crois qu'il faut un cours d'algèbre linéaire sur les endomorphismes, les bases et les matrices.

Avatar de l’utilisateur
leon1789
Membre Transcendant
Messages: 5475
Enregistré le: 27 Nov 2007, 15:25

par leon1789 » 26 Juin 2013, 07:15

Cela dit, cette formule R . S . R^-1 , on l'utilise tous les jours !
Par exemple, au rubik's cube (idata.over-blog.com) :
Image
Imaginez qu'un droitier veuille tourner la face bleue (qui est à gauche) : comment faire ?
on fait pivoter le cube sur son axe vertical pour amener la face bleue à droite (R^-1)
on fait tourner la face bleue avec la main droite (S)
et on fait pivoter le cube sur son axe vertical pour amener la face bleue à gauche (R)

Résultat : R . S . R^-1 donne la manière de tourner une face à gauche.

Dans notre contexte, le calcul de est simple :

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 26 Juin 2013, 17:28

leon1789 a écrit:Cela dit, cette formule R . S . R^-1 , on l'utilise tous les jours !
Par exemple, au rubik's cube (idata.over-blog.com) :
Image
Imaginez qu'un droitier veuille tourner la face bleue (qui est à gauche) : comment faire ?
on fait pivoter le cube sur son axe vertical pour amener la face bleue à droite (R^-1)
on fait tourner la face bleue avec la main droite (S)
et on fait pivoter le cube sur son axe vertical pour amener la face bleue à gauche (R)

Résultat : R . S . R^-1 donne la manière de tourner une face à gauche.

Dans notre contexte, le calcul de est simple :


C'est plus clair comme cela en effet.
Je n'ai pas encore eu le temps de développer le problème sur mon banc de test, mais cela ne saurai tarder.
Je reviens sur le forum après le calcul validé (et testé) de phi et alpha en fonction du plan d'arrivée.
Ceci intéressera certainement ton bon fabricant d'inclinomètre digne de ce nom.

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 13 Juil 2013, 20:00

comment fait-on pour attacher un fichier pdf à une réponse ?
J'ai calculer les angles ;) puis ;) en fonction du point d'arrivée et je souhaiterai faire partager mes calculs.

Avatar de l’utilisateur
Olympus
Modérateur
Messages: 1668
Enregistré le: 12 Mai 2009, 11:00

par Olympus » 13 Juil 2013, 20:25

virenque a écrit:comment fait-on pour attacher un fichier pdf à une réponse ?
J'ai calculer les angles ;) puis ;) en fonction du point d'arrivée et je souhaiterai faire partager mes calculs.


Salut !

Tu peux mettre ton pdf dans un site d'hébergement de fichiers ( par exemple : http://ge.tt/ ) et coller le lien ici :lol3:

virenque
Membre Naturel
Messages: 11
Enregistré le: 23 Juin 2013, 17:50

par virenque » 14 Juil 2013, 08:21

Olympus a écrit:Salut !

Tu peux mettre ton pdf dans un site d'hébergement de fichiers ( par exemple : http://ge.tt/ ) et coller le lien ici :lol3:


Alors voici mon calcul pour les angles ;) et ;) d'arrivé :
http://ge.tt/7AH1Ahl/v/0?c

J'ai plus qu'à vérifier sur le banc 2 axes pour voir si les calculs sont erronés ou non.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 14 Juil 2013, 09:23

bj,

le repère origine c'est I (la matrice identité). u c'est le premier vecteur, et v le second.
Si on applique R(phi) sur I, on l'applique sur u aussi.
On peut voir ca comme un changement de repère, mais aussi simplement comme le fait de bouger u dans son repère initial (I).
On applique R(sigma) sur R(phi)*I, on on a donc également: le changement de repère depuis R(phi)*I, qui se percoit comme le fait de bouger l'image de u en (cos(15),a,b) toujours dans le repère I.

Bref à mon sens ya pas lieu d'avoir de R^-1.
D'apres le lien fournit, on ne considère que les équations mettant en jeu cos(15) et cos(10).
Soit R(phi) la matrice de rotation pour z :
a -b 0
b a 0
0 0 1
(avec a=cos(phi), b=sin(phi))
et R(sigma) la rotation autour de y' (j'insiste sur le ')
c 0 -d
0 1 0
d 0 c
(avec c=cos(sigma) et d=sin(sigma))
on a
u_target=Mu
v_target=Mv
avec M=R(sigma)R(phi)
on conserve les eq :
u_target(1) = M_1x u = M_11
(ou M_1x represente la premiere ligne de M, et M_11 le coeff en ligne 1 colonne 1)
v_target(2) = M_2x v = M_22
(ou M_2x represente la seconde ligne de M, et M_22 le coeff en ligne 2 colonne 2)
idem
On calcule M_11 et M_22 depuis R(sigma)R(phi) et il vient
M_11 = ac
M_22 = a

on déduit a=cos(phi), et M_22=v_target(2)=cos(10) d'ou
cos(phi)=cos(10) et phi=10

on déduit ac=cos(sigma)cos(phi) et M_11=u_target(1)=cos(15)
d'ou cos(sigma)=cos(15)/cos(phi)=cos(15)/cos(10)
sigma=arccos(cos(15)/cos(10))



Code: Tout sélectionner
u=[1 0 0];
v=[0 1 0];

uTarget=[cos(15) 0          0];
vTarget=[0          cos(10) 0];

phi=10;
sigma=acos(cos(15)/cos(10));

Rphi=[
   cos(phi)    -sin(phi) 0;
   sin(phi)    cos(phi)    0;
   0             0             1;
];
Rsigma=[
   cos(sigma)    0    -sin(sigma);
   0                1    0;
   sin(sigma)    0    cos(sigma);
];
M=Rsigma*Rphi;

Resu=M*u';
%expect 0
Resu(1) - uTarget(1)
Resv=M*v';
%expect 0
Resv(2) - vTarget(2)
la vie est une fête :)

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 14 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite