干货整理:欧拉角、旋转矩阵、四元数合辑

干货整理:欧拉角、旋转矩阵、四元数合辑

本篇文章首发于公众号:无人机系统技术。更多无人机技术相关文章请关注此公众号,有问题也可在公众号底部添加个人微信进行交流。

引言

在开始正式论述导航、飞控算法之前呢,再给大家回顾一下公众号前期阐述欧拉角、旋转矩阵以及四元数的三篇内容,一方面是将欧拉角、旋转矩阵、四元数三种描述姿态的方式汇总在一起进行对比,为后续控制律设计以及导航解算做准备,另一方面是校勘了当初写文章时的一些笔误。

另外,对于想进一步学习飞控知识以及有问题需要专业人员帮忙答疑的朋友可以关注一下我最近创建的知识星球:关于创建知识星球的公告

上篇 旋转矩阵与欧拉角

1.1引言

欧拉角和旋转矩阵是我们在导航和控制算法中经常用到的知识,他们的定义和优缺点以及他们之间的转换关系都应该是我们要掌握的内容,上篇内容就为大家阐述我们常用的几个坐标系以及如何在这些坐标系中定义欧拉角和旋转矩阵。

1.2坐标系

我们为了能够科学的反映物体的运动特性,会在特定的坐标系中进行描述,一般情况下,分析飞行器运动特性经常要用到以下几种坐标系:1、大地坐标系统;2、地心固定坐标系统;3、本地北东地坐标系统;4、机载北东地坐标系统;5、机体轴坐标系统。

其中3、4、5都是我们建模、设计控制律时经常使用的坐标系,描述物体(刚体)位姿信息的6个自由度信息都是在这三个坐标系中产生的。

首先,如上图所示,机体轴坐标系的原点固连于飞行器重心,X轴指向机头,Z轴指向机腹,X轴和Z轴都位于纵向对称面内,而Y轴指向机身右侧,与X、Z轴构成右手系,该坐标系我们用body的首字母b表示。

机载NED坐标系的原点也位于飞行器重心,其X轴指向椭球模型地理北极,Y轴指向椭球模型地理东方,Z轴沿椭球面法线向下,在绝大多数理解上都可以理解成通常的北向、东向、地向,通常该坐标系用n表示。

本地NED坐标系与机载NED坐标系唯一的不同就是原点坐标位于地面上任意一点,在分析物体的旋转运动时一般不会用到。

1.3 旋转关系

刚才我们讲到两个坐标系,那建立这两个坐标系的目的是什么呢?当然是要描述清楚飞行器的姿态信息,目前为止,描述清楚姿态信息的方式有三种:欧拉角、旋转矩阵、四元数。

欧拉角是欧拉引入用来描述刚体姿态的三个角,也是我们平常最容易理解,最容易具象表述清楚的一种方式。欧拉角有静态和动态两种,静态的是绕静止的惯性坐标系三个轴进行旋转,而动态的在旋转过程中旋转坐标轴会发生变化,除了第一次旋转是绕惯性系的坐标轴进行之外,后续两次旋转都是动态的,并且前面旋转的角度对后面的旋转轴是有影响的,按照不同的轴顺序进行旋转得到的欧拉角也是不同的,旋转变换可以归结为若干个沿着坐标轴旋转的组合,组合个数不超过三个并且两个相邻的旋转必须沿着不同坐标轴,总共有12种旋转方式,分别是XYZ、XZY、XYX、XZX、YXZ、YZX、YXY、YZY、ZXY、ZYX、ZXZ、ZYZ。虽然存在12种旋转方式,但是每一种旋转方式都存在万向锁现象,什么是万向锁,这是一个比较复杂的问题,我们会在后面内容中进行描述。

航空领域通常采用的旋转方式是ZYX顺序,下图是一架飞机按照ZYX组合进行旋转产生欧拉角的过程,其中,ψ为偏航角,θ为俯仰角,φ为滚转角。

我们从下图具体看旋转是怎么进行的,首先,我们绕机体NED系的Z轴旋转ψ角度,得到中间坐标系1,然后绕中间坐标系1的Y轴旋转θ角得到中间坐标系2,之后再绕中间坐标系2的X轴旋转角度φ就得到了机体轴坐标系,所有旋转都按照右手螺旋定则进行。

1.4 旋转矩阵

旋转矩阵反映了一个坐标系中的坐标在另一个坐标系中表示的转换关系。我们先来看一下二维平面坐标系下的情况。

用数学公式表示就是:

而我们上面描述的三个旋转虽然在三维笛卡尔直角坐标系下进行,但都是平面旋转,他们的旋转矩阵分别是:

根据作用的顺序,则从机载NED坐标系到机体轴坐标系的欧拉转换矩阵是

只要θ≠±90°,欧拉角可以描述清楚任何刚体的姿态以及角运动信息,而对于大部分飞行器来说,俯仰角也不会到90°,所以,使用欧拉角进行姿态控制完全可以满足使用要求,但对于一些要求变态机动能力的飞行器来说,为了防止俯仰角90°时出现奇点,使用四元数替代欧拉角进行姿态控制是必须的,另外,对于姿态解算时欧拉角描述方法也会出现问题,所以使用四元数进行姿态解算也是上上之策。

1.5 小结

本节内容主要讲述了飞控中常用的坐标系以及描述飞行器姿态信息的几种表示方法,然后讲述了欧拉角以及旋转矩阵的含义,最后论述了两者之间的关系。上述内容是导航和飞控的基本理论,要想进一步学习飞控知识必须了解清楚。接下来我们要讲述的是欧拉角的万向锁是怎么回事,以及如何用四元数替代欧拉角进行姿态表述,最后比较欧拉角、旋转矩阵和四元数三者的优缺点。

中篇 欧拉角与万向锁

2.1 引言

上一篇讲欧拉角与旋转变化时,我们留过一个悬念,就是欧拉角在俯仰角为±90°时会出现万向锁现象,这是欧拉角表征飞行器姿态的一个局限性,这一篇我们就来谈谈这个局限性是怎么产生的,以及如何解决这个问题。

2.2 陀螺仪

为了能够清晰得看到欧拉旋转产生的万向锁现象,我们来观察一个三轴的万向节装置,它也是一个陀螺仪:

大家可以看到中间是一根竖轴穿过一个盘子,而盘子处于高速旋转状态,是陀螺的转子,根据陀螺的定轴性,竖轴也就是陀螺的自转轴在惯性空间内的方向保持不变。在这里我们要说明一点,我们拿陀螺仪出来说明欧拉角的万向锁现象不是因为我们飞机上用的陀螺仪就是这个样子,而是欧拉角中的欧拉旋转与我们陀螺仪的这个旋转状态是一样的,我们拿陀螺仪来解释万向锁产生的原因,而我们之所以称呼它为万向锁,也是因为这是三轴万向节装置中会出现的现象。

我们先来看看这个陀螺仪的旋转状态,然后把飞行器放到陀螺仪旁边进行对比。首先,我们先来解释一下上面那个旋转的陀螺仪的三个环是怎么旋转的,每一个环都连有一根或者两根轴,这根轴就是每个环的旋转轴,我们可以看到最外面那个环旋转不会影响里面两个环的位置,中间那个环的旋转不会影响最里面那个环的位置,但是最外面的那个环会跟着动,而最里面那个环旋转会影响到外面两个环的位置,这种现象跟我们上一次讲欧拉旋转里的三次旋转是一样的,这也是我们拿陀螺仪来解释欧拉角万向锁现象的原因。

2.3 万向锁

我们先来看一下最外侧那个环的旋转情况,我们上次采用的是ZYX的顺序进行旋转,所以最外面那个环对应的就是绕Z轴的旋转:

对应的是飞行器的偏航运动:

中间那个环对应的就是绕Y轴的旋转:

对应的是飞机的俯仰运动:

最里面那个环对应的就是绕X轴的旋转:

对应的是飞机的滚转运动:

但是如果我们的飞机俯仰角到达±90°时,你会发现此时绿色代表的滚转运动和蓝色代表的偏航运动他们的旋转轴重合了,这时候你必须要改变最里面自转轴的角度才能够达到你需要的空间位置,而这是违背陀螺定轴性规律的,所以下图陀螺仪中运动的那个方向其实是被锁住了的,你在俯仰角达到±90°时就不可能有这个方向的运动,这是因为当你俯仰角达到±90°时,你改变了第三个要旋转的轴的方向,它与你第一次旋转的Z轴重合了,所以在空间中失去了一个自由度。

这就是欧拉角的万向锁现象,为了更好的理解这个现象,我们再用自己的手机做一个试验,你把手机屏幕朝上,手机的长边为X轴,短边为Y轴,Z轴垂直屏幕向下,那你先绕Z轴旋转一下手机,假设旋转30度,然后再把手机绕Y轴旋转90度,也就是把手机长边接触桌面竖立起来,这时候你再绕手机的短边旋转,你会发现手机的长边一直定在桌面上不可能脱离桌面,这就是万向锁现象。

2.4 数学解释

最后,再让我们用数据公式来解释一下万向锁现象产生的原因,我们来回顾一下上篇中的旋转矩阵:

如果俯仰角为±90°,那么公式就变成了:

这说明你改变φ和ψ的值都是一个效果,而矩阵的第一行和最后一列始终是保持不变,这说明无论你怎么改变φ和ψ,你的旋转轴一直是Z轴不变,要想改变φ和ψ有不同的效果,你只能是去改变θ的值,以上就是用数学方法来解释为什么俯仰角在±90°时欧拉角出现万向锁的过程。

2.5 小结

万向锁现象是欧拉角表征姿态的一个固有缺陷,所以,在进行姿态解算时往往会优先使用四元数方法进行描述,下篇内容便是关于四元数如何表述姿态,以及欧拉角、四元数、旋转矩阵之间的转换关系。

下篇 四元数

3.1 引言

在中篇,我们解释了欧拉角表示姿态时会遇到万向锁的问题,这会导致同一种空间状态欧拉角的表示方式不唯一,当出现万向锁现象时,同一种旋转有无数种欧拉角表示形式,从而导致了欧拉角差值时出现问题,因为当你俯仰角接近90°时,两组千差万别的欧拉角表示可以是同一种旋转。所以为了解决这些问题,数学上想出了用四元数的形式来表征姿态的方法。

3.2 四元数由来

四元数是由爱尔兰数学家Hamilton发明的,是发明的不是发现的,数学上的很多东西跟物理不一样,它不一定是事物的发展规律,它有时候就是数学家们凭空想象出来的东西,有可能这个东西诞生以后就没有人再用过,也有可能过了很多年,有人发现这个理论可以解释很多现象,或者这个理论可以用来分析很多无法用现有知识解释的现象。所以,大家平常没事做的时候可以天马行空,头脑风暴一下,记得把你想到的东西记下来,没准几百年以后就会有用你名字命名的理论存在了。

回到四元数上来,对于导航飞控的算法,我们需要对四元数有什么了解,其实很简单,我们要知道它的基本运算规律,要知道它以什么样的方式表征姿态,要知道它跟其他两个表征姿态的欧拉角和旋转矩阵方式如何互相转换。除此之外,还有后续如何使用四元数进行建模和控制律设计,如何在导航算法中得到四元数的状态,这些在以后的篇幅中会进行解释,今天,我们先来看看上面几个问题是怎么解决的。

3.3 基本运算规律

四元数是由1个实数加上3个复数组合而成,通常可以表示成w+xi+yj+zk或者(w,(x,y,z)),其中w、x、y、z都是实数,而i^2 = j^2 =k^2 = -1, i^0 = j^0 = k^0 = 1。那对于四元数的运算法则,我们要清楚的有以下几个,假设有两个四元数分别为q1=(w1,(x1,y1,z1))和q2=(w2,(x2,y2,z2)),令v1 = (x1,y1,z1),v2= (x2,y2,z2),则

3.4 四元数的姿态表示

了解了四元数的基本运算规律后,我们来看下它如何表征姿态,假设存在一根旋转轴u,有一个绕u轴旋转σ角度的这么一个旋转存在,那这时候代表这个旋转的四元数是这样子的:

其中u是旋转轴的单位向量,q是一个单位四元数。

那上述这个四元数有什么用呢,它对任何向量施加以下算子运算后可以得到该向量绕u轴旋转σ角度后的向量:

至于为什么会有这个结果,我们这儿就不展开证明了,思路就是你要证明v和w之间的夹角是σ就行,证明的事情交给数学家们去做,我们只需要知道四元数这么写可以用来表征姿态,其实是表征旋转关系,跟旋转矩阵的表示方法类似,只不过它只需要4个元素,而旋转矩阵需要9个元素。

3.5 欧拉角、旋转矩阵、四元数:

四元数转旋转矩阵:

已知四元数:

旋转矩阵为:

旋转矩阵转四元数:

已知旋转矩阵:

则求解四元数时根据的方法就是从四元数转旋转矩阵的公式中得到:

但从上式中是无法确定正负号的,所以又有:

这样只要得到q0到q4中的任意一个就能根据上面的关系求出剩余3个分量的值,假设我们先求q0的值,则有:

从上式中可以看到,求得的四元数有两个,但他们表示的是同一种旋转关系,至于先求q0到q4中的哪个值,在实际使用时应该全部一起求,看哪个值大,就选取哪个,以防止某一项在出现0时无法计算的情况。

欧拉角转四元数:

已知欧拉角:α、β、γ

四元数为:

四元数转欧拉角:

已知四元数:

欧拉角为:

但是当β角度为90度时,四元数反向计算欧拉角时会出现奇点,是无法计算的。因为这时候简化后的四元数是这样的:

所以atan2中后面那一项就变成了0:

这时候我们通常令α=0,然后解出欧拉角的值。

总结

到这里基本上欧拉角、旋转矩阵、四元数的关系就说清楚了,对于四元数,我们不需要去想象它是怎么旋转的,我们只需要知道它是怎么表征姿态的,后续会根据角运动模型进行控制律设计和状态估计,这就足够了,那我们来总结一下这三种方法各自的优缺点:

欧拉角:非常直观,我们可以很容易理解它的意思,也能想象出对应的空间位置,但是存在万向锁现象,导致后面有很多数学问题。

旋转矩阵:旋转矩阵有9个元素,计算繁杂,尤其是求微分时,而且也不直观。

四元数:没有奇点,能表征任何旋转关系,而且表示简单,只有四个元素,计算量小,但是不直观。


本篇文章首发于公众号:无人机系统技术。更多无人机技术相关文章请关注此公众号,有问题也可在公众号底部添加个人微信进行交流。

发布于 2019-08-26

文章被以下专栏收录