欧拉角、万向节死锁理解

  • 欧拉角理解
    • 举例讲解
    • 顺规、内旋与外旋
      • 顺规
      • 内旋与外旋
      • 总结
    • 东北天坐标系
    • 数学表示
      • 公式推导
      • 举例计算
  • 万向节死锁理解
    • 说明
    • 形象表示
    • 数学表示

欧拉角理解


举例讲解

欧拉角用三次独立的绕确定的轴旋转角度来表示姿态。如下图所示

经过三次旋转,旋转角度分别为α\alphaα、β\betaβ 和 γ\gammaγ,由初始的xyzxyzxyz坐标系得到了最终的x′′′y′′′z′′′x'''y'''z'''x′′′y′′′z′′′坐标系。这就是欧拉角来表示姿态的方法。

如图所示为航空航天中常用的欧拉角,图中的ψ\psiψ、θ\thetaθ和ϕ\phiϕ 对应于上图中的α\alphaα、β\betaβ 和 γ\gammaγ。

航空航天中常用的欧拉角


顺规、内旋与外旋

上面所举的例子中,旋转的顺序是按照 z−y−xz-y-xz−y−x 的顺序来进行旋转的,并且每一次旋转都是绕自身轴(运动轴)进行的, 这只是欧拉角的一种表示方式。欧拉角共有12种表示方式。

顺规

顺规即欧拉角三次转动的顺序规定,欧拉角一共有12种顺规

三个轴只用两个的:Proper Euler angles (z−x−z, x−y−x, y−z−y, z−y−z, x−z−x, y−x−y)
三个轴全都用的:Tait-Bryan angles (x−y−z, y−z−x, z−x−y, x−z−y, z−y−x, y−x−z)

上文举例所用的 z−y−xz-y-xz−y−x 是三个轴都用的一种顺规,即 先绕zzz轴旋转,再绕yyy轴旋转,最后绕xxx轴旋转

内旋与外旋

根据绕旋转轴的不同,可以分为内旋和外旋。

内旋 Intrinsic rotations:绕运动轴
外旋 Extrinsic rotations:绕固定轴

上文所举的例子每次旋转都是绕上一次旋转所新产生的坐标轴旋转的(这句话有点绕),比如第二次旋转绕的是y′′y''y′′而不是固定的坐标轴yyy。所以是绕运动轴,即内旋。

  • 如下图所示,每一次旋转都是绕蓝色的固定轴旋转


绕固定坐标轴旋转

  • 如下图所示,每一次旋转都是绕红色(第一张图)、绿色(第二张图)、紫色(第三张图)的运动轴旋转

绕运动坐标轴旋转

这里图片应引用了台大林沛群老师讲解的机器人运动学。

在绕轴旋转的时候,顺规有12种,内外旋有2种,但是一般情况下,欧拉角都是说的绕自身轴(运动轴)旋转,即 内旋 。所以欧拉角共有 1×12=121\times12=121×12=12 种表示方式。


总结

首先说一个很有意思却很不直观的结论:三次绕固定轴旋转的最终姿态和以相反顺序三次绕运动轴旋转的最终姿态相同。

一般情况下,每一个领域有自己默认的欧拉角定义,也就是24种的其中之一。比如经典力学中使用zxzzxzzxz,量子力学使用的是zyzzyzzyz,航空航天使用zyxzyxzyx或zxyzxyzxy。所以在跨行业或者跨模块协作的时候,一定要问清楚对方是哪一种欧拉角。


东北天坐标系

我在调一款九轴姿态传感器的时候,看到这样的表述:

这里面东北天坐标系是指,旋转前的xyzxyzxyz坐标轴与东北天这三个方向是对应的,即xxx轴指向东方,yyy轴指向北方,zzz轴指向天空。
或者这么理解:当计算出的欧拉角的 α=0,β=0,γ=0\alpha=0,\beta=0,\gamma=0α=0,β=0,γ=0 的时候,xxx轴指向东方,yyy轴指向北方,zzz轴指向天空。如下图所示


数学表示

公式推导

以 z−y−xz-y-xz−y−x 顺规和绕自身轴(运动轴)旋转为例,介绍一下欧拉角与旋转矩阵的关系。
规定:
先绕 zzz 轴旋转 α\alphaα ; 再绕 yyy 轴旋转 β\betaβ ; 再绕 xxx 轴旋转 γ\gammaγ
用 ccc 表示 coscoscos ,用 sss 表示 sinsinsin

绕 zzz 轴旋转 α\alphaα 所产生的旋转矩阵为

R1=[cα−sα0sαcα0001]R_1=\begin{bmatrix} c\alpha & -s\alpha & 0 \\ s\alpha & c\alpha & 0 \\ 0 & 0 & 1 \end{bmatrix} R1​=⎣⎡​cαsα0​−sαcα0​001​⎦⎤​

绕 yyy 轴旋转 β\betaβ 所产生的旋转矩阵为

R2=[cβ0sβ010−sβ0cβ]R_2=\begin{bmatrix} c\beta & 0 & s\beta \\ 0 & 1 & 0 \\ -s\beta & 0 & c\beta \end{bmatrix} R2​=⎣⎡​cβ0−sβ​010​sβ0cβ​⎦⎤​

绕 xxx 轴旋转 γ\gammaγ 所产生的旋转矩阵为

R3=[1000cγ−sγ0sγcγ]R_3=\begin{bmatrix} 1 & 0 & 0 \\ 0 & c\gamma & -s\gamma \\ 0 & s\gamma & c\gamma \end{bmatrix} R3​=⎣⎡​100​0cγsγ​0−sγcγ​⎦⎤​

绕自身轴(运动轴)转动时,先转动的放在前面,求得旋转矩阵为

RZYX=R1R2R3=[cαcβcαsβsγ−cγsαsαsγ+cαcγsβcβsαcαcγ+sαsβsγcγsαsβ−cαsγ−sβcβsγcβcγ]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} c\alpha c\beta & c\alpha s\beta s\gamma - c\gamma s\alpha& s\alpha s\gamma + c\alpha c\gamma s\beta \\ c\beta s\alpha & c\alpha c\gamma + s\alpha s\beta s\gamma & c\gamma s\alpha s\beta - c\alpha s\gamma \\ -s\beta & c\beta s\gamma & c\beta c\gamma \end{bmatrix} \end{aligned}RZYX​​=R1​R2​R3​=⎣⎡​cαcβcβsα−sβ​cαsβsγ−cγsαcαcγ+sαsβsγcβsγ​sαsγ+cαcγsβcγsαsβ−cαsγcβcγ​⎦⎤​​

举例计算

假设先对 zzz 轴旋转 45°45°45° ,再对 yyy 轴旋转 30°30°30° ,最后对 xxx 轴旋转 60°60°60°

计算得到最终结果为

RZYX=R1R2R3=[0.61240.30620.17680.61240.65970.176800.750.4330]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} 0.6124 & 0.3062 & 0.1768 \\ 0.6124 & 0.6597 & 0.1768 \\ 0 & 0.75 & 0.4330 \end{bmatrix} \end{aligned}RZYX​​=R1​R2​R3​=⎣⎡​0.61240.61240​0.30620.65970.75​0.17680.17680.4330​⎦⎤​​


万向节死锁理解

说明

欧拉角表示姿态的时候,会出现万向节死锁的情况
当我使用传感器(维特智能WT901c-485)读取角度的时候,在ZYXZYXZYX的顺规下,当pitch角度为90或-90的时候,roll和yaw角度会乱飘,这就是遇到了万向节的死锁。
不同的顺规死锁的情况不一样,本文仅以ZYXZYXZYX说明死锁的情况。


形象表示

我们以手机为例,说明一下万向节死锁的情况

注意,欧拉角表示姿态时,只能旋转三次,这是理解死锁的前提!

首先这是一个手机,我们对其建立坐标系,平行于手机长边是 XXX 轴,平行于手机短边是 YYY 轴,垂直于桌面是 ZZZ 轴。我们按照 ZYXZYXZYX 的顺规,对手机进行旋转

  1. 首先,先绕 ZZZ 轴旋转得到 X′Y′Z′X'Y'Z'X′Y′Z′ 坐标系,如图中绿色所示

  1. 然后对 X′Y′Z′X'Y'Z'X′Y′Z′ 绕 Y′Y'Y′ 轴旋转-90°,得到 X′′Y′′Z′′X''Y''Z''X′′Y′′Z′′ ,如图中蓝色所示(此时旋转后的 X′′X''X′′ 轴与旋转之前的 Z′Z'Z′ 轴重合

  1. 最后将 X′′Y′′Z′′X''Y''Z''X′′Y′′Z′′ 绕 X′′X''X′′ 轴旋转得到 X′′′Y′′′Z′′′X'''Y'''Z'''X′′′Y′′′Z′′′ 坐标系,如图中黄色所示。

这时候重点来了!!!

我们发现,这样旋转过后,手机的长边是与桌面(地面)垂直的,手机的短边是与桌面(地面)平行的。并且,无论第一步转 ZZZ 轴转了多少度,第三步转 XXX 轴转了多少度,手机长边与短边都是这个状态。

这就是欧拉角表示角度时的“万向节死锁”现象,按理说欧拉角可以表示三个自由度,即三个方向的旋转。但是在这种情况下,只要β=±90°\beta=\pm90°β=±90°,无论 α\alphaα与γ\gammaγ怎么取值,手机最终的长边都会与地面垂直,这就好像少了一个自由度,只有2个自由度,所以称之为“万向节死锁”。

那么为什么会出现这种情况呢?

一种感性的理解是这样:我们在第二步旋转的时候,将旋转后的 X′′X''X′′ 轴与旋转之前的 Z′Z'Z′ 轴重合(这个我在上面旋转演示的时候加粗说明了)。

而第一步旋转是绕 Z′Z'Z′ 轴旋转的,第三步旋转是绕 X′′X''X′′ 轴旋转的,所以两轴重合意味着两次旋转绕的是同一个轴,所以说,三个自由度变为了两个自由度。


数学表示

接下来我们从数学的角度来理解一下死锁为什么会发生,结合上文的形象表示,理解起来更容易。

我们在上文已经求了在 ZYXZYXZYX 顺规下的旋转矩阵为

RZYX=R1R2R3=[cαcβcαsβsγ−cγsαsαsγ+cαcγsβcβsαcαcγ+sαsβsγcγsαsβ−cαsγ−sβcβsγcβcγ]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} c\alpha c\beta & c\alpha s\beta s\gamma - c\gamma s\alpha& s\alpha s\gamma + c\alpha c\gamma s\beta \\ c\beta s\alpha & c\alpha c\gamma + s\alpha s\beta s\gamma & c\gamma s\alpha s\beta - c\alpha s\gamma \\ -s\beta & c\beta s\gamma & c\beta c\gamma \end{bmatrix} \end{aligned}RZYX​​=R1​R2​R3​=⎣⎡​cαcβcβsα−sβ​cαsβsγ−cγsαcαcγ+sαsβsγcβsγ​sαsγ+cαcγsβcγsαsβ−cαsγcβcγ​⎦⎤​​

现在把 β=90°\beta=90°β=90° 带进去看一下旋转矩阵有什么结果,此时旋转矩阵变成了这样。

RZYX=R1R2R3=[0−s(α−γ)c(α−γ)0c(α−γ)s(α−γ)−100]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} 0 & -s(\alpha - \gamma)& c(\alpha-\gamma) \\ 0 & c(\alpha-\gamma) & s(\alpha-\gamma) \\ -1 & 0 & 0 \end{bmatrix} \end{aligned}RZYX​​=R1​R2​R3​=⎣⎡​00−1​−s(α−γ)c(α−γ)0​c(α−γ)s(α−γ)0​⎦⎤​​

可以发现,此时的 α\alphaα 和 γ\gammaγ 其实是一个变量 α−γ\alpha-\gammaα−γ,这也从另一个角度说明了在这种情况下,少了一个自由度,所以出现了“万向节死锁”。

欧拉角、万向节死锁理解相关推荐

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

    欧拉角和四元数都可以用来描述物体的姿态.欧拉角的万向节死锁理解稍微奇怪.四元数原理的理解较为复杂.欧拉角和四元数之间可以做转换.这里收集了若干资料已做备忘. 万向节死锁(Gimbal Lock) : ...

  2. 欧拉角-万象死锁-理解

    关于欧拉角的万象死锁问题,看过好多文章,也看过好多视频动画模拟解释,看这些文章和动画解释的时候,看起来很有道理,但是回头再来想一下,其实自己根本就不理解为什么会有万象死锁.其实不能怪自己,因为大部分这 ...

  3. 欧拉角死锁_欧拉角与万向节死锁

    欧拉角万向节死锁的问题困扰了自己很久,一直跟飞机结合不起来.昨天看代码,遇到用飞机三个姿态角度构造四元数的问题,百思不得其解.早上坐地铁,重新想这个问题.不成想这个问题还没弄明白,倒是明白了欧拉角万向 ...

  4. 欧拉角死锁_刚体运动学最通俗易懂的理解万向节死锁

    在网上看了很多所谓的通俗易懂的理解万向节死锁的文章,甚至动画. 可能是我想象力有问题,实在是理解不了: 如果xyz表示机体坐标系,那机体坐标系永远不可能重合,也就不会出现第二种状态. 恰巧,我们刚看了 ...

  5. 接上篇《旋转矩阵的作用:世界坐标变换;求解局部坐标系下的局部坐标》,理解欧拉角:内旋;外旋;万向节死锁

    目录 1.什么是欧拉角.静态欧拉角.动态欧拉角 2.内旋.外旋及计算方式 3.万向节死锁及实际会产生什么问题 接上篇<旋转矩阵的作用:世界坐标变换:求解局部坐标系下的局部坐标>,理解欧拉角 ...

  6. 如何脱离数学推导理解欧拉角与万向节死锁

    如何脱离数学推导理解欧拉角与万向节死锁 目录 如何脱离数学推导理解欧拉角与万向节死锁 0.需要提前掌握的知识 1.死锁的本质-旋转面重合的成因 2.死锁出现将导致什么?-失控 3.旋转面逐渐慢慢走向重 ...

  7. 3D数学基础——欧拉角与万向节死锁

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

  8. 如何理解3D动画中的欧拉角以及死锁?

    3D游戏或者3D电影中,比如黑客帝国中酷炫的旋转是怎么实现的? 旋转的算法有很多,这里主要介绍其中一种:欧拉角. 1 欧拉角 1.1 欧拉角的算法思想是什么 陌生的你来到了成都,站在盐市口茫然四顾,想 ...

  9. 欧拉角表示以及万向节死锁

    欧拉角 主要介绍欧拉角的表示,欧拉角的旋转,欧拉角的优缺点,以及欧拉角的万向节死锁 1.欧拉角的表示 欧拉角是一种基于三种较简单旋转运动(称为俯仰.滚动和偏航)创建一般旋转的机制.如下图,一架沿x轴方 ...

最新文章

  1. Best jQuery Plugins of 2010
  2. 重构改善既有代码设计--重构手法11:Move Field (搬移字段)
  3. Loss Function , Cost Function and Kernel Function in ML(To be continued)
  4. 推荐系统与协作过滤面临的主要问题
  5. 使用Github(Github Issues)
  6. 注册确认邮件中图片不显示的问题
  7. 如何让 Timer 在特定时间点触发?
  8. [C++基础]034_C++模板编程里的主版本模板类、全特化、偏特化(C++ Type Traits)
  9. matlab fgoalattain,matlab优化工具箱 | 学步园
  10. Coinbase是如何在其加密货币交易平台上应对扩展性挑战的
  11. C++多线程detach函数使用
  12. 0day安全:软件漏洞分析技术 学习分析记录
  13. 快速分析京东物流详情,并导出EXCEL表格
  14. 阿里云MQ报错:The AMQP operation was interrupted: AMQP close-reason, initiated by Peer, code=403
  15. 顺芯ES8374单声道codec音频解码芯片,集成功放IC
  16. 中国式危机公关9加1策略(第十一章 强大执行力原则)
  17. 量子信息革命引领未来科技革命 | 科技导报
  18. 春节小游戏之图片分类(Pytorch模型部署)
  19. 计算机类专业本科生毕业论文+答辩那点事
  20. 2023年数据分析职业前景怎么样?

热门文章

  1. 生态保护重要性评价之生态脆弱性评价
  2. Blockathon2018(上海)顺利结束,9个项目打开区块链落地新思路
  3. 专访超脑链团队:公链比联盟链更适合赋能传统企业
  4. IT十年人生过客-二十一-忙碌和非凡的一年(上)
  5. 笔记本重置找不到恢复环境_win10重置此电脑恢复环境找不到要如何处理
  6. python展开 c函数中的宏预处理_Linux C语言结构体-学习笔记
  7. 微信支付rootca.pem通用根证书文件,亲测可用
  8. 进入51.com个人主页
  9. 计算机网络03:数据链路层
  10. LM2596,LM2576,LM2575的差别