Calcul des rotations a partir des translations

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 22 Juin 2012, 09:37

7 heures du mat, deja a fond,c'est beau ! Café ... et c'est partit !

J'ai été lire quelques definitions(scalaire,colineaire,...) pour mieux comprendre !

Super ces sources, bien plus explicite pour moi ! je reprends juste quelques details que je ne suis pas sur de bien comprendre :

- j'ai lu deux definition un peu differentes alors je prefere demander : la fonction norm(qqchose,2), c'est pour trouver le plus grand chiffre de la matrice ?

- et quand tu ecris ba(2) ca veut dire ba*2 ?

et F(1:2), c'est F*1/2 ? et le (1:2) font references aux positions du cube B c'est bien ca ?

- et derniere chose quand tu ecris par exemple bc' alors que tu n'a déclaré que bc, bc' et bc on la meme valeur ?

sinon j'ai l'impression que je comprends le reste ! C'est super merci !



Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 22 Juin 2012, 09:49

- j'ai lu deux definition un peu differentes alors je prefere demander : la fonction norm(qqchose,2), c'est pour trouver le plus grand chiffre de la matrice ?

ici, qqchose est un vecteur genre [1 2 3]
la norme 2 est la norme euclidienne donc sqrt(1^2 + 2^2 + 3^2)

- et quand tu ecris ba(2) ca veut dire ba*2 ?

ba est un vecteur, jaccede au deuxieme element par ba(2).

et F(1:2), c'est F*1/2 ? et le (1:2) font references aux positions du cube B c'est bien ca ?

F(1:2) designe prendre le vecteur compose du 1er element de F, jusqu'au deuxieme
donc si F=[1 2 3], F(1:2)=[1 2]

- et derniere chose quand tu ecris par exemple bc' alors que tu n'a déclaré que bc, bc' et bc on la meme valeur ?

bc' est la transpose de bc, donc
bc=[0 1 2]
bc'=[
0
1
2
]
la vie est une fête :)

ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 22 Juin 2012, 10:11

Ok donc dans ce cas la

F=[1 0 0];%center of front face of A
A=[0 0 0];%center of cube A
B=[0 1 2];%center of cubeB


a=getAngle(F(1:2),A(1:2),B(1:2)) =getAngle([1,0],[0,0],[0,1]) ?

et donc dans la fonction getAngle

ba = A-B =[1,0]-[0,0] = [1,0] ?
bc = C-B =[0,1]-[0,0] = [0,1] ?

r=acos(ba*bc'/(norm(ba,2)*norm(bc,2)));

// ba*bc' = [(1*0+1*1),(0*0+0*1)] = [2,0] ?
// norm(ba,2)*norm(bc,2) = sqrt(1^2+0^2)*sqrt(0^2+1^2) = sqrt(1)*sqrt(1) = 1 ?

// r = acos([2,0]/1) ??


r*=sign(ba(1)*bc(2)-ba(2)*bc(1)); = sign(1*1-0*0) ? = sign(1) = 1 Sign retourn 1 ou 0 si son param est negatif si j'ai bien compris

end

si j'ai bien compris, alors comment je calcul acos([2,0]) ?
ou j'ai toujours pas compris jusque la ?

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 19:08

par Skullkid » 22 Juin 2012, 12:12

fatal_error a écrit:Je pense que ebkc s'en tape des angles d'euler ou autre, ce qu'il désire c'est trouver une matrice M, telle que:
On note A et B les centres des cubes cubeA et cubeB.
est la direction dans laquelle le cube cubeA doit pointer vers cubeB
est la direction actuelle dans laquelle pointe le cube A (sur le schéma (0,0,-1))

Et M est telle que

avec colinéaire à de même sens


Salut fatal_error, j'arrive pas à en être sûr. Puisque si j'ai bien compris, pour faire pivoter ses objets 3D, ebkc rentre dans son logiciel d'animation 3D (donc pas son code à lui) 3 nombres, qui sont 3 angles de rotation, pas une matrice. Peut-être que les 3 angles sont utilisés dans la cuisine interne du logiciel pour fabriquer la matrice de rotation qui va bien, mais il doit quand même rentrer 3 angles. Et je veux savoir ce que sont ces trois angles, c'est-à-dire quels sont les axes autour desquels on tourne ! J'ai bien compris que le centre des rotations était le centre du cube, mais après tous ces posts les axes n'ont jamais été donnés...

ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 22 Juin 2012, 12:14

Logiciel d'entree donne position XYZ ->


<- logiciel sortie accepte rotation XYZ en degree, pas matrice.

Mais avec la matrice je peux convertir facile en angles.

Skullkid a écrit:mais après tous ces posts les axes n'ont jamais été donnés...


c'est pas Rotation X Y et Z ? si ce n'est pas ca c'est que je ne comprends pas bien la nuance avec les axes...

ou alors ils sagit de heading, attitude et banking ?

busard_des_roseaux
Membre Complexe
Messages: 3151
Enregistré le: 24 Sep 2007, 13:50

par busard_des_roseaux » 22 Juin 2012, 12:55

Celle qui suit est plus souvent utilisée. Ainsi, la matrice réelle créée à partir d'un quaternion s'écrit de cette façon (en gardant q=a+ib+jc+kd):

Si le quaternion unitaire représente une rotation depuis l'origine, on peut le représenter à l'aide d'une matrice 3×3



avec

l'intéret est
M(q+q')=M(q)+M(q')
et
M(qq')=M(q).M(q')

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 19:08

par Skullkid » 22 Juin 2012, 13:01

ebkc a écrit:c'est pas Rotation X Y et Z ? si ce n'est pas ca c'est que je ne comprends pas bien la nuance avec les axes...

ou alors ils sagit de heading, attitude et banking ?


Pour faire tourner un objet il faut le faire tourner autour d'un axe, c'est-à-dire d'une droite. Quand tu fais tourner 3 fois ton objet il faut donc donner 3 axes. Et il y a une infinité de choix possibles pour ces axes, mais ton logiciel d'animation 3D il a probablement déjà fait un choix, et on ne peut pas vraiment t'aider si on ne connaît pas ce choix.

Heading-Elevation-Bank c'est une des conventions possibles pour les trois rotations autour d'axes qui tournent en même temps que le solide.

Les "vrais" angles d'Euler sont aussi par rapport à des axes qui tournent en même temps que le solide, mais c'est une convention différente de Heading-Elevation-Bank.

Et tu peux aussi faire tourner par rapport à des axes fixes, qui ne tournent pas en même temps que ton solide, par exemple les axes dessinés en rouge, vert et bleu sur l'image que tu as postée hier soir.

Ce ne sont que trois exemples de conventions qui sont utilisées. Et si tu changes de convention tu peux changer complètement la valeur des angles ! Donc je veux savoir, pour ton logiciel 3D, ce que signifient exactement les angles "rotation X", "rotation Y" et "rotation Z".

Sur l'animation ci-dessous, la convention utilisée est celle des "vrais" angles d'Euler. Tu vois bien que le globe tourne autour des axes rouges, qui eux-mêmes tournent à chaque rotation, et non pas autour des axes bleus qui sont fixes.

[center]Image[/center]

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 22 Juin 2012, 13:18

<- logiciel sortie accepte rotation XYZ en degree, pas matrice.


ouais en gros, tu pourrais fournir directement l'API avec les commentaires associes!
la vie est une fête :)

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

par Dlzlogic » 22 Juin 2012, 13:40

Bonjour,
Depuis le début, on parle de moyens de calcul utilisés, de centres de rotation, de système d'axes, de changement de repère etc., Mais j'ai toujours pas compris le but de ce logiciel.
1- on a une caméra qui fournit à un ordinateur, via un logiciel, la position instantanée d'un certain nombre de points caractéristiques. Je ne sais toujours pas comment sont identifiés et nommés ces points.
2- apparemment ces points sont donnée en 3D (X, Y, Z), il y a un cinquième paramètre dont on ignore la signification, et je n'ai pas vu de description de liaison entre les points. Il est évident que pour un individu qui lit un peu l'anglais, il ne peut pas avoir de liaison entre le coude et le pied. Mais la machine, comment fait-elle? C'est indispensable à savoir pour que la rotation du bras autour de l'épaule entraine le déplacement de la main.
3- le but à atteindre : j'ai évoqué le "rhabillage" d'un skelette pour le déguiser en un autre personnage, j'ai pas vraiment eu de réponse, maintenant j'ai l'impression qu'il s'agit d'animer artificiellement un personnage. Si c'est ce dernier point, quel intérêt d'avoir la saisie par la caméra ? On peut très bien construire un skelette de façon complètement théorique et ensuite l'animer. Ou peut aussi analyser et stocker les différentes transformations du skelette pour différents type de déplacement (marche lente, marche rapide, course, montée d'escalier, tourne à droite, assis->debout etc.) , le but final étant de faire se déplacer un skelette par simple regroupement de déplacements connus. On peut imaginer d'autres applications. Mais je ne pense pas que toutes ces applications aient un "pot commun", donc, il faut savoir ce qu'on veut faire.

Les problèmes liés à la rotation en 3D ne sont pas très difficiles, et à mon avis la seule difficulté réside dans les définitions des conventions de base : centre de rotation, axes de référence etc. Ce sont des conventions, il faut les préciser. Pour les préciser de manière astucieuse, il faut savoir ce que l'on veut faire. C'est le but de ma question.

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

par Dlzlogic » 22 Juin 2012, 14:01

Je vais prendre un détail très concret : l'épaule du personnage.
Supposons que l'articulation d'une épaule humaine soit constituée d'une rotule sphérique. Ceci permet de faire parcourir le coude sur une grande partie de la sphère centrée sur l'épaule.
Lors de la prise de vue, que représente le point connu en 3D ? Si c'est le centre de la rotule, parfait, mais ça m'intéresserait de savoir comment fait le logiciel. Si ce n'est pas le cas, tout calcul basé sur des rotations à transmettre au coude, puis au poignet, enfin à la main, n'aura qu'un très lointain rapport avec la réalité.
Par contre, si on a défini au préalable et une fois pour toutes les positions des articulations, assimilables à des centres de rotation en 3D, alors, on pourra animer le skelette.
Autre détail, le coude : je crois (mais j'en suis pas sûr) que le mouvement de l'avant bras par rapport au bras ne se fait que dans un seul plan. C'est à dire que le bras peut se plier ou s'allonger, mais toujours dans le même plan. Par ailleurs l'avant bras est formé de 2 os, pour permettre une certaine torsion de près de 180° Dans quel contexte s'inscrit cette transformation?
Donc je repose ma question : que veut-on faire ? C'est indispensable à savoir avant de se demander "comment le faire".

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 22 Juin 2012, 15:04

si j'ai bien compris, alors comment je calcul acos([2,0]) ?
ou j'ai toujours pas compris jusque la ?

j'ai rate cette question.

le plus simple, c'est que tu installes matlab ou octave, et tu tentes d'executer le script. Mais si ca se fait, la matrice que tu vas obtenir va te donner des angles qui ne correspondent pas a ceux qu'il faut fournir dans ta fonction.
la vie est une fête :)

ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 22 Juin 2012, 17:14

fatal_error a écrit:le plus simple, c'est que tu installes matlab ou octave


Oui mais au final je vais re developer ca dans un language qui ne fonctionne pas comme ca ...

Du coup il faut que je comprenne comment ecrire ca dans un language dev normal, en ligne.

Ta reponse veut elle dire aussi que pour le reste du debut du calcul j'ai bon ?


@Dlzlogic :

La camera a la base est une innovation pour jeux video doté d'un capteur 3D, si vous lisez cet article , vous en comprendrez sans doute mieux ce que je cherche a faire.

La camera sait donc d'elle meme qu'elle doit trouver la main gauche, la droite, le coude, etc ... sur l'image qu'elle voit avec ces capteurs.

Elle envoit ensuite a l'ordinateur une liste, celle que je vous ai envoyé plus haut. Le 5eme parametre je ne sais pas ce que c'est je demandrais au developeur, mais je crois vraiment que dans notre cas ca n'est pas important.

sur mon autre logiciel, celui pour animer les personage, le systeme de skelette est hierarchique, les poses sont obtenues par rotation de chaque joint. C'est le concept de la cinematique inversée ( lire ).

Image

J'essaye donc de trouver la fonction a appliquer a chaque paire de points pour en connaitre l'orientation a appliquer a l'autre skelette.

Pour simplifier mes recherches, j'ai considéré que mon bras n'est qu'un seul membre. et l'epaule le centre de rotationen coordonée XYZ 0,0,0 tel que

si les données que je recoit de la camera son main_X = 5 et epaule_X = 2,

alors main_x -= epaule_x et epaule_x = 0;

pareils pour Y et Z.

@Skullkid : J'utilise Cinema 4D, sur cette page de doc http://www.kxcad.net/cinema_4d/help/US/html/5500.html ils parlent de heading-pitch-banking (en anglais desole ...)
Image

c'est donc bien ca ! et pas des angles d'euler ... :) Je comprends un peu mieux

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 22 Juin 2012, 23:45

Oui mais au final je vais re developer ca dans un language qui ne fonctionne pas comme ca ...

on s'en tape du langage dans lequel tu dois développer. Si t'as besoin de comprendre je crois que ca peut valoir le coup de faire l'effort d'installer le logiciel.

Du coup il faut que je comprenne comment ecrire ca dans un language dev normal, en ligne.

cpp, j'imagine, c'est juste la même chose en plus compliqué, donc tu perds rien à te familiariser à cette syntaxe.

Ta reponse veut elle dire aussi que pour le reste du debut du calcul j'ai bon ?

non, en fait t'as pas trop compris, mais c'est pas grave, en runnant tu comprendrais mieux :++:
la vie est une fête :)

ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 23 Juin 2012, 00:12

okay ... ;)

:stupid:

fatal_error a écrit:on s'en tape du langage dans lequel tu dois développer. Si t'as besoin de comprendre je crois que ca peut valoir le coup de faire l'effort d'installer le logiciel.


cpp, j'imagine, c'est juste la même chose en plus compliqué, donc tu perds rien à te familiariser à cette syntaxe.


non, en fait t'as pas trop compris, mais c'est pas grave, en runnant tu comprendrais mieux :++:

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 19:08

par Skullkid » 23 Juin 2012, 01:11

Merci d'avoir explicité le système d'axes. Aux erreurs de calcul près, pour faire tourner la face "avant" (celle qui regarde vers les z négatifs) du cube vers le point de coordonnées (x,y,z) il faut appliquer :

- Pitch (rotation_X ?) :
- Heading (rotation_Y ?) :
- Bank (rotation_Z ?) quelconque

Il y a peut-être des signes moins à ajouter ou supprimer vu que tu ne nous as pas donné la convention de signe, mais normalement ça devrait donner ce qui faut.

ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 23 Juin 2012, 11:01

Je suis encore en train de telecharger matlab pour comprendre les sources de fatal_error,

mais je vais en attendant pouvoir tester les tiennes de suite !

Je vous tiens au jus tres vite !

Skullkid a écrit:Merci d'avoir explicité le système d'axes. Aux erreurs de calcul près, pour faire tourner la face "avant" (celle qui regarde vers les z négatifs) du cube vers le point de coordonnées (x,y,z) il faut appliquer :

- Pitch (rotation_X ?) :
- Heading (rotation_Y ?) :
- Bank (rotation_Z ?) quelconque

Il y a peut-être des signes moins à ajouter ou supprimer vu que tu ne nous as pas donné la convention de signe, mais normalement ça devrait donner ce qui faut.

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 19:08

par Skullkid » 23 Juin 2012, 11:10

Ah, fais gaffe j'avais fait une coquille dans le pitch, au numérateur du deuxième argument c'est y² et pas z². Je corrige dans mon post d'avant.

ebkc
Membre Naturel
Messages: 35
Enregistré le: 19 Juin 2012, 11:49

par ebkc » 23 Juin 2012, 12:27

Skullkid a écrit:Ah, fais gaffe j'avais fait une coquille dans le pitch, au numérateur du deuxième argument c'est y² et pas z². Je corrige dans mon post d'avant.


Hello !

Alors j'ai reecris ca en code. et appliqué a mon cube.

Mais c'est pas mieux qu'avant. Certains cotés sont cohérents d'autres absolument pas, le je n'arrive pas a atteindre l'arriere non plus je crois.

Je n'ai pas encore fait beaucoup de test mais je dois bosser sur autre chose aujourd'hui. Je m'y remet demain pour voir ce qui cloche. mais paut etre as tu une idée ?

Skullkid
Habitué(e)
Messages: 3075
Enregistré le: 08 Aoû 2007, 19:08

par Skullkid » 23 Juin 2012, 12:31

Ça veut dire quoi "certains côtés sont cohérents et d'autres pas" ? Est-ce que tu as testé en entrant manuellement un cube B et en entrant manuellement les angles sur le cube A, voir si le cube A se tourne bien vers le cube B ? C'est à ce problème que j'ai essayé de répondre, pas au gros problème avec la caméra et tout.

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 24 Juin 2012, 09:23

quelqu'un pourrait-il m'expliquer la différence entre le head pitch bank et les angles d'euler, car j'en vois aucune?
la vie est une fête :)

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 27 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