旋转矩阵到欧拉角

Posted

技术标签:

【中文标题】旋转矩阵到欧拉角【英文标题】:Rotation matrix to euler angles 【发布时间】:2014-08-25 15:36:14 【问题描述】:

我使用以下代码将 3X3 旋转矩阵转换为角度:

(_r = 双[9])

double angleZ=atan2(_r[3], _r[4])* (float) (180.0 / CV_PI);
double angleX=180-asin(-1*_r[5])* (float) (180.0 / CV_PI);
double angleY=180-atan2(_r[2],_r[8])* (float) (180.0 / CV_PI);

这里有个小帮手

_r[0] _r[1] _r[2]
_r[3] _r[4] _r[5]
_r[6] _r[7] _r[8]

这有意义吗?因为角度看起来太……相互依存? x y z 都对单个姿势变化做出反应...

旋转矩阵是从 opencv cvPOSIT 函数接收的,因此兴趣点可能是错误的,并产生这种混乱的效果...

但不知何故,我认为我只是做错了转换:)

我将 opengl 中的角度应用于立方体:

glRotatef(angleX,1.0f,0.0f,0.0f);
glRotatef(angleY,0.0f,1.0f,0.0f);
glRotatef(angleZ,0.0f,0.0f,1.0f);

【问题讨论】:

也许这可能有用:soi.city.ac.uk/~sbbh653/publications/euler.pdf 还有更多的希腊字母和矩阵:D 欧拉角有很多约定;如果您不告诉我们您使用的是哪一个,甚至很难检查您的公式是否正确。完全避免它们的原因之一;见en.wikipedia.org/wiki/Euler_angles 我正在尝试在 opengl glRotatef 中使用它 - 更新答案 【参考方案1】:

你想要完成的事情并不像你想象的那么容易。关于欧拉角的名称(x,y,z,alpha,beta,gamma,yaw,pitch,roll,heading,elevation,bank,...)以及它们需要应用的顺序有多种约定.

某些位置的歧义也存在一些问题,请参阅 Gimbal Lock 上的***文章。

请阅读 David Eberly 的 Euler Angle Formulas 文档。它非常有用,并且包含许多适用于各种约定的公式,如果您想在极端情况下也有稳定的公式,您可能应该基于它们来编写代码。

【讨论】:

这个有伪代码,但我觉得我已经尝试过了.. 但是 1+ 并且我再试一次。太糟糕了,我数学很烂 尽管我使用的是我自己的公式,因为它也可以工作(恕我直言甚至更好)我接受这个因为这个 pdf 对于任何寻找答案的人来说都是一个很好的资源;)

以上是关于旋转矩阵到欧拉角的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理

我的OpenGL学习进阶之旅关于欧拉角旋转顺序旋转矩阵四元数等知识的整理

python 欧拉角,旋转矩阵,四元数之间转换

根据相机旋转矩阵求解三个轴的旋转角/欧拉角

欧拉角旋转矩阵及四元数

欧拉角旋转矩阵及四元数