参考资料:
https://krasjet.github.io/quaternion/bonus_gimbal_lock.pdf
http://www.zwqxin.com/archives/arithmetic/gimballock-and-quaternion.html
之前讲了一些欧拉角的知识,欧拉角是用3个角度,来表达空间内的旋转。但是采用欧拉角表示旋转有一个问题,就是gimbal lock。
我们选择如下顺序的欧拉角进行表示:
图(1)中两个坐标系重合,首先沿着自身的z’轴进行旋转,得到图(2)。然后沿着y’轴进行旋转pi/2角度,得到图(3)。此时可以看到,按照上文所选欧拉角旋转顺序,需要绕x’轴进行旋转,但此时x’轴与最开始的z’轴共线,所以绕x’轴旋转并不产生什么额外的作用,都可以通过第一步中,绕z’轴的旋转进行实现。这种就是旋转自由度丢失了一个
这个问题反映在计算过程中,有如下问题:
比如我们选择用特定的顺序的欧拉角表示一个旋转,当从旋转矩阵重建欧拉角表达的过程中,会有问题。依然以上问所述欧拉角为例,当绕y’轴旋转pi/2时,有:
此时,我们无法通过4个0位置的元素,重建唯一的
α
\alpha
α和
β
\beta
β。也就无法进行相应的积分求导等操作。
从上面的参考文献中也能看出:
(1)空间中任意形态旋转都一定能表达成一个3x3旋转矩阵
(2)给出三个欧拉角可以唯一的得出一个3x3矩阵
(3)但是给出一个旋转矩阵,不一定能得出唯一一个欧拉角(gimbal lock)