我在研究欧拉角时,遇到了使用欧拉角可能发生的万向节锁定问题。在万向节锁定中,我们失去了一个旋转轴。

但是如何?什么时候发生?在什么条件下?

关于欧拉角,我所知道的是,旋转始终围绕对象轴而不是垂直轴(方向始终与世界轴相同的轴)发生。并且对象轴在每次旋转中将保持彼此垂直。

有人可以用欧拉角告诉我如何到达万向节锁定点吗?

它如何影响动画?

#1 楼

3D旋转通常使用矩阵进行。可以将xyz欧拉角转换为矩阵,以便将其用于旋转。 />首先绕x轴旋转对象,然后绕y轴旋转,最后绕z轴旋转。 y轴和z轴旋转。
当然,这会根据旋转顺序而变化。

此GIF显示更改一个轴值可以更改另一个轴的值​​,但是这样做不起作用



在这里您还可以看到我最后添加了万向节锁。
这是我失去一个旋转轴的地方。

可以通过将旋转顺序更改为一个顺序来解决该问题,而不会破坏它的工作方式。
也可以不使用欧拉角而是使用欧拉来解决此问题。 3D动画中的角度既方便又简单n。

在3D动画中,可能会导致怪异的旋转,因为必须大量更改旋转值才能获得所需的特定旋转。
如果您看一下在图形中xyz欧拉角值会因此而出现尖峰。
这可能会导致关键帧的怪异插值和怪异的最终结果。关于其背后的数学运算,我建议阅读有关3D旋转矩阵的信息。
https://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations

有关动画的一些额外说明:
在这种情况下,旋转围绕轴(显示为圆圈),通过在一个轴上旋转,您可以旋转另一轴。结果是在动画中使用法向旋转球体(动画中的球体,然后没有旋转轴)时,看不到这些轴被旋转。如果获得了万向节锁,则一个轴与另一个轴相同,但是对于正常的旋转球体,它仍然会尝试旋转,好像该轴与另一个轴不相同一样,这意味着它使用怪异的值来获得旋转,这会使动画看起来很奇怪。

我希望这会有所帮助!

评论


$ \ begingroup $
我无法从动画中分辨出万向节锁定的具体原因和后果。您能否进一步解释发生的事情以及它是否可逆?
$ \ endgroup $
– trichoplax
16 Dec 30'在12:11

$ \ begingroup $
停顿了!感谢您抽出一些时间为此。
$ \ endgroup $
– Ankit singh kushwah
16/12/30在13:06



$ \ begingroup $
抱歉,在这种情况下,旋转是绕轴(显示为圆圈),而在一个轴上旋转,则可以旋转另一轴。结果是在动画中使用法向旋转球体(动画中的球体)时,您看不到这些轴在旋转,因此,如果获得了万向节锁定,则一个轴与另一个轴相同,但是具有法向旋转球体仍然尝试旋转,好像该轴与另一个轴不一样,这意味着它使用怪异的值来达到该旋转。我以为整个帖子都清楚了,而Ankit也对此有所了解,@ trichoplax
$ \ endgroup $
–bram0101
16 Dec 30'14:58



$ \ begingroup $
对我来说,您评论中的额外解释有很大的不同,因此可能值得将其编辑为将来读者的答案(不能保证评论会一直存在)。
$ \ endgroup $
– trichoplax
16年12月30日在15:16

$ \ begingroup $
@ bram0101当然。或者您实际上不能这么抽象地思考,而是将其视为实际的物理三轴万向节
$ \ endgroup $
– joojaa
16年12月30日在22:27

#2 楼

gimbal是一种枢轴支撑,可让您绕一个轴旋转。现在,发生了这样的情况:Euler旋转*就像一组相互连接的3个常平架一样工作,一个旋转建立在下一个(或者如果您倾向于以这种方式建模的话,则是先前的/整个堆栈)。



图像1:旋转就像一个万向节。在物理3轴万向节结构中使用yxz旋转(z =蓝色,x =红色和y =绿色)进行建模。

转动2个或3个连续的万向架并将它们对准一个平面时,会发生gimbal lock。您成功擦除了一个方向,因为两个角度都在同一方向上进行操作。 br唯一的出路是放松狭窄。尽管这是锁,但由于旋转的可能性要比锁本身早,所以出现了问题。思考问题并继续生活。他们只是得出欧拉角有些破损的结论。这也是发生很多误会的地方,因此值得调查此事,而不是引起万向节锁定的原因。在真实的物理万向节中,这是给定的-您别无选择。在计算机图形学中,您还有许多其他选择,包括归一化矩阵,轴角或四元数插值。与3D图形相比,万向节锁对控制系统的设计具有更大的影响。例如,这就是为什么机械工程师在万向节锁定方面会有很大不同的原因。

您不必放弃使用欧拉角来摆脱万向节锁定,只需停止对欧拉角内插值即可。当然,这意味着您现在不再可以通过直接操作其中一个通道来驱动旋转。但是,只要同时键入3个角度,就不会有问题,并且可以在内部将插值目标转换为问题较少的对象。

在大多数情况下,使用欧拉角只是更直观的思考。确实,欧拉从来没有声称对插值有好处,而只是可以对所有可能的空间方向建模。因此,欧拉角恰好适合设置定向,就像它们本来打算那样。顺便说一下,欧拉角还具有能够对多转弯旋转进行建模的优点,这对于其他表示形式不会发生。

问题以及如何规避它们

问题是,在欧拉角空间内插值通常是个坏主意,并且会在您接近真正的万向节锁定之前影响您的方式。因此,当您在单个万向架转弯时接近70-80度角时,NASA月球轨道器会警告万向架锁定。因此请注意,人们在谈论万向节锁定时并不一定只谈论实际的锁定条件。甚至更糟的是,有人将所有旋转问题归咎于万向节锁定。

只有当您首先旋转一个角度而在其他两个旋转中旋转一个浅角度时,欧拉旋转才是安全的,这是很普遍的。这对于描述商用客机,汽车等的运动效果很好。但是对于喷气战斗机或杂技飞机进行复杂的空中机动而言,效果却不那么理想。发生的情况是旋转开始相互干扰,您会产生奇怪的摆动,而不是直接从一个位置移动到另一个位置。

要解决浅层情况下的摆动问题,只需交换旋转顺序,以便将大旋转应用于其他旋转。如果需要使用更复杂的旋转,则可以切换到其他插值方法,或者向万向节添加更多旋转链接(这对于无法及时进行切换的情况是一个很好的权宜之计)。


*准确地说,大多数时候人们实际上并不使用欧拉角,而是使用泰特-布莱恩角。只有Euler坚持要重复同一条轴,几乎是同一回事,这不是很重要的区别,但是很高兴知道您是否曾与学者讲话。等式没关系。

评论


$ \ begingroup $
最后有人说万向节锁定不是由于欧拉角。说四元数不受万向节锁定的影响是愚蠢的,因为当您用它们表达旋转序列(或与此有关的旋转矩阵)时,您会遇到相同的确切问题(因为两种表示都以欧拉角表示)。是从一个方向到另一个方向进行球面插值的能力是正确的。
$ \ endgroup $
–路卡
19年11月8日在7:58