【Unity编程】欧拉角与万向节死锁(图文版)

万向节死锁(Gimbal Lock)问题

上文中以前说过,欧拉旋转的顺规和轴向定义,自然造就了“万向节死锁”问题。本文主要来探索它自然形成的原因。

陀螺仪

首先。我们来了解Gimbal 到底是个什么玩意儿。以下来自***中关于Gimbal的一段引述:

平衡环架(英语:Gimbal)为一具有枢纽的装置,使得一物体能以单一轴旋转。由彼此垂直的枢纽轴所组成的一组三仅仅平衡环架。则可使架在最内的环架的物体维持旋转轴不变,而应用在船上的陀螺仪、罗盘、饮料杯架等用途上,而不受船体因波浪上下震动、船身转向的影响。

Gimbal

上图就是一个Gimbal装置了,它是一个陀螺仪。中间有一根竖轴,穿过一个金属圆盘。

金属圆盘称为转子,竖轴称为旋转轴。转子用金属制成,应该是了添加质量。从而增大惯性。竖轴外側是三层嵌套的圆环,它们互相交叉,带来了三个方向***度的旋转。
看着不停转来转去,有点晕,接下来看两个静态的。这两张图来自百度百科。

陀螺仪

中文凝视:

陀螺仪

当中Gimbal仅仅代表陀螺仪装置中的平衡环,显然***上将它解释成“平衡环架”更为合理。

Pitch、Yaw、Roll

在解释陀螺仪的工作原理之前,我先介绍一些转动的术语。在飞行器的航行中,进行XYZ三个方向旋转的旋转有专业的术语,见下图:

Pitch、Yaw、Roll

沿着机身右方轴(Unity中的+X)进行旋转,称为pitch。中文叫俯仰


沿着机头上方轴(Unity中的+Y)进行旋转,称为Yaw,中文叫偏航
沿着机头前方轴(Unity中的+Z)进行旋转,称为Roll,中文叫桶滚

陀螺仪的工作原理

我们知道陀螺仪使用来測量平衡和转速的工具,在载体快速转动的时候,陀螺仪始终要通过自我调节,使得转子保持原有的平衡。这一点是怎样做到的?带着这个问题。我们来看一下这个古老而又神奇的装置的工作原理。

为了解释清楚问题,我自己画了一个简单的陀螺仪示意图。

(金属圆盘我就省略了,丑点儿也就别管了。

。)

陀螺仪示意图


这里,我把三个Gimbal环用不同的颜色做了标记,底部三个轴向,RGB分别相应XYZ。
如果如今这个陀螺仪被放在一艘船上,船头的方向沿着+Z轴。也就是右前方。

如今如果。船体发生了摇晃,是沿着前方进行旋转的摇晃,也就是桶滚。因为转子和旋转轴具有较大的惯性。仅仅要没有直接施加扭矩。就会保持原有的姿态。因为上图中绿色的活动的连接头处是能够灵活转动的,此时将发生相对旋转,从而出现以下的情形:

桶滚平衡

再次如果。船体发生了pitch摇晃,也就是俯仰。相同,因为存在相应方向的能够相对旋转的连接头(红色连接头),转子和旋转轴将仍然保持平衡。例如以下图:

俯仰平衡

最后如果。船体发生了yaw摇晃,也就是偏航,此时船体在发生水平旋转。相对旋转发生在蓝色连接头。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjgzz.html