La conversion d'une matrice de 3x3 à Euler/Tait Bryan angles (pitch yaw roll)
J'ai le Razer Hydra SDK ici, et j'ai envie de transformer la matrice de rotation-je obtenir du matériel en tangage, lacet et roulis.
Les états de documentation:
rot_mat - A 3x3 matrix describing the rotation of the controller.
Mon code est actuellement:
roll = atan2(rot_mat[2][0], rot_mat[2][1]);
pitch = acos(rot_mat[2][2]);
yaw = -atan2(rot_mat[0][2], rot_mat[1][2]);
Pourtant, cela semble me donner de mauvais résultats.
Serait quelqu'un sait comment je peux traduire facilement, et ce que je fais de mal?
OriginalL'auteur Rob Quist | 2013-08-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez calculer le tangage, le roulis et le lacet comme cette.
Basé sur:
Si vous avez toujours des mauvais angles avec cela, vous pouvez utiliser une ligne-major de la matrice, par opposition à la colonne principale, ou vice versa - dans ce cas, vous devrez retourner tous les
R[i][j]
instances deR[j][i]
.Selon le système de coordonnées utilisé (gaucher, droitier) x,y,z peuvent ne pas correspondre aux mêmes axes, mais une fois que vous commencez à obtenir les bons chiffres, à comprendre l'axe qui est ce qui devrait être facile 🙂
Sinon, pour convertir à partir d'un Quaternion d'angles d'euler comme montré ici:
t2 au carré, et t3 au carré 🙂
J'ai remarqué un problème majeur avec mon matrice->angles d'euler code a été l'arbitraire de la sélection de la solution - revenant toujours x1,y1,z1 produit beaucoup de résultats plus stables
Oui. Lorsque l'on compare les résultats à l'origine des orientations, j'ai trouvé qu'ils ne peuvent pas être dans les X-Y-Z oder...en essayant de différents ordres donné des résultats variés; parfois, l'orientation finale a été mis en miroir le long d'un ou deux axes, parfois en dehors de 180° autour d'un axe...mais je n'ai pas remarqué de bizarre sauts.
Heh, je pensais que la comparaison est à l'empirer. Mais si cela fonctionne pour vous... 🙂
OriginalL'auteur melak47
C'est l'une formule qui va faire, gardez à l'esprit que plus la précision la plus variables dans la matrice de rotation sont importants:
http://nghiaho.com/?page_id=846
Il est également utilisé dans le nuage de points de la bibliothèque, de la fonction : pcl::getEulerAngles
Faites quelques recherches sur les eurler angle de serrure, c'est la raison pour les trucs bizarres, cette formule ne fonctionne qu'avec peu de rotations
OriginalL'auteur Martijn van Wezel