`
dengbaoleng
  • 浏览: 1151567 次
文章分类
社区版块
存档分类
最新评论

Gimbal Lock()

 
阅读更多

原文链接:http://www.cnblogs.com/soroman/archive/2006/10/12/526163.html

http://blog.donews.com/wanderpoet/archive/2005/07/04/453608.aspx
看到一篇关于Gimbal Lock的E文,解释得挺清楚的,翻译如下:

Gimbal Lock

What's Gimbal Lock?

Gimbal lock is the phenomenon of two rotational axis of an object pointing in the same direction. Actually, if two axis of the object become aligned, then we say that there's a gimbal lock. In other words, a rotation in one axis could 'override' a rotation in another, making you lose adegree of freedom.

万向节锁是什么

万象节锁是指物体的两个旋转轴指向同一个方向。实际上,当两个旋转轴平行时,我们就说万向节锁现象发生了,换句话说,绕一个轴旋转可能会覆盖住另一个轴的旋转,从而失去一维自由度

How Gimbal Lock occurred?

Generally speaking, it occurred when you rotate the object which only use Eular Angles to denote it. The reason for this is that Eular angles evaluate each axis independently in a set order. Let's see a certain scene. First the object travels down the X axis. When that operation is complete it then travels down the Y axis, and finally the Z axis. The problem with gimbal lock occurs when you rotate the object down the Y axis, say 90 degrees. Since the X component has already been evaluated it doesn't get carried along with the other two axis. What winds up happening is the X and Z axis get pointeddown the same axis.

通常说来,万向节锁发生在使用Eular Angles(欧拉角)的旋转操作中,原因是Eular Angles按照一定的顺序依次独立地绕轴旋转。让我们想象一个具体的旋转场景,首先物体先绕转X轴旋转,然后再绕Y轴,最后绕Z轴选择,从而完成一个旋转操作(飘飘白云译注:实际是想绕某一个轴旋转,然而Eular Angle将这个旋转分成三个独立的步骤进行),当你绕Y轴旋转90度之后万向节锁的问题就出现了,因为X轴已经被求值了,它不再随同其他两个轴旋转,这样X轴与Z轴就指向同一个方向(它们相当于同一个轴了)。

Here'sa pic showing what happened:万向节锁现象图:




Maybe it's a bit difficult to understand. OK, let me show you a real sence.

可能有点不好理解。让我们看个现实中的场景。

Say that we have a telescope and a tripod to put the telescope on. The tripod is put on the ground. The top of the tripod holding the telescope is leveled with the horizon (reference plane) so that a vertical rotation axis (we call it X axis) is perfectly vertical to the ground plane. The telescope can then be rotated around 360 degrees in X axis so that it can scan the horizon in all the directions of the compass. Zero degrees azimuth is usually set toward a heading of true north. A second horizontal axis parallel to the ground plane (we call it Y axis), enables the telescope to be rotated in elevation upward or downward from the horizon. The horizon is usually set at zero degrees and the telescope can be rotated +90 degrees upward in elevation so that it is looking straight up toward the zenith or rotated -90 degrees downward so that it is looking vertically at the ground plane.

假如我们有一个望远镜和一个用来放望远镜的三脚架,(我们将)三脚架放在地面上,使支撑望远镜的三脚架的顶部是平行于地平面(参考平面)的,以便使得竖向的旋转轴(记为x轴)是完全地垂直于地平面的。现在,我们就可以将望远镜饶x轴旋转360度,从而观察(以望远镜为中心的)水平包围圈的所有方向。通常将正北朝向方位角度记为0度方位角。第二个坐标轴,即平行于地平面的横向的坐标轴(记为y轴)使得望远镜可以饶着它上下旋转,通常将地平面朝向的仰角记为0度,这样,望远镜可以向上仰+90度指向天顶,或者向下-90度指向脚底。

OK, that's all we needed. every point in the sky (and the ground) can be referenced by only ONE unique pair of X and Y readings. For example an X of 90 degrees and Y of 45 degrees specifies a point exactly due east of the telescope and in a skyward direction half way up toward the zenith.

好了,万事俱备。现在,天空中(包括地面上)的每个点只需要唯一的一对x和y度数就可以确定。比如x=90度,y=45度指向的点是位于正东方向的半天空上。

Now let me show you how the gimal lock occurred. We detect a high flying aircraft, near the horizon, due east from the telescope (X = 90 degrees, Y = 10 degrees) and we follow it (track it) as it comes directly toward us. The X angle stays at 90 degrees and the Y angle slowly increases. As the aircraft comes closer the Y angle increases more rapidly and just as the aircraft reaches an Y of 90 degrees (exactly overhead), it makes a sharp turn due south. We find that we cannot quickly move the telescope toward the south because the Y angle is exactly +90 degrees so we loose sight (loose track) of the aircraft . We have GIMBAL LOCK!

现在,看看万向节死锁是怎么发生的。一次,我们探测到有一个飞行器贴地飞行,位于望远镜的正东方向(x=90度,y=10度),朝着我们直飞过来,我们跟踪它。飞行器飞行方向是保持x轴角度90度不变,而y向的角度在慢慢增大。随着飞行器的临近,y轴角增长的越来越快且当y向的角度达到90度时(即将超越),突然它急转弯朝南飞去。这时,我们发现我们不能将望远镜朝向南方,因为此时y向已经是90度,造成我们失去跟踪目标。这就是万向节死锁!

(译注:为什么说不能将望远镜朝向南方呢,让我们看看坐标变化,从开始的(x=90度,y=10度)到(x=90度,y=90度),这个过程没有问题,望远镜慢慢转动跟踪飞行器。当飞行器到达(x=90度,y=90度)后,坐标突然变成(x=180度,y=90度)(因为朝南),x由90突变成180度,所以望远镜需要饶垂直轴向x轴旋转180-90=90度以便追上飞行器,但此时,望远镜已经是平行于x轴,我们知道饶平行于自身的中轴线的的旋转改变不了朝向,就象拧螺丝一样,螺丝头的指向不变。所以望远镜的指向还是天顶。而后由于飞行器飞远,坐标变成(x=180度,y<90度)时,y向角减小,望远镜只能又转回到正东指向,望'器'兴叹。这说明用x,y旋转角(又称欧拉角)来定向物体有时并不能按照你想像的那样工作,象上面的例子中从(x=90度,y=10度)到(x=90度,y=90度),按照欧拉角旋转确实可以正确地定向,但从(x=90度,y=90度)到(x=180度,y=90度),再到(x=180度,y<90度),按照欧拉角旋转后的定向并非正确。)

It's a example of 2D coordinate frame. It's very similar in 3D frame. We say that you have a vector which is parellel to the X axis. And we rotate it around Y axis so that the vector is parellel to the Z axis. Then we find that any rotations around Z axis will have no effect on the vector. We say that we have a GIMBAL LOCK

上面是2维坐标系中的例子,同样,对于3维的也一样。比如有一个平行于x轴的向量,我们先将它饶y旋转直到它平行于z轴,这时,我们会发现任何饶z的旋转都改变不了向量的方向,即万向节死锁。


3维的万向节死锁情况分析见:http://www.cnblogs.com/soroman/archive/2008/03/24/1118996.html

分享到:
评论

相关推荐

    bonus_gimbal_lock.pdf

    标题和描述中提到的知识点主要涉及三维数学中的欧拉角表示法、万向锁(Gimbal Lock)现象,以及旋转矩阵的基本概念。以下是对这些知识点的详细说明: 1. 三维数学基础和右手坐标系: 三维数学是研究三维空间内点、...

    GimbalLock:在Unity3d上演示万向节锁定现象

    在提供的压缩包文件"**GimbalLock-master**"中,可能包含了Unity3D项目,演示了万向节锁定的现象以及如何使用上述策略来解决。通过运行和分析这个项目,你可以更直观地理解万向节锁定,并学习如何在实际开发中避免它...

    ARCBall图像工具

    3. 避免 gimbal lock:通过使用旋转矩阵或四元数,ARCBall有效地避免了在多轴旋转中可能出现的 gimbal lock 问题。 在实际应用中,ARCBall的实现通常需要结合图形库,如OpenGL或DirectX,通过它们提供的API来实现...

    常用姿态解算算法MATLAB仿真与C代码.zip

    Euler角是表示三维空间中刚体转动的常见方式,通常有多种顺序(如Z-Y-X、Y-X-Z等),但存在 gimbal lock(万向节锁)问题。四元数则是一种更优的表示方法,没有 gimbal lock 并且运算效率高,但在理解和实现上相对...

    基于单位四元数的机器人多姿态可控的插补算法.pdf

    在众多表示物体姿态的方法中,包括旋转矩阵、欧拉角和四元数,四元数因为适合姿态间的线性插补且避免了“Gimbal Lock”问题而得到广泛应用。四元数是一种超复数,可以通过其物理意义将旋转在四维空间中表示,从而...

    欧拉角求旋转矩阵

    通常需要根据特定的欧拉角顺序(如ZYX、XYZ等)和范围限制(避免 gimbal lock,即三轴交叉锁定问题)来确定唯一解。一种常见的方法是使用反正切函数来解三个旋转角: - 首先,通过计算矩阵的对角线元素和非对角线...

    机器人奇异点.doc

    在Gimbal Lock中,由于相邻旋转轴之间的相对位置变化,可能导致一个或多个轴的自由度暂时消失。在飞机的陀螺仪中,当pitch角达到90度时,两个轴会重合,使得系统从三维运动变为二维运动。类似地,机器人在特定配置下...

    Raspberry树莓派pico读取mpu6050+四元数、一阶互补滤波

    在处理IMU数据时,四元数能避免 gimbal lock(万向节锁)问题,保持连续平滑的姿态表示。在`q4.py`中,我们可能会看到以下关键步骤: 1. 将陀螺仪和加速度计的原始数据转换为欧拉角。 2. 使用欧拉角更新四元数。 3....

    四元数与三维旋转1

    轴角法避免了欧拉角可能导致的 gimbal lock 问题,但其使用了四个自由度,其中一个用于旋转轴的长度,实际上这个长度在表示旋转时并不重要。因此,通常我们使用单位向量表示旋转轴。Rodrigues' Rotation Formula 是...

    unity 面试题目以及答案

    unity 面试题目以及答案 里面包括 1.C#语言 2.unity编辑器基础 3.unity脚本基础 4.unity性能优化 5.服务器和数据库 6.数据结构和算法 7.设计模式 ...四元数不会有欧拉角存在的 gimbal lock 问题[万向节

    三维旋转-四元数-万向锁介绍.zip

    "万向锁"(Gimbal Lock)是其中一个关键的概念,它出现在使用传统欧拉角进行连续旋转时。当一个轴线旋转到与另一个轴线重合时,会导致原本独立的旋转轴失去自由度,造成旋转的不连续性和计算错误。在"万向锁" bonus_...

    从旋转矩阵中求解欧拉角

    6. **处理 gimbal lock**:需要注意的是,当β接近90度时,会出现所谓的“万向节锁”(gimbal lock),此时绕Y轴的旋转无法区分,导致欧拉角丢失了一个自由度。在编程实现时,需要特别处理这种情况,可能需要检查并...

    Quaternions, Interpolation and Animation.pdf

    相对于旋转矩阵,四元数具有占用存储空间少、避免万向锁问题(Gimbal Lock)等优点。 接着,报告详细讨论了两种重要的插值方法:球面线性插值(Slerp)和基于四元数的二次插值(Squad)。Slerp保证了在插值过程中...

    旋转矩阵转换为欧拉角

    4. **处理特殊情况**:某些欧拉角组合可能导致“万向节死锁”或“ gimbal lock”,即某些轴的旋转消失了,这需要特别处理。 5. **返回欧拉角**:将计算出的三个角度以向量形式返回。 以下是一个简单的MATLAB代码...

    A linear Kalman Filter for MARG Orientation Estimation Using the Algebratic Quat.pdf

    四元数是一种在三维空间中表示旋转的有效数学工具,它比欧几里得坐标或欧拉角更具优势,因为它避免了万向节死锁(gimbal lock)问题。 论文首先阐述了加速计和磁力计观测值的预处理过程,采用一种新颖的外部算法,...

    旋转矩阵、欧拉角、四元数

    欧拉角直观易懂,但在处理复杂的连续旋转时同样会遇到万向锁问题,比如“ gimbal lock”。 四元数是一种扩展的复数形式,包含一个实部和三个虚部。它们解决了旋转矩阵和欧拉角的万向锁问题,可以表示三维空间中的...

    MATLAB工具箱-MATLAB四元数工具箱.rar

    四元数是一种数学概念,通常用于表示3D空间中的旋转,因为它们在计算上比传统的欧拉角或旋转矩阵更有效率且避免了万向节死锁(gimbal lock)的问题。在本MATLAB工具箱中,你可以找到各种与四元数相关的函数,用于...

    OpenGL.rar_arcball_opengl_opengl 场景_场景管理_资料管理

    Arcball的数学基础是四元数,它可以避免常见的旋转问题,如 gimbal lock(万向节锁)。 3. **OpenGL 场景管理**:在3D图形编程中,场景管理涉及如何组织和操作图形对象(如模型、相机、光源等)。有效的场景管理...

    基于GPS_MEMS惯性传感器的消防员室内定位研究.pdf

    四元数是一种数学工具,用于处理三维空间中的旋转,可以有效避免计算过程中的 gimbal lock(万向节锁定)问题。同时,结合步幅检测算法,可以识别消防员的行走步态,进一步优化定位精度。零速修正算法则用于校正静止...

    adjoint.zip_clearv52_matlab_occurkpe_quaternion_四元数编程

    在MATLAB环境中,四元数的运算和编程可以帮助我们更高效地处理三维旋转问题,避免了欧拉角导致的万向节死锁(Gimbal Lock)现象。 "adjoint.zip_clearv52_matlab_occurkpe_quaternion_四元数编程"这个压缩包文件...

Global site tag (gtag.js) - Google Analytics