欧拉角万向节死锁与四元数的相关资料

Posted Make Change

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉角万向节死锁与四元数的相关资料相关的知识,希望对你有一定的参考价值。

  欧拉角和四元数都可以用来描述物体的姿态。欧拉角的万向节死锁理解稍微奇怪。四元数原理的理解较为复杂。欧拉角和四元数之间可以做转换。这里收集了若干资料已做备忘。

 

万向节死锁(Gimbal Lock) :

  欧拉角中的万向节死锁(Gimbal Lock)是一个重点和难点,理解了它对理解为何使用四元数替代欧拉角有很好的帮助作用。而炮台的火炮跟踪飞行中的飞机引起的万向节死锁就是一个非常直观的例子。如下图所示。

  坐标轴的红色表示x轴,绿色表示y轴,蓝色表示z轴;而绕着x,y,z轴旋转形成的角度分别称为roll,pitch,yaw,逆时针为正方向。

         现在假设地面上有一个火炮,炮膛可以上下移动(pitch),还可以360度旋转(yaw)。假设火炮的跑堂开始与x轴重合,这时前方有一架飞机飞来,飞机在飞行的过程中,炮膛一直对准着飞机。开始飞机出现在x轴正前方pithch为45度的位置,即炮膛此时的姿态为1.(pitch,yaw)=(-45度,0)。接着飞机飞行到火炮的正上方,即炮膛此时的姿态为2.(pitch,yaw)=(-90度,0)。接着飞机突然向y轴的负方向飞行,飞行至炮膛姿态为3. (pitch,yaw)=(-70度,-90度)的位置。注意,为了让炮膛继续对准飞机,火炮必须马上旋转底部,使得偏航角yaw为-90度,然后才能让炮膛往下移动至pitch为-70度。

         理想的情况是:炮膛在正前方位置时,紧接着向下移动炮膛值pitch为-70度,这样整个过程炮膛的运动是连续的。但事实上并非如此,而是:如果同时转动炮膛的pitch和yaw,炮膛会出现炮膛晃动的现象。试想在2.(pitch,yaw)=(-90度,0)和3. (pitch,yaw)=(-70度,-90度)位置插值。我们会得到:

  (-90度,0)

  (-85度,22.5度)

  (-80度,45度)

  (-75度,67.5度)

  (-70度,-90度)

  从z轴向下方观察炮膛口的运动轨迹,如下图所示,炮膛运行的轨迹是一条曲线(而非直线),因此炮膛整个过程是晃动的,而这不是我们想要。这就是我们常说的万向节死锁现象(Gimbal Lock)

  这是什么原因导致GinmbalLock呢?原因是同一个位置点的姿态拥有两种不同表达引起的,具体地,当炮膛转动至-90或者90度时候,就会出现炮膛的姿态可以用(pitch,yaw)=(-90度,0)表示,也可以用(pitch,yaw)=(-90度,-90),前者是炮膛先转动pitch后转动yaw,而后者是先转动yaw后转动pitch。而在时间连续的情况下,对这两点间进行插值自然会导致运动的不连续出现。

  

  以下是一个老外讲解Gimbal Lock的视频:

 

欧拉角

  1. 欧拉角基本概念

  2.欧拉角的万向节死锁(万向节死锁的理解,不错)

  3.万向节死锁视频讲解(万向节死锁的视频讲解,老外)

  4. 关于万向节死锁(Gimbal Lock)(万向节死锁的一个解释,还好)

  5. 万向节死锁实验讲解视频(老外很用心去解释死锁的概念)

 

四元数资料

  1. 彻底搞懂四元数(这里有四元数的理解,旋转矩阵,欧拉角,四元数)

  2. Understanding Quaternions 中文翻译《理解四元数》(从原理上直接进行解释)

  3. 四元数与欧拉角之间的转换(转换公式的计算)

 

以上是关于欧拉角万向节死锁与四元数的相关资料的主要内容,如果未能解决你的问题,请参考以下文章

Unity编程四元数(Quaternion)与欧拉角

欧拉角与四元数(计算,编程)

欧拉角与四元数互转,及四元数slerp球面线性插值算法

3D图形:矩阵、欧拉角、四元数与方位的故事

Unity基础:欧拉角、四元数

简单研究Unity中的万向锁和欧拉角以及四元数