What's Gimbal Lock?
Gimbal lock is the phenomenon of two rotational axis of an object pointing in the same direction. Actually, if two axis of the object become aligned, then we say that there's a gimbal lock. In other words, a rotation in one axis could 'override' a rotation in another, making you lose a degree of freedom.
前面已经说了,使用三个角度表示一个旋转就可以理解为欧拉角了,这种定义未免太宽泛,并没有多大的实际意义。所以使用欧拉角的时候需要很多的规定,我们的欧拉角:
动态定义,围绕载体坐标系旋转
旋转顺序,Z–>X–>Y(旋转顺序没有统一规定,不过在不同的领域可能有不同的使用习惯)
范围:两个0-2Pi,一个0-Pi
如果不定义旋转的顺序,就会出现一组欧拉角对应多个空间点,也就是对应多个旋转(规定了顺序也会出现,下面会讲到)。举例:
比如:(45,45,45)这个欧拉角组,大家可以拿一个物体试一下,将XYZ三个轴以不同的顺序旋转得到的最终位置是不一样的。
万向节锁的问题,就出现在这个定了顺序的转动,因为Z轴为最高层次,接着是X轴,最后才Y轴。
万向节死锁是指当三个万向节其中两个的轴发生重合时,会失去一个自由度的情形,具体表现为:自由度的减少,多组欧拉角对应一个位置。在三维下,载体可以围绕自身坐标系的三个轴旋转,也就是会有3个自由度,当出现万向节死锁的时候,会有一个轴无论怎样旋转都不会达到想要的位置,这时就是缺少了一个自由度。自由度减少也表现为,可以只通过两个轴的旋转,达到三个轴旋转出现万向节死锁状态的位置。
通常说来,万向节锁发生在使用Eular Angles(欧拉角)的旋转操作中,原因是Eular Angles按照一定的顺序依次独立地绕轴旋转。让我们想象一个具体的旋转场景,首先物体先绕转X轴旋转,然后再绕Y轴,最后绕Z轴选择,从而完成一个旋转操作,当你绕Y轴旋转90度之后万向节锁的问题就出现了,因为X轴已经被求值了,它不再随同其他两个轴旋转,这样X轴与Z轴就指向同一个方向(它们相当于同一个轴了)。
并且由于欧拉角在插值时,计算出来的结果有时不是符合需求的,这样在插值方面就交四元数来解决了。