几何思维理解欧拉角的死锁问题
欧拉角是什么
这里是欧拉角的维基百科页面。
简单来讲,欧拉角就是在三维空间中对于一个物体旋转变换的一种表示方式。这种方式现在分为动态表示和静态表示两种。
首先,我们建立一个空间直角坐标系 Oxyz ,然后分别绕 x轴 / y轴 / z轴 旋转即可用非常直观的动态方式表示一个欧拉角变换,如下图中那个红色的坐标系。
于是我们就可以用 [ α , β , γ ] 的形式来表示 绕 x轴 旋转 α° + 绕 y轴 旋转 β° + 绕 z轴 旋转 γ° 这样一个欧拉角变换。
关于欧拉角的静态表示具体可以参考上方给出的百科页面,而死锁现象只会出现在动态方式的表示中,下文对欧拉角的表示方式若无特殊说明均为动态方式。
恒定不变的万向死锁规律
当我们在一个欧拉角变换中将绕 y轴 的旋转角度调节为 90° ,即 [ α , 90 , γ ] 这个变换,则会发现,此时 α 与 γ 会同时控制同一个坐标轴的旋转角度(例如 [ 20 , 90 , 30 ] 这种变换实际上等价于 [ 50 , 90 , 0 ] 或 [ 0 , 90 , 50 ] 这两种变换),失去了一个轴的自由度。
这种现象在任何符合上述条件的欧拉角变换中都会发生,即万向死锁现象。
万向死锁的原因
我们可以将上述的这种欧拉角变换表示为旋转矩阵,通过运算可以得出最终的旋转变换确实与 z轴 方向无关。但代数方法较难阐述死锁现象的本质,同时博主在写这篇文章时刚刚高二并没有学习矩阵运算,所以这里用一种直观的几何思维来阐述万向死锁的本质原因:
在第一个动态图中,我们可以看到红色坐标系本身是随着物体转动而转动的,那么为什么会发生死锁呢?
其实,原因恰恰就是坐标系会跟着物体一起转。
这里就用上面的 [ 20 , 90 , 20 ] 来举例说明,当物体 x轴 旋转 20° 后,y轴 与 z轴 也同时跟着物体绕 x轴 旋转了 20° 。此时使物体绕 y轴 旋转 90° ,如果还按照上面的规律,那么 x轴 与 z轴 也跟着物体绕 y轴 旋转了 90° 。
我们知道,空间直角坐标系中的 x轴 与 z轴 是相互垂直且同时与 y轴 垂直的,根据这几个垂直得到的结论就是现在的 z轴 已经转动到了原来的 x轴 的位置!
所以此时绕 z轴 转动就很明显等效于原来绕 x轴 转动了,于是绕 z轴 转动的 30° 又被叠加到了绕 x轴 转动的 20° 上。
综上,万向死锁现象的本质就是:欧拉角变换的动态表示中,坐标系会与物体一起转动。
后记
实际上,写这篇文章的缘由是我看完B站上的一个视频后不是很理解又自己思考了一下,这篇文章就是思考的过程,如果看不懂的话可以去支持一下视频UP再来看一遍文章,更有助于理解。