欧拉角和万向节死锁

2023-05-16

一、什么是欧拉角

        欧拉角就是物体绕坐标系三个坐标轴(x, y, z轴)的旋转角度,在这里坐标系可以是世界坐标系,也可以是物体坐标系,旋转顺序也是任意的,可以是xyz,xzy,yxz,zxy,yzx,zyx中的任何一种,这种绕三个轴旋转的方式称为卡尔丹式,或者xyx,yxy,xzx,zxz,zyz,yzy中的任何一种,这种绕两个轴旋转的方式称为欧拉式。

        欧拉角可以看做一个坐标,此坐标都是相对于同一个初始状态即(0,0,0)即物体坐标系和世界坐标系重合,且三角度都是0,从此初试状态开始,按照定义的旋转顺序,按照静态或动态的方式,旋转指定的角度,从而得到最终的状态。

        1.欧拉角给出旋转角度的同时也要给出旋转顺序,顺序不同结果也不同

        2.根据旋转选择的坐标系,可以分为静态和动态:

             a. 静态:即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态。

             b. 动态:即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态。使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题(参见wiki百科:环架锁定)。

        3.航空次序欧拉角,它的旋转次序为Z-Y-X,为动态欧拉角。(6轴传感器用到的欧拉角)

                绕Z轴旋转ψ,代表航向角yaw

                绕Y轴旋转 https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D12/sign=65dc5397003b5bb5bad724fc37d3f4a7/4034970a304e251fd822b6c4a486c9177f3e5330.jpg,代表俯仰角pitch

                绕X轴旋转 https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D14/sign=6557f8e375c6a7efbd26ac22fdfa3e07/c995d143ad4bd113f1b6ea0e59afa40f4bfb0596.jpg,代表滚转角roll

        飞行器的物体坐标系定义如下图:

        转动方式如下图:

        航向角ψ   yaw

        俯仰角https://gss1.bdstatic.com/-vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D12/sign=65dc5397003b5bb5bad724fc37d3f4a7/4034970a304e251fd822b6c4a486c9177f3e5330.jpg    pitch

        滚转角 https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D14/sign=6557f8e375c6a7efbd26ac22fdfa3e07/c995d143ad4bd113f1b6ea0e59afa40f4bfb0596.jpg    roll

三个角度的示意图:x_{}g, y_{}g, z_{}g为世界坐标系,x_{}b, y_{}b, z_{}b为物体坐标系

        4.静态欧拉角和动态欧拉角的关系:

        对于坐标系E下的欧拉角(α,β,r)和以下哪个旋转矩阵是等价的
               1.绕坐标系E下的x轴旋转α,绕坐标系E下的y轴旋转β,绕坐标系E下的z轴旋转r,三个矩阵的复合
               2.绕坐标系E下的x轴旋转α,绕 坐标系E在绕x轴旋转α后的新系E'下的y轴旋转β,绕 坐标系E'在绕y轴旋转β后的新系                          E''下的z轴旋转r,三个矩阵的复合
        通俗的讲,我们在旋转时,要不要把坐标系一起转动?
事实上两种理解都可以,当然,两种转法并不等价,下面我来解释这个问题,
当我们讲到坐标系E下的欧拉角(α,β,r)时,这句话是有歧义的,我们必须定义旋转顺序,因为旋转顺序会影响旋转结果。
如果假设旋转顺序是先绕x轴再y轴再z轴,x-y-z,那么这个欧拉角对应的旋转矩阵是指上述的2所表示的旋转矩阵。
如果假设旋转顺序是先绕z轴再y轴再x轴,z-y-x,那么这个欧拉角对应的旋转矩阵是指上述的1所表示的旋转矩阵,等等,你肯定会问,这难道不是把2中的先后顺序换一下就行了吗,"绕坐标系E下的z轴旋转r,绕 坐标系E在绕z轴旋转r后的新系E'下的y轴旋转β,绕 坐标系E'在绕y轴旋转β后的新系E''下的x轴旋转α,三个矩阵的复合"难道不是这样吗?是的,当然也是这样。

下面我来证明两种复合方式是相等的,
为了方便证明我先定义一些记号,
记:
绕坐标系E下的x轴旋转α的旋转矩阵为Rx,
绕坐标系E下的y轴旋转β的旋转矩阵为Ry,
绕坐标系E下的z轴旋转r的旋转矩阵为Rz,

绕坐标系E下的z轴旋转r的旋转矩阵为Rr(Rr=Rz),
绕 坐标系E在绕z轴旋转r后的新系E'下的y轴旋转β的旋转矩阵为Rb,
绕 坐标系E'在绕y轴旋转β后的新系E''下的x轴旋转α的旋转矩阵为Ra,

另外,将矩阵R的逆记作R~

求证:Rx*Ry*Rz = Rr*Rb*Ra

证明:
Rr = Rz  定义就是一样的,显然相等

Rb = Rr~*Ry*Rr 要得到绕 坐标系E在绕z轴旋转r后的新系E'下的y轴旋转β的旋转矩阵为Rb,可以先应用Rr~这时可以视作在E下,然后使用E下的旋转Ry绕旧的y轴旋转,在应用Rr转回到E'

Ra = (Rr*Rb)~*Rx*(Rr*Rb) 理由同上

所以 右边=Rr*Rb * Ra
         =Rr*Rb * (Rr*Rb)~*Rx*(Rr*Rb)
         =(Rr*Rb)* (Rr*Rb)~*Rx*(Rr*Rb)
         =Rx*(Rr*Rb)
         =Rx*(Rr*Rr~*Ry*Rr)
         =Rx*Ry*Rz =左边 
#证毕

        5.环架结构和动态欧拉角以及静态欧拉角的关系:

        假设环架结构最外层圆环代表z轴,中间圆环代表y轴,最内层圆环代表x轴,旋转顺序为z-y-x。即旋转z轴y和x轴都变,旋转y轴只有x轴变化,旋转x轴其它轴不变。则,按照z-y-x顺序转动的环架结构就和上述航空次序欧拉角,即为动态欧拉角,但有稍许区别,按照动态欧拉角的定义,物体坐标系在转动的过程中,先旋转z轴,y和x轴都变化,再转动y轴,z轴和x轴都变化,最后转动x轴,z轴和y轴都变化。但由于每一个欧拉角都相当于一个空间坐标,他都是基于世界坐标系的,而不是基于上一帧中的物体坐标系,所以不会有影响,通俗点说:环架结构旋转后得到的方位和动态欧拉角定义得到的方位一致,但环架结构旋转后的形成的新的物体坐标系已经不能满足轴与轴之间两两垂直,甚至可能轴与轴重合,但按照动态欧拉角定义旋转后所得的新的物体坐标系仍然满足轴与轴两两垂直,但是下一帧物体的动态欧拉角坐标是基于世界坐标系的,而不是此时得到的新的物体坐标系,所以无影响。可以对比环架结构和https://blog.csdn.net/xiaoyink/article/details/84504878中的动态欧拉角定义所得的物体坐标系。

       环架节后若按照x-y-z的顺序转动,则 等同于上述航空次序欧拉角的静态定义,根据第4点的理论,环架结构的x-y-z和z-y-x顺序是等价的,因为x轴旋转y、z轴不变化,y轴旋转,z轴不变化,x轴虽然变化,但已经绕x轴旋转过了,所以不影响最终结果,z轴旋转同理,所以x、y、z轴可看成世界坐标系的三轴。

二、万向节死锁(环架死锁)

既然欧拉角是从初试状态是世界坐标系的三个角度都为0,来确定最终方位的,而不是上一帧的物体坐标系来确定最终方位的,那为什么还会出现在死锁状态附近不可思议的运动轨迹?我还没想明白,因为下面动图演示的万向节锁是以上一帧转动所形成的两个坐标轴重合的物体坐标系为基准开始转动的,而不是从世界坐标系开始的。下述环架结构旋转时,以上述z-y-x的顺序为例,当绕y轴旋转90度时,得到的新的物体坐标系 中z轴和x轴共线,并且下一帧图像以此新的物体坐标系为参考旋转到特定的方位时会产生不符合我们需求的轨迹,如视频https://www.bilibili.com/video/av9140886中所讲的。

箭头在环架中(环架初始位置是上次转动所形成的的两轴重合的物体坐标系)要转动到虚影位置时,不能笔直向下转动直接到位(最小球面举例旋转),而是按照奇怪的弧形路线,这就是万向节锁。

也就是锁,万向节锁产生的条件是

1. 动态欧拉角,且是环架结构,保证物体坐标系的三个轴的角度不能固定,保证其中两个轴可以重合,而不能向动态欧拉角的定义中,物体转动完成后,形成的新的物体坐标系轴与轴之间仍然是两两垂直。

2. 必须以上一次转动所形成的有两个轴重合的物体坐标系为基准开始转动,而不能每次都以世界坐标系为基准

显然,在实际应用中第二点都是不满足的,那为什么还会产生奇怪的转动,如下图。难道和欧拉角的非平滑插值有关,没有深入研究

 

一种旋转状态可能对应多种欧拉角甚至无数种,可能一个状态到另一个状态之间插值时产生了这种效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

欧拉角和万向节死锁 的相关文章

随机推荐

  • docker build 用法

    在包含Dockerfile 文件的目录下执行 xff1a docker build t nginx v3 即是创建了镜像 docker build 命令进行镜像构建 其格式为 xff1a docker build 选项 lt 上下文路径 U
  • Docker 镜像备份与迁移

    1 容器保存为镜像 docker commit pinyougou nginx mynginx pinyougou nginx 是容器名称 mynginx 是新的镜像名称 2 镜像导出 docker save o dockerdemo ta
  • android T 前台Service

    获取android 13 用户控制 用户在长时间运行的应用程序上获得更多透明度和控制权 xff1a 前台服务仍然需要包含通知 xff0c 并且应用程序必须请求权限才能显示通知 FGS 通知现在可以被用户关闭而不影响 FGS用户可以在任务管理
  • android 8.0+后台Service限制

    后台Service限制 背景 每次在后台运行时 xff0c 应用都会消耗一部分有限的设备资源 xff0c 例如 RAM 这可能会影响用户体验 xff0c 如果用户正在使用占用大量资源的应用 xff08 例如玩游戏或观看视频 xff09 xf
  • CMake入门(一)Ubuntu下使用和Window下使用

    引用一段知乎上关于 xff1a CMake 如何入门 xff1f 生态如此 xff0c 长久来看 xff0c 绕不开 就像Github 看了下 xff1a B站上的一个资源 cmake构建c 43 43 项目快速入门2 1 在Windows
  • 安装ubuntu成功后不能重启(nomodeset)躺坑记录acpi int3400:00:Unsupported event

    针对这篇文章的补充 xff1a 安装ubuntu成功后不能重启 xff08 nomodeset xff09 legalhighhigh的博客 CSDN博客 如果找不到 34 Boot Options ed boot 61 initrd 61
  • npm install 出现错误 unable to access ‘https://github.com/adobe-webplatform/eve.git/‘:

    前言 xff1a 输入命令 npm install registry 61 https registry npm taobao org xff0c 出现错误 unable to access 39 https github com adob
  • Kubernetes初识

    一 Kubernetes是什么 xff1f xff08 一 xff09 读音 了解一个新事物 xff0c 最先学会都是怎么读 xff0c 不然以后会一直读错下去 xff0c 到时候说出去可能就会被人嘲笑 Kubernetes xff0c 读
  • Linux操作系统基本代码

    1 xff08 ls xff09 list 列出目录的所有项 ls 查看当前目录 xff08 ls l 文件路径 xff09 以详细模式查看 xff08 ls xff5e xff09 展示主目录文件 xff08 ls xff09 展示当前目
  • C语言 const、static、volatile等关键字的作用

    目录 前言 const static volatile extern 总结 前言 C语言里面有许多关键字 xff0c 本文结合我自己的了解简单讲讲几个常用关键字的作用 const 问 xff1a const有什么用 xff1f 答 xff1
  • 函数调用,中断以及进程切换,的现场保护的区别

    注意以下过程描述了两种armv7指令集的内核的中断表现 xff08 cortex A7和cortex m3 xff09 xff0c 但是cortex A7和cortex m3表现很不一样 xff0c 因为Cortex m3只有用户级和特权级
  • Cortex-M3 PendSV 中断 系统调用 说明

    参考 Cortex M3权威指南中文版 PendSV异常是和系统调用有些类似 xff0c cpu 需要手动将往NVIC 的PendSV 悬起寄存器中写1 xff0c 然后产生中断 xff0c 系统调用 xff08 SVC xff09 是co
  • 微积分的直观理解

    在微积分中 xff0c 我们进行定积分计算的时候一般是用牛顿莱布尼兹公式 xff0c 不定积分计算也类似 xff0c 都需要寻找原函数F x xff0c 但是如果想直观的理解微积分 xff0c 我们需要顺着公式的反方向进行理解 xff0c
  • Makefile中调用make命令,-C和-f选项的区别

    C选项 Makefile中 C是递归调用子目录中的Makefile xff0c C选项后跟目录 xff0c 表示到子目录下执行子目录的Makefile xff0c 顶层Makefile中的export的变量还有make默认的变量是可以传递给
  • 卡尔曼滤波

    标准卡尔曼滤波推导相关 预测 predict 更新 update 注意 xff0c 以下对于时间的下标 xff0c 有的时候用t有的时候用k xff0c 它们其实是一样的 xff0c 因为参考不同的资料 xff0c 所以写的比较乱 其中是隐
  • EM算法原理

    Notion The all in one workspace for your notes tasks wikis and databases
  • Android ko module compile 简介

    Notion The all in one workspace for your notes tasks wikis and databases
  • volatile c语言关键字 / cache / 内存一致性

    Notion The all in one workspace for your notes tasks wikis and databases
  • Qt中的QWidget::move函数

    QWidget move函数 原型 xff1a void move int x int y void move const QPoint amp 其中move的原点是父窗口的左上角 xff0c 如果没有父窗口 xff0c 则桌面即为父窗口
  • 欧拉角和万向节死锁

    一 什么是欧拉角 欧拉角就是物体绕坐标系三个坐标轴 xff08 x xff0c y xff0c z轴 xff09 的旋转角度 xff0c 在这里坐标系可以是世界坐标系 xff0c 也可以是物体坐标系 xff0c 旋转顺序也是任意的 xff0