什么是万向节死锁,产生万向节死锁的本质原因

目录

什么是万向节死锁

定义

小结

为什么会出现万向节死锁现象

1. 什么是使用欧拉角描述三维旋转?

2. 为什么一个旋转轴会与另外一个旋转轴重合?

3. 什么叫失去一个自由度,为什么无法独立控制所有旋转方向?

产生万向节死锁的本质原因

为什么会有上面奇怪的转动设定呢

如何避免万向节死锁

根据使用场景调整旋转顺序

使用其他描述旋转的方式


什么是万向节死锁

定义

万向节死锁(Gimbal Lock)是机械系统和三维空间旋转控制中的一种现象,主要发生在使用欧拉角描述三维旋转时。当一个旋转轴在一定条件下与另一个旋转轴重合时,系统失去了一个自由度,导致无法独立控制所有旋转方向,这种情况称为万向节死锁。

上面是一个比较官方的描述,但是估计很多人看完了也不会太懂,心里有个模糊的概念,实际还是不知道什么是万向节锁以及为什么会出现万向节锁的现象。

小结

这里先简单总结一下:

  • 万向节死锁是一种现象;
  • 这种现象出现在用欧拉角来描述物体三维旋转时才会出现;
  • 这种现象是物体在空间中处于某种姿态时,某两个旋转轴重合导致系统失去了一个自由度。

为什么会出现万向节死锁现象

来来来,这里划重点!大家理解下面几句话。

  1. 万向节死锁主要发生在使用欧拉角描述三维旋转时.
  2. 当一个旋转轴在一定条件下与另一个旋转轴重合时.
  3. 系统失去了一个自由度,导致无法独立控制所有旋转方向.

1. 什么是使用欧拉角描述三维旋转?

三维旋转表示物体在三维空间中的转动,比如飞机在空中可以任意转动(如下图显示的三个轴),实际上沿着这三个轴转动后的飞机最终的姿态与初始的姿态间的关系可以理解成飞机绕着一个任意轴转动(轴角描述旋转),因此三维旋转就是描述了物体在三维空间中姿态的变换。

而实际上描述空间变换的方式有很多种,比如旋转矩阵、欧拉角、轴角、四元数,因此欧拉角只是其中一种描述物体姿态变换的方式。欧拉角描述旋转的优点在于直观,通过数值就能判断物体如何旋转。

欧拉角描述姿态变换的方式为对象依次沿着不同的旋转轴转动指定的角度,如下图所示,图中显示了三个不同的旋转轴和转动方向,分别称为pitch,yaw,roll。

对于相同的转动角但是不同的转动顺序产生的最终姿态也不同,因此欧拉角一般要指定转动顺序,比如xyz表示飞机先绕x轴转动,再依次按照y,z轴转动。

2. 为什么一个旋转轴会与另外一个旋转轴重合?

大家在心里想一下,什么情况下飞机的两个旋转轴会重合呢。。。。

哈哈,估计大家想不出来这种场景,想来想去也找不到两个轴重合的情况,为什么会这样呢?

因为一般的人会认为飞机沿着一个轴转动时,它的另外两个旋转轴也会随着飞机转动,比如上图中的飞机绕z轴转动,飞机的 x 轴和 y 轴也会随着飞机的转动而转动,因此应该不会出现两个轴重合的现象。

实际上欧拉角描述旋转时,当物体绕一个轴转动时,物体的其它转动轴有时候会随着物体转动,有时候不会随着物体转动,当一个轴没有随着物体转动时,则随着物体转动的轴就有可能与这个没有转动的轴重合。这才是两个旋转轴重合的根本原因。

这里再详细解释下什么情况下轴会随着物体转动,什么时候不会,大家好好理解下面这句话。

先转动的轴会带着后面的轴转动,但是后转动的轴不会影响前面的轴。

比如上图的飞机以xyz顺序转动时,

  1. 绕x轴转动时,y轴和z轴会随着飞机一起转动而产生新的y,z轴,
  2. 当飞机再绕y轴转动时(此时已经是新的y轴),z轴再次随着转动而变成了更新的z轴,但此时的x轴还是最开始的x轴。
  3. 最后飞机绕z轴转动(此时的z轴是转动过两次后的最新z轴),x轴和y轴保持之前的位姿。

3. 什么叫失去一个自由度,为什么无法独立控制所有旋转方向?

以上面的xyz转动顺序为例,假如沿着xyz转动(0,90,0),当飞机绕y轴转动90度时,可以发现飞机的新z轴和旧x轴重合了,此时就会失去一个自由度(x轴),导致转动z轴和转动x轴的效果是一样的,因此此时无法再控制物体绕新的x轴旋转。

不难推断,只要沿着中间的轴转动90度就会出现万向节死锁。

产生万向节死锁的本质原因

  1. 先转动的轴会带着后面的轴转动,但是后转动的轴不会影响前面的轴。
  2. 当中间旋转轴转动90度时,第一个旋转轴和第三个旋转轴重合,系统损失一个自由度。

为什么会有上面奇怪的转动规则呢

为什么会有这么奇怪的设定呢,为什么后面转动的轴无法带动前面的轴一起转动呢?

因为欧拉角描述的是一个变换,而不是旋转过程

变换意味着一组欧拉角代表着一次变换,而这次变换一定从初始位置开始,按照我们定义的顺序(比如xyz)旋转的,因此绕前面的轴旋转完之后,这个轴在空间中的位置就确定了,后面的绕其它轴的旋转不会再影响这个轴的位置。

如何避免万向节死锁

根据使用场景调整旋转顺序

用欧拉角描述旋转时无法完全避免死锁问题,但可以根据使用场景来减少死锁出现的概率,比如描述船在海上航行的姿态时,可以把中间的旋转轴定义为船的左右方向,因为船几乎很难在这个方向旋转90度(船头竖直朝上或朝下)

使用其他描述旋转的方式

使用四元数,旋转矩阵等其它方式描述旋转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值