精华内容
下载资源
问答
  • 万向节死锁

    2021-04-20 16:50:38
    远古版本unity存在的一个问题,2019的版本x轴已经不允许转动到90度和270度了,这样也就帮我们直接规避了万向节死锁的问题,这里只是实验说明万向节死锁到底是怎么一回事 在一个空场景创建一个cube,分别转动x,y,z轴...

    远古版本unity存在的一个问题,2019的版本x轴已经不允许转动到90度和270度了,这样也就帮我们直接规避了万向节死锁的问题,这里只是实验说明万向节死锁到底是怎么一回事
    在这里插入图片描述
    在一个空场景创建一个cube,分别转动x,y,z轴坐标,发现cube绕着这三个坐标正常的旋转,接下来把x坐标设置成90,再分别旋转y,z坐标,发现转动y轴或者z轴结果是一样的,也就是y轴和z轴处于同一平面了,也就是很多文章说的丢失了一个维度,万向节死锁了

    展开全文
  • 万向节死锁 Krasjet

    2019-01-02 15:38:36
    一篇逻辑清晰的介绍万向节死锁到底是个什么玩意的文章,网上一些文章介绍万向节死锁不是那么清楚,甚至有些图有误导性,建议想了解万向节死锁的同学看看这篇文章,将的比较清楚。
  • Unity☞万向节死锁

    2020-02-20 16:54:10
    Unity☞万向节死锁,如何解决造成万向节死锁的明显表现造成万向节死锁的原因如何解决万向节死锁 造成万向节死锁的明显表现 在代码脚本中,让物体沿着Y轴正方向移动,实际情况确是沿着Z轴正方向移动 在代码脚本中,让...

    造成万向节死锁的明显表现

    在代码脚本中,让物体沿着Y轴正方向移动,实际情况确是沿着Z轴正方向移动
    在代码脚本中,让物体沿着Z轴正方向移动,实际情况确是沿着Y轴正方向移动

    造成万向节死锁的原因

    一般是场景中该物体的x轴向角度,为90或者-90(这里的角度可以是奇数倍)

    如何解决万向节死锁

    一般是在该GameObjectA下建一个空物体,将该空物体拖拽到与GameObjectA同层级下,将X轴向的角度调整为0,最后把GameObjectA拖拽到空物体下,运动时,让这个空物体运动,即可避免万向节死锁

    展开全文
  • 万向节死锁问题

    千次阅读 2017-10-07 00:05:51
    万向节死锁问题个人理解

    欧拉角

    欧拉角是用于一种处理空间中物体位姿的数学模型。

    欧拉角提供一种非常直观的方式用来描述旋转——它使用3个分离的转角,把一个旋转分解成三次绕不同轴地旋转。

    ——《视觉slam十四讲》

    欧拉角的描述方式多种多样,我习惯于用yaw(偏航角),roll(横滚角),pitch(俯仰角)也就是Z-Y-X(右手坐标系)地旋转模式来进行描述。

    静态欧拉角

    万向节模型就是指一个用这种描述方式旋转的一个模型。三个有同轴的圆环,立体组合在一起,如果将一个一个箭头放置在三个轴的交点处,那么当这个箭头以不同的圆环的轴心为依靠,进行旋转的时候,这个箭头就可以指向空间中的任意方向,这种情况被称为静态欧拉角。在这种情景下,箭头是一个静止的物体,不会移动,我们需要关注的是它的指向,因此不会存在死锁问题。

    动态欧拉角

    所谓动态欧拉角就是指,我们需要关注,这个箭头的移动轨迹。也就是我们的关注点是箭头如何从一个角度移动到另一个角度,我们需要让箭头从一个指定角度移动到另一个角度,这个移动轨迹应当是直线,或者说是非欧几何意义下的直线,总之,如果我们将球面投影到二维z平面上,两个球坐标下指向的角度必然分别在z平面上分别代表两个点。而这个轨迹的投影在z平面上必须是直线(按照我的理解)。换句话说,两个角度之间移动的轨迹的形状都是相同的,是可预料的。但是在欧拉角下,是不可能的,当三个圆环中的两个重合时,也就是最外侧的两个圆环处于同一平面时,想要进行以第三个环的中心为轴进行旋转的操作是不可实现的,必须将这个旋转分解为三次不同的旋转,如果将这三个旋转叠加起来就会看到,从一个角度到另一个角度的旋转的轨迹变成了一条曲线,这种情况在动态环境下是不可接受的。这就是著名的万向节死锁(Gimbal lock)问题,当出现了外两圈重合的情况时,向某一特定方向的直接旋转就不可实现。

    下面是一个youku上的视频说的很清楚

    万向节死锁解析

    展开全文
  • 欧拉角与万向节死锁

    2019-09-17 15:28:00
    万向节死锁(Gimbal Lock)问题 上文中曾经说过,欧拉旋转的顺规和轴向定义,自然造就了“万向节死锁”问题。本文主要来探索它自然形成的原因。 陀螺仪 首先,我们来了解Gimbal 究竟是个什么玩意儿。下面来自维基...

    转载请保留博主链接:http://blog.csdn.net/andrewfan

    万向节死锁(Gimbal Lock)问题

    上文中曾经说过,欧拉旋转的顺规和轴向定义,自然造就了“万向节死锁”问题。本文主要来探索它自然形成的原因。

    陀螺仪

    首先,我们来了解Gimbal 究竟是个什么玩意儿。下面来自维基百科中关于Gimbal的一段引述:


    平衡环架(英语:Gimbal)为一具有枢纽的装置,使得一物体能以单一轴旋转。由彼此垂直的枢纽轴所组成的一组三只平衡环架,则可使架在最内的环架的物体维持旋转轴不变,而应用在船上的陀螺仪、罗盘、饮料杯架等用途上,而不受船体因波浪上下震动、船身转向的影响。


    Gimbal

    上图就是一个Gimbal装置了,它是一个陀螺仪。中间有一根竖轴,穿过一个金属圆盘。金属圆盘称为转子,竖轴称为旋转轴。转子用金属制成,应该是了增加质量,从而增大惯性。竖轴外侧是三层嵌套的圆环,它们互相交叉,带来了三个方向自由度的旋转。
    看着不停转来转去,有点晕,接下来看两个静态的。这两张图来自百度百科。

    陀螺仪中文注释: 陀螺仪

    其中Gimbal只代表陀螺仪装置中的平衡环,显然维基百科上将它解释成“平衡环架”更为合理。

    Pitch、Yaw、Roll

    在解释陀螺仪的工作原理之前,我先介绍一些转动的术语。在飞行器的航行中,进行XYZ三个方向旋转的旋转有专业的术语,见下图:

    Pitch、Yaw、Roll

    沿着机身右方轴(Unity中的+X)进行旋转,称为pitch,中文叫俯仰
    沿着机头上方轴(Unity中的+Y)进行旋转,称为Yaw,中文叫偏航
    沿着机头前方轴(Unity中的+Z)进行旋转,称为Roll,中文叫桶滚

    陀螺仪的工作原理

    我们知道陀螺仪使用来测量平衡和转速的工具,在载体高速转动的时候,陀螺仪始终要通过自我调节,使得转子保持原有的平衡,这一点是如何做到的?带着这个问题,我们来看一下这个古老而又神秘的装置的工作原理。

    为了解释清楚问题,我自己画了一个简单的陀螺仪示意图。(金属圆盘我就省略了,丑点儿也就别管了。。)
    陀螺仪示意图
    这里,我把三个Gimbal环用不同的颜色做了标记,底部三个轴向,RGB分别对应XYZ。
    假设现在这个陀螺仪被放在一艘船上,船头的方向沿着+Z轴,也就是右前方。

    • 现在假设,船体发生了摇晃,是沿着前方进行旋转的摇晃,也就是桶滚。由于转子和旋转轴具有较大的惯性,只要没有直接施加扭矩,就会保持原有的姿态。由于上图中绿色的活动的连接头处是可以灵活转动的,此时将发生相对旋转,从而出现以下的情形:
      桶滚平衡

    • 再次假设,船体发生了pitch摇晃,也就是俯仰。同样,由于存在相应方向的可以相对旋转的连接头(红色连接头),转子和旋转轴将仍然保持平衡,如下图:
      俯仰平衡

    • 最后假设,船体发生了yaw摇晃,也就是偏航,此时船体在发生水平旋转。相对旋转发生在蓝色连接头。如下图:
      偏航平衡

    最终,在船体发生Pitch、Yaw、Roll的情况下,陀螺仪都可以通过自身的调节,而让转子和旋转轴保持平衡。

    陀螺仪中的万向节死锁

    现在看起来,这个陀螺仪一切正常,在船体发生任意方向摇晃都可以通过自身调节来应对。然而,真的是这样吗?

    假如,船体发生了剧烈的变化,此时船首仰起了90度(这是要翻船的节奏。。。。),此时的陀螺仪调节状态如下图:
    死锁开始

    此时,船体再次发生转动,沿着当前世界坐标的+Z轴(蓝色轴,应该正指向船底)进行转动,那么来看看发生了什么情况。

    死锁的陀螺仪

    现在,转子不平衡了,陀螺仪的三板斧不起作用了。它失去了自身的调节能力。那么这是为什么呢?
    之前陀螺仪之所以能通过自身调节,保持平衡,是因为存在可以相对旋转的连接头。在这种情况下,已经不存在可以相对旋转的连接头了。
    那么连接头呢?去了哪里?显然,它还是在那里,只不过是,连接头可以旋转的相对方向不是现在需要的按着+Z轴方向。从上图中,我们清楚地看到:

    • 红色连接头:可以给予一个相对俯仰的自由度。
    • 绿色连接头:可以给予一个相对偏航的自由度。
    • 蓝色连接头:可以给予一个相对偏航的自由度。

    没错,三个连接头,提供的自由度只对应了俯仰和偏航两个自由度,桶滚自由度丢失了。这就是陀螺仪上的“万向节死锁”问题。

    用小程序来重现万向节死锁问题

    首先,预设一下接下来的欧拉角变化顺序。见下图:
    预设欧拉旋转

    上图中,红色框内的部分的列表,记录了接下来欧拉角的增长变化过程。即它会从(0,0,0)变化到(90,0,0),再变化到(90,90,0),再变化到(90,180,0),再变化到(90,180,90),再变化到(90,180,180)。下图是变化的过程演示。

    YZ轴死锁

    现在可以看到:

    • 当先执行X轴旋转90度,此时在执行Pitch(俯仰)变化。
    • 再在Y轴进行变化0-180度,此时在执行相对自身的Roll(桶滚)变化。
    • 再在Z轴进行变化0-180度,此时仍在执行相对自身的Roll(桶滚)变化。

    这里所说的俯仰、桶滚、偏航都是相对自己局部坐标系的。这与上述的陀螺仪中出现的问题是一样的,万向节死锁。也就是尽管欧拉角在XYZ三个轴向进行进动(持续增长或者减少),但是影响最终的结果,只对应了两个轴向。

    死锁的过程解析

    《Unity中欧拉旋转》一文中我曾提到,是欧拉角顺规和轴向的定义方式,造就了“万向节死锁”问题的自然形成。通过上述的例子,这里作个详细解释。

    首先我们知道,由于Unity中欧拉旋转的顺规的定义,围绕Z轴的进动最先执行,所以,Z轴是“严格保护”的一个轴,就是说,当先沿着Z轴进行进动时,无论此时的XY是什么值,最终的结果,围绕Z轴的进动始终造成相对自身执行桶滚变化。
    然而X、Y轴就不同了,我们先不考虑Y轴,假设其一直为0,先说X轴。如果Z轴也是保持为0,那么围绕X轴进动,最终的影响是预期的俯仰变化。如下图:

    YZ为0的X进动

    然而当Z轴为90度时,围绕X轴进动变成了偏航变化,如下图:

    Z先进动90的X进动

    也就是说,欧拉角的X轴进动造成最后的变化结果,受到到了预先执行的Z轴进动的影响,它仍然会造成某个相对自身的轴向的变化,但是结果不唯一;同样,欧拉角的Y轴进动,则受到了Z轴和X轴的影响,结果更加不唯一。

    然而,以上的过程执行,都是严格遵守欧拉角的顺规和轴向定义的。某些时刻,这种不确定的结果,就可能造成某个轴向自由度的丢失。
    就拿下图来说:

    YZ轴死锁

    欧拉角Z轴的进动,最先执行,造成桶滚,这个没问题。
    欧拉角Y轴的进动,最后执行,造成沿着欧拉旋转前的Y轴旋转,这也是根据定义执行。然而现在这种沿着Y轴的旋转,同样也被映射到了物体的桶滚变化。

    总结

    总结来说,欧拉角的“万向节死锁”问题,是由于欧拉旋转定义本身造成的。这种围绕选旋转前固定轴的先Z、再X、再Y的旋转操作,与其最终所预期的三个轴向可以旋转的结果并非一定是一对一的映射。某些情况下是多对一的映射,造成一些旋转自由度的缺失,也就是“死锁”。

    建议

    对于写代码来说,你直接去改变Transform的欧拉角显然是不合适的,通过本文也可以看到,这种结果几乎是不可预测的。但是某些情况下,却是可以预期的,就是你仅仅在一个轴向进动,其它两个轴向保持为0,此时有效,并且直接修改欧拉角的代码效率应该是比较高的。

    展开全文
  • 万向节死锁的简易理解

    千次阅读 2019-04-17 16:49:42
    万向节死锁的图片里,旋转顺序实际是绕自身X、自身Y轴旋转,而后绕基坐标系的Z轴旋转,具体可以看结构,蓝色轴在外部各种转动下依然不动。 这样的话根据左乘右乘的原理。旋转为ZXY,可以理解为分别绕自身Z X Y右...
  • 欧拉角、四元数、万向节死锁现象

    千次阅读 2016-03-24 17:10:07
    万向节死锁
  • 旋转时 Gimbal Lock(通常译为万向锁或者万向节死锁)的产生原因.虽然 这方面的资料很多,但是某些解释可能会让人比较费解(比如 Wikipedia 上那个球型 Gimbal 的动画) ,有时候直接从数学上来理解反而会更直观一 点.和...
  • 万向节死锁分析:
  • 欧拉角 万向节死锁
  • Unity中的万向节死锁

    2020-07-08 22:48:07
    看了一些关于万向节死锁的博客,说一下我的直观理解 概念: 1、unity inspector 面板上的x,y,z的旋转是从(0,0,0)以z->x->y的顺序执行的. 2、实测unity inspector 面板中是以静态欧拉角来进行旋转(为啥...
  • 欧拉角万向节死锁

    2017-12-19 16:43:29
    欧拉角万向节死锁 什么是欧拉角(Eular Angles)? 欧拉角是瑞士数学家莱昂哈德·欧拉(Leonhard Euler)用来描述刚体在三维空间中取向的方法。简单来说,就是任何一个物体的取向,都可以用3个
  • 原文:... 万向节死锁(Gimbal Lock)问题 上文中曾经说过,欧拉旋转的顺规和轴向定义,自然造就了“万向节死锁”问题。本文主要来探索它自然形成的原因。 ...
  • 初识欧拉角与万向节死锁

    千次阅读 2017-09-01 14:42:43
    介绍欧拉角,orientation的概念 unity中的rotation与euler angle的关系 万向节死锁的初步
  • )[+]万向节死锁Gimbal Lock问题陀螺仪PitchYawRoll陀螺仪的工作原理陀螺仪中的万向节死锁用小程序来重现万向节死锁问题死锁的过程解析总结建议 万向节死锁(Gimbal Lock)问题上文中曾经说过,欧拉旋转的顺规和轴向...
  • 欧拉角的万向节死锁理解稍微奇怪。四元数原理的理解较为复杂。欧拉角和四元数之间可以做转换。这里收集了若干资料已做备忘。 万向节死锁(Gimbal Lock):  欧拉角中的万向节死锁(Gimbal Lock)是一个重点和...
  • 万向节死锁(Gimbal Lock)视频
  • 如何脱离数学推导理解欧拉角与万向节死锁 目录如何脱离数学推导理解欧拉角与万向节死锁0、需要提前掌握的知识1、死锁的本质-旋转面重合的成因2、死锁出现将导致什么?-失控3、旋转面逐渐慢慢走向重合,这个过程是...
  • 总结总结来说,欧拉角的“万向节死锁”问题,是由于欧拉旋转定义本身造成的。这种围绕选旋转前固定轴的先Z、再X、再Y的旋转操作,与其最终所预期的三个轴向可以旋转的结果并非一定是一对一的映射。某些情况下是多对...
  • 在学习《3D数学基础:图形与游戏开发》时,又接触到欧拉角的万向节死锁的概念,仔细思考发现自己没太明白。查了很多博客,感觉都没说到点子上,不懂的还是不懂。 下面说一下自己的理解,有不对的地方请指正。 首先...
  • 浅谈欧拉角与万向节死锁 在正文前想说的话 欧拉角旋转与基础的沿单坐标轴逆时针旋转不同,欧拉角主要是解决有关物体朝向(Orientation)的问题,如果沿用传统的构造旋转矩阵的思路来理解欧拉角,会造成很大的困扰...
  • 万向节死锁 gimbal lock

    2016-10-07 16:54:00
    万向节死锁 gimbal lock ,如下图一,把灰色箭头想象成是一架飞机,红,绿蓝三个圈看作是三个外围控制器,外圈带动所有里圈运动,里圈的运动不影响外圈。 1,首先,绕Y轴旋转(旋转绿圈),来确定前进的方向...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 152
精华内容 60
关键字:

万向节死锁