【基础知识】欧拉角与万向死锁

欧拉角

什么是欧拉角

欧拉角是一种描述物体姿态的方法

它是一种相对坐标,非常直观

想要定义一个旋转,对于欧拉角来说需要4个元素

首先是定义XYZ的顺序,一共有6种,这个是随意的,但是描述的双方需要遵守同一套顺序

之后是输出XYZ的旋转角度值(弧度)

姿态用欧拉角表示的结果并不是唯一的,即使指定好旋转顺序,也会出现多种欧拉角表示同一姿态的情况

而且欧拉角在表示姿态时有死点(万向死锁)

在进行运算时耗费的算力较大

欧拉角的坐标系

欧拉角的坐标系一般使用右手系(即使用右手从X轴正方向到Y轴正方向握拳,Z轴正方向是大拇指所指向的)

旋转的正方向也是右手系(按照X->Y->Z->X的顺序来判断)

即Z轴旋转正方向是另外两轴从X握向Y的方向

另外对于XYZ的三个轴的旋转有专用的名字

绕Z轴旋转,叫偏航角 yaw

绕Y轴旋转,叫俯仰角 pitch

绕X轴旋转,叫滚转角 roll

至于坐标系的指向是随意的,在不同的用途时多有不同

如下图

在这里插入图片描述

欧拉角的坐标系是在被描述姿态的物体上的,随着旋转而变化的

欧拉角的顺序

常规欧拉角的顺序有6种

分别是 X-Y-Z,X-Z-Y,Y-X-Z,Y-Z-X,Z-X-Y,Z-Y-X

就是XYZ的全排列

还有一种特殊的欧拉角,就是可以只用两个方向的旋转来描述(没研究过,等看看再补充)

常用的欧拉角顺序是Z-Y-X

欧拉角过程

首先明确一点

欧拉角是状态量,是描述当前状态的,而不是变化量

欧拉角永远是描述从初始状态(一般是上电时记为初始状态)到现在状态的

假设现在状态为状态1,那输出的欧拉角是指的通过3个顺序的旋转从初始状态变到状态1

如果物体的姿态发生了变化,变成了状态2,那输出的欧拉角是指的通过3个顺序的旋转从初始状态变到状态2,

而不是从状态1变化来的,这一点很重要

以欧拉角顺序是Z-Y-X为例介绍

步骤分为3步

  1. 绕物体的Z轴旋转,得到偏航角yaw;
  2. 绕旋转之后的Y轴旋转,得到俯仰角pitch;
  3. 绕旋转之后的X轴旋转,得到滚转角roll;

需要注意:

  1. 永远是从初始状态开始进行旋转
  2. 三个轴都是随着旋转而改变的(比如绕Z旋转之后(不考虑0°),XY轴就与初始状态的轴不一样了)
  3. 要按照规定的顺序进行

网上盗的演示图

在这里插入图片描述

以Z-Y-X顺序,按[X,Y,Z]=[15,30,45]为例子演示

首先是按Z(偏航角yaw)旋转45°

在这里插入图片描述

之后按旋转后的Y轴(这里没有标出来,网页的),Y轴(俯仰角pitch)旋转30°

在这里插入图片描述

最后按X轴(滚转角roll)旋转15°

在这里插入图片描述

万向死锁

欧拉角的问题

欧拉角很直观,但是他有个原理上无法解决的问题

万向死锁----当排在中间的旋转90°时,会出现一个自由度丢失(即没法移动到全部位置)

如Z-Y-X的旋转顺序,Y旋转90°时则会出现万向死锁

在这里插入图片描述

在这里插入图片描述

就像这样,Z和X均控制了同一个维度的运动

万向死锁成因

因为欧拉角的旋转轴是随着旋转的过程而变化的

还是以Z-Y-X顺序为例子

当Z轴旋转之后,Y轴的旋转会带动X轴发生变化,而因为Z的旋转是在Y之前(欧拉角都是从初始状态开始经过Z-Y-X顺序进行旋转)

所以Z的旋转轴无需跟随Y改变(反正在Y之前,改变之后也不会再绕Z旋转了,还改它干啥)

同样的,X的旋转也无需改变Z和Y的旋转轴

也就意味着,当Y轴旋转90°时,X轴已经被旋转到了与一开始Z轴(实际绕行的Z轴)重叠的位置

所以当这时改变X的数值,从效果上和改变Z是一样的,也就是发生了万向死锁

下面借着实物来演示一下

初始状态(图中的坐标系为当前坐标系,会随着欧拉角的旋转而旋转)

在这里插入图片描述

绕Z旋转一个角度

在这里插入图片描述

再绕Y旋转90°

可以发现,旋转后的X轴(即将旋转的轴)和原来的Z轴(初始状态的Z轴,已经按照这个轴旋转过了)共线了

那如果我们现在改变Z的角度会如何呢

在这里插入图片描述

改变一个Z的角度

注意,要从头开始进行旋转

在这里插入图片描述

再绕Y旋转90°

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPNkqTBd-1661443039458)(D:\桌面文件\博客\欧拉角与万向死锁\12.png)]

可以看出发生了万向死锁现象,导致了一个自由度的缺失

而且欧拉角再进行计算时较复杂,因此常使用四元数来表示旋转

而欧拉角较为直观,一般在人机交互界面使用欧拉角

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值