万向节死锁(Gimbal Lock)

  网上也有不少关于万向节死锁的文章,但写的都比较繁琐,这个问题只需知道个概念即可。

  在机器人学中这个问题一般被称为动力学奇点(Kinematic singularity)。如图1,可以看到连接坐标轴的有三个旋转关节,旋转关节1是绕X6轴旋转的,旋转关节2是绕Y6轴旋转的,旋转关节3是绕Z6轴旋转的。我们现在可以将三个旋转关节看成一个整体,相当于手腕,因为手腕也就是三个自由度。那么为什么把这个称为动力学奇点呢?我们做个小小的变化,我们将整个结构绕Y6轴向外旋转90度。这个时候旋转关节1旋转关节2是在一条直线上的,X6Z6是重合的。这就出现状况了,因为我们失去了一个自由度,我们这个时候只能绕X6轴或者Y6轴旋转,Z6轴“消失”了。

图1

  下面介绍图形学中的情况。如图2,我们先将坐标系绕z轴旋转30度,然后绕y轴旋转90度,然后绕x轴旋转40度(方向图中都有标识),最终得到最右边的红色坐标。我们把整个过程记为(30,90,-40)。然后我们可以发现其实我们只要绕z轴旋转70度,然后再绕y轴旋转90度,也能达到最后边的效果。我们把这个过程记为(70,90,0)。那么为什么(30,90,-40)=(70,90,0)?这个看起来只是一个位置的两种途径,并没有太大的问题。但是细心的人可以发现,这其实跟上面的机器人学中的动力学奇点是一样。本来我用三个自由度完成的旋转用两个自由度就可以完成了。追其根本,就是因为我们旋转了一个90度,让x轴和z轴重合了,导致自由度“消失”了。这就是万向节死锁问题。这个问题的是不可避免的,一个较好的办法就是用四元数代替欧拉角

图2

时间: 2024-10-17 13:30:01

万向节死锁(Gimbal Lock)的相关文章

欧拉角万向节死锁与四元数的相关资料

欧拉角和四元数都可以用来描述物体的姿态.欧拉角的万向节死锁理解稍微奇怪.四元数原理的理解较为复杂.欧拉角和四元数之间可以做转换. 这里收集了若干资料已做备忘. 欧拉角: 1. 欧拉角基本概念 2.欧拉角的万向节死锁(万向节死锁的理解,不错) 3.万向节死锁视频讲解(万向节死锁的视频讲解,老外) 4. 关于万向节死锁(Gimbal Lock)(万向节死锁的一个解释,还好) 5. 万向节死锁实验讲解视频(老外很用心去解释死锁的概念) 四元数资料: 1. 彻底搞懂四元数(这里有四元数的理解,旋转矩阵,

【Unity编程】欧拉角与万向节死锁(图文版)

万向节死锁(Gimbal Lock)问题 上文中曾经说过,欧拉旋转的顺规和轴向定义,自然造就了"万向节死锁"问题.本文主要来探索它自然形成的原因. 陀螺仪 首先,我们来了解Gimbal 究竟是个什么玩意儿.下面来自维基百科中关于Gimbal的一段引述: 平衡环架(英语:Gimbal)为一具有枢纽的装置,使得一物体能以单一轴旋转.由彼此垂直的枢纽轴所组成的一组三只平衡环架,则可使架在最内的环架的物体维持旋转轴不变,而应用在船上的陀螺仪.罗盘.饮料杯架等用途上,而不受船体因波浪上下震动.船

gimbal lock 视频解释

gimbal lock 视频解释,布布扣,bubuko.com

事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务

其实所有的死锁最深层的原因就是一个:资源竞争 表现一:    一个用户A 访问表A(锁住了表A),然后又访问表B    另一个用户B 访问表B(锁住了表B),然后企图访问表A 这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了    同样用户B要等用户A释放表A才能继续这就死锁了解决方法:    这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法    仔细分析你程序的逻辑,    1:尽量避免同时锁定两个资源    2:

blender 万向坐标轴, 欧拉角 , 3d软件的实际坐标系统 , 陀螺仪做为坐标轴 ,万向节死锁的解释

https://www.cnblogs.com/delphi-xe5/p/12340038.html https://www.cnblogs.com/delphi-xe5/p/12340039.html https://www.cnblogs.com/delphi-xe5/p/12340053.html https://www.cnblogs.com/psklf/p/5656938.html 参考上面 四个资料 .总结自己的理解 1.  欧拉角  分 静态  和动态.  静态就是 旋转的时候坐标

C#中多线程的死锁(Dead Lock)问题

在讲多线程死锁之前先看生活中的一个例子,这样更方便立即C#中的死锁. 小明和小红是电子信息专业班上的同班同学,他们在大四上学期的时候选的是同一个导师的同一个题目作为毕业论文.在写论文的过程中都要查询<模拟电子技术(上册)>和<模拟电子技术(下册)>这两本资料,这两本书在图书版可以借阅.现在小明借到了<上册>,而小红借到了<下册>,然后他们各自开始写自己的论文.一个星期后,小明发现他还需要查看<下册>的资料同时配合<上册>才能继续论文的

java多线程(死锁,lock接口,等待唤醒机制)

一.Lock接口 常用方法 Lock提供了一个更加面对对象的锁,在该锁中提供了更多的操作锁的功能. 使用Lock接口,以及其中的lock()方法和unlock()方法替代同步,对电影院卖票案例中Ticket类进行如下代码修改: public class Ticket implements Runnable { //共100票 int ticket = 100; //创建Lock锁对象 Lock ck = new ReentrantLock(); @Override public void run

欧拉角之万向节死锁

最近阅读<3D数学基础:图形与游戏开发>,看到欧拉角一节,对万向锁感到难以理解.先看一段视频. 欧拉旋转 什么是欧拉角?欧拉角是一种描述物体旋转的方式,使用三个值表示物体在三个互相垂直的轴上的旋转.这里的三个轴是任意相互垂直的三个轴,旋转顺序也是随意的.我们可以按照一定的约定来对物体进行欧拉角旋转.此处使用heading(沿Y轴旋转)—pitch(X轴)—bank(Z轴)的旋转顺序,旋转正方向为从坐标轴正方向望去的顺时针方向. 什么是别名?用欧拉角来表示方位(orientation)的缺点是指

并发错误:事务(进程 ID )与另一个进程已被死锁在 lock 资源上,且该事务已被选作死锁牺牲品

这个是并发情况下导致的数据库事务错误,先介绍下背景. 背景 springboot+springmvc+sqlserver+mybatis 一个controller里有五六个接口,这些接口都用到了spring的事务管理,这些接口单个调用的时候都很正常,当我模拟几十个并发请求这些接口的时候,总会有一两次的mybatis的持久化操作会出错,具体错误: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### E