前情提要
昨天想突发奇想想去理解之前一直没搞懂的万向节锁,网上看了许多资料说实话没看懂,可能是理论和实际脱离太多了。就连万向节和经常用来演示的平衡环架是啥我都不知道。经过看了不少视频之后才勉强知道了万向节锁会导致什么问题。
首先我们需要知道几个结论:
- 只有动态欧拉角会导致万向节锁
- 欧拉角只是表示一个状态,而不是一个旋转的过程
- 即使存在万向节锁,但用欧拉角表示的某一状态是不会出错的,而是在连续的规划中出问题
- 万向节锁名字有误导性,并不是被锁住了动不了,而是需要通过一个奇怪方式而非线性移动,就好像有隐形的约束一样
理解过程
根据视频[1]所示,此时灰色箭头无法直接移动至虚影处。
![](/i/l/?n=23&i=blog/2639566/202301/2639566-20230101132344274-979008195.jpg)
但是仅仅通过这个平衡环架我还是无法将其和欧拉角联系起来。于是我自己动手做了一个小实验:
![](/i/l/?n=23&i=blog/2639566/202301/2639566-20230101152137384-1183608321.jpg)
假设初始状态如手画图所示,那么很明显上图中就是第一步,绕 x 轴转90度。想要到虚影处即按照我的直观理解绕动轴 y 转90度,这步和平衡环架没有任何联系,就是常规的动态欧拉角。将这两步融合一下就可以得到 xyz 欧拉角90 90 0,而 yxz 欧拉角则是动画中的顺序。我通过欧拉角转换网站[2]进行试验,先进行第一步如下图所示,只转一个轴和顺序不会造成任何影响。
第二步转90度有点大,我们进行拆分即先转个1度,效果是一样的。接下来就是见证奇迹的时刻!
我们可以惊奇地发现 y 和 z 轴突变成了90度,这个过程不是渐变的,这就是奇异点也就是万向节锁。同理也就是说在第一步之后的位姿是没办法直接以线性的过程来到第二步的位姿,轴的数值出现了突变,这造成的结果就是非线性的,在规划的过程中欧拉角只是状态而非旋转的过程也就是说突变的轴也需要从0到90,最终出现不合常理的姿态。如下图所示。
![](/i/l/?n=23&i=blog/2639566/202301/2639566-20230101144502197-1758931972.jpg)
同时还可以从一些动画软件中窥得类似的情况[3]。
至此我就彻底懂了之前对万向节锁 gimbal lock 的疑惑。
拓展
在操作不同顺序欧拉角的过程中,我还发现了一个现象,先上图。
这里调整 z 轴,yxz 顺序的欧拉角没有发生突变。经过反复调整之后我发现了,中间轴转90度进入万向节锁状态之后,需要再调整欧拉角顺序第一位的轴才会触发。也即之前 yxz 例子中必须要调整 y 轴。这也是很正常的逻辑,因为调整 z 轴,两种算法逻辑一样,所以这就是顺序造成的问题。
以后再说
但是我还是无法将平衡环架和欧拉角联系起来,可能缺少实际运用,光靠脑子想是不行的。同时在网上看资料的过程中,我还有一些因为数学基础太差,没学过,所以不太懂的东西:因为SO(3)同胚于RP3, 与S^3不同胚。之后有机会再学吧,哈哈
标签:gimbal,欧拉角,lock,万向节,90,环架 From: https://www.cnblogs.com/DimmerTyrant/p/17017989.html