12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 3606|回复: 11
打印 上一主题 下一主题

[经验分享] Gimbal Lock - 万向节死锁的介绍

[复制链接]

711

主题

10

听众

5805

积分

高级设计师

Rank: 6Rank: 6

纳金币
2954
精华
3

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-5-26 03:05:16 |只看该作者 |倒序浏览
万向节死锁(Gimbal Lock)

在三维中常用的欧拉角坐标定向系统是用绕三个轴旋转的角度来表示物体的朝向(Rx,Ry,Rz)(注意三个轴是针对物体坐标系的)。如图1,物体处于世界坐标系(Xw,Yw,Zw)原点,此时物体坐标系(Xl,Yl,Zl)和世界坐标系重合(这里我使用右手坐标系。你也可以使用左手坐标系,无所谓,一样)。此时,规定物体的朝向为(0,0,0)。



图1:物体的初始朝向

现在开始旋转物体,先绕物体坐标系x轴(Xl)旋转30度(这里我规定沿着轴向轴的负方向看去,顺时针旋转为正。你也可以自己规定,无所谓,遵守规定即可),注意,此时的物体坐标系已经发生变化,见图2,



图2:物体绕物体坐标系x轴(Xl)旋转30度
然后再绕Yl轴旋转90度,此时,你会发现Zl轴已经和了世界坐标系X轴共轴。见图3。



图3:物体绕物体坐标系y轴(Yl)旋转90度

好了,此时使用欧拉角来表示当前物体的方向的话,其坐标应该是(30,90,0),对应旋转顺序是 Xl->Yl->Zl。然而,有意思的是如果再继续旋转,现在按照Zl旋转-40度,发现什么了?咦,怎么感觉已经绕过这个轴旋转过一次了, 虽然轴向相反?^_^,anyway,最后的坐标应该是(30,90,-40),见图4。



图4:物体绕物体坐标系z轴(Zl)旋转-40度

好了,回到刚才的疑惑上,既然感觉两次旋转是绕同一轴,如果我一开始考虑全部绕该轴的旋转呢?即先绕 Xl旋转30-(-40)=70度,然后再绕Yl旋转90度。^_^怎么样,已经到达和上次旋转的效果了吧。这说明什么?欧拉角坐标 (30,90,-40)和(30-(-40),90,0)等同。甚至坐标(Rx1,90,Rz1)和(Rx2,90,Rz2)相同,只需满足Rx1- Rz1=Rx2-Rz2。当Rx1-Rz1=Rx2时,Rz2==0,即在这种情况下任何再绕Zl轴的旋转,都可以使用先绕Xl轴来做到。或者从另一个角 度来说,物体现在本质上只能绕两个轴的旋转!即少了一个旋转自由度!这就是三维中的万向节死锁现象。
概括起来可以这么说,绕着物体坐标系中某一个轴,比如y轴的+(-)90度的某次旋转,使得这次旋转的 前一次绕物体坐标系x轴的旋转和这次旋转的后一次绕物体坐标系z轴的旋转的两个旋转轴是一样(一样的意思是指在世界坐标系中,两次旋转轴是共轴的但方向相 反),从而造成一个旋转自由度丢失。
实际上,使用3个量来表示三维空间的朝向的系统都会遭遇这个问题,除非用4个量来表示,如四元数。
2维的情况下欧拉角系统的万向节死锁导致了望远镜不能跟踪飞行器的位置,用某人的话就是在某种坐标系统下,空间中连续的的位置,不能用连续的坐标值来表示。看看三维情况下是不是也是这样?是不是不能跟踪飞行器的朝向?
举例:飞行器开始的方向是如图1所示,对应欧拉角坐标(0,0,0)。现在飞行器按照绕Xl 30度,然后绕Yl 40度,最后绕Zl 50度的顺序旋转,对应地,欧拉角坐标来跟踪的话是(30,40,50)。最后飞行器的朝向是如图5所示。





图5:坐标(30,40,50)对应的朝向
现在,飞行器又开始绕Xl轴转个1度。那么现在,欧拉坐标相应地变成(31,40,50)来跟踪,这个坐标对应的飞行器的朝向对吗?实际上是对的,没有问题,一切OK。
换个情况,飞行器从图1初始位置按照绕Xl 30度,然后绕Yl 90度,最后绕Zl -40度的顺序旋转,对应地,欧拉角坐标来跟踪的话是(30,90,-40),最后飞行器的朝向是如图4所示。现在,飞行器又开始绕Xl轴转个1度。那么 现在,欧拉坐标相应地变成(31,90,-40)来跟踪,对吗?比划看看,使用这个坐标,飞行器肯定对不上了!万向节死锁还是那么讨厌。
这也是为什么三维的情况下,欧拉角插值不适合用来表示旋转插值(等角速度)的原因。使用四元数插值吧
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

hyui    

1

主题

2

听众

6671

积分

高级设计师

Rank: 6Rank: 6

纳金币
2715
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-5-26 03:50:14 |只看该作者
Great illustrated tutorial, thank you!
回复

使用道具 举报

无效楼层,该帖已经被删除
ZackD    

715

主题

22

听众

4万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
26224
精华
17

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2014-5-26 04:49:26 |只看该作者
这个很专业的介绍,是在CG业内的说法吧
回复

使用道具 举报

2

主题

2

听众

972

积分

初级设计师

Rank: 3Rank: 3

纳金币
14
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2014-5-26 09:29:22 |只看该作者
Great illustrated tutorial, thank you!
回复

使用道具 举报

wucnj    

1

主题

1

听众

3160

积分

中级设计师

Rank: 5Rank: 5

纳金币
1065
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

6#
发表于 2014-5-26 10:10:35 |只看该作者
感谢分享!!!
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2014-5-26 10:36:33 |只看该作者
感谢分享!
回复

使用道具 举报

0

主题

1

听众

256

积分

设计实习生

Rank: 2

纳金币
21
精华
0

最佳新人

8#
发表于 2014-5-26 19:16:05 |只看该作者
謝謝分享~
回复

使用道具 举报

xx232    

17

主题

9

听众

3505

积分

中级设计师

Rank: 5Rank: 5

纳金币
865
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2014-6-11 17:04:38 |只看该作者
用角度会出现这个问题  四元数就没问题啦
回复

使用道具 举报

0

主题

1

听众

239

积分

设计实习生

Rank: 2

纳金币
89
精华
0

最佳新人

10#
发表于 2014-6-12 17:37:43 |只看该作者
额,看这样子自己 确实需要好好学学了。
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-12-1 05:40 , Processed in 0.172416 second(s), 33 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部