Je cherche la manière correcte d'appliquer un décalage à un ensemble de rotations d'Euler. Je voudrais avoir une transformation avec un ensemble spécifique d'angles d'Euler (x1, y1, z1), si je les transforme, j'obtiendrais une séquence d'Euler de (0,0,0). Toutes les autres séquences d'Euler (xi, yi, zi) transformées agiraient alors comme si (x1, y1, z1) étaient (0,0,0).Décalage des angles d'Euler à l'aide de la matrice de rotation
Contexte:
J'utilise Oculus DK2 HMD pour afficher un environnement virtuel (Vizard 5, Python 2.7.5) tout en utilisant un système de capture de mouvement Vicon (Nexus 2) pour mettre à jour la position et l'orientation. Je peux obtenir les angles d'Euler du HMD (à partir d'un groupe de marqueurs, pas le gyroscope DK2) du système Vicon, mais en faisant face à mon orientation désirée (0,0,0) le HMD a une séquence de rotation non nulle.
Problème:
Je vais avoir du mal à penser à ce que la transformation (? Matrice de rotation) je pouvais trouver qui pourrait prendre une séquence comme (-105, 110, -30) et de le rendre (0, 0,0) sans être une matrice inutile de zéros. Si la matrice de rotation était toute zéros, n'importe quelle séquence serait transformée en (0,0,0)). La formule que j'ai en tête est (veuillez ignorer la syntaxe):
[0,0,0] = (3x3) R * (3x1) [- 105,110, -30] qu'est-ce que R? R ne peut pas être une matrice zéro 3x3.
Tentative:
Je bêtement essayé de soustraire simplement les angles euler de offest comme ceci:
import viz
viz.go()
navigationNode = viz.addGroup() #create node
viewLink = viz.link(navigationNode, viz.MainView) #link it to the main view
#I am not showing how I get variables HMDX HMDY HMDZ but it's not important for this question
navigationNode.setEuler(HMDRZ-90,HMDRX+180,-1*(HMDRY)+30) #update the view orientation
Hélas,
Je suis sûr que cela est possible, en En fait, j'ai fait des choses semblables dans le passé où je devais transformer des grappes de marqueurs dans le cadre d'un corps rigide à une position d'étalonnage. Mais je ne peux tout simplement pas contourner la solution triviale dans ce cas (matrice des zéros). Si par hasard quelqu'un pouvait l'expliquer en utilisant des quaternions, je peux aussi les utiliser.
me manque probablement quelque chose de très fondamental ici, mais disons que vous avez '[-105110, -30] 'et que nous voulons transformer en [0,0,0]' en utilisant une matrice 'R'. Pourriez-vous alors ne pas simplement utiliser par ex. '[0, 1, 110/30]' dans chaque rangée de 'R' !? Si oui, alors il y a apparemment beaucoup de solutions à ce problème; sinon je ne comprends pas vraiment ta question. – Cleb
Ok, pourriez-vous alors expliquer plus en détail ce que vous recherchez? Je n'ai donné qu'un exemple arbitraire; vous pourriez également choisir '[-1, 1, 43/6]' qui ne retournerait alors apparemment pas '(0, 0, 0)' pour '(-105 + 45,110, -30)'. Donc, si vous pouviez expliquer les propriétés souhaitées de 'R' plus en détail, ce serait génial! Vous pouvez également essayer [ici] (http: //math.stackexchange.com/questions) si vous êtes capable de définir les propriétés de 'R' d'une manière détaillée. – Cleb
@Cleb Désolé pour la confusion, je pense que ce que vous décrivez est la transformation d'un vecteur en le multipliant avec la matrice de rotation. Il y a beaucoup de matrices R qui peuvent transformer un vecteur en zéros. Cependant, avec les angles d'Euler, vous ne pouvez pas simplement multiplier les angles d'Euler par la matrice de rotation. Cela n'aurait aucun sens. Au lieu de cela, vous multipliez avec une autre matrice de rotation et utilisez une cinématique inverse pour obtenir les nouveaux angles d'Euler. J'espère que j'ai un sens. merci pour votre réponse – willpower2727