大话多旋翼飞行器—欧拉角与四元数
Y’
Y
C
O
C’
A
y’
X’
B’
y
B
r
X’
x
X
如图所示,假设坐标系从 OXY 绕 Z 轴负方向逆时针旋转 θ 角,变为坐标系 OX’Y’。向量 OA
在 OXY 坐标系下的坐标为(x,y),在 OX’Y’坐标系下的坐标为(x’,y’)。下面计算(x,y)与(x’,y’)
的关系。
x
cos
y
sin
sin
cos
sin
cos
sin
cos
cos
sin
cos
sin
y
y
'
x
x
,令
x
y
A
x
y
或
'
'
'
'
'
'
'
x
y
x
y
cos
sin
x
y
sin
cos
或
'
'
x
y
cos
sin
sin
cos
x
y
,令
B
cos
sin
sin
cos
可以看出 A=B’,互为转置矩阵
推广到 3 维的情况,有
x
y
z
cos
sin
0
sin
cos
0
0
0
1
x
y
z
'
'
'
和
'
'
x
y
z
'
cos
sin
0
sin
cos
0
0
0
1
x
y
z
由于是绕 Z 轴旋转,我们给转角加一个下标,表示绕 Z 轴的旋转,即
x
y
z
cos
z
sin
z
0
sin
z
cos
z
0
0
0
1
'
'
x
y
z
'
和
'
'
x
y
z
'
z
z
cos
sin
0
sin
z
cos
z
0
0
0
1
x
y
z
同理,我们可以得到绕 Y 轴旋转 y 后,两个坐标系下同一个向量的坐标关系
x
y
z
cos
y
0
sin
y
0 sin
y
0
1
0 cos
y
'
'
x
y
z
'
和
'
'
x
y
z
'
cos
y
0
sin
y
0
1
0
y
sin
0
cos
y
x
y
z
以及绕 X 轴旋转 x 后的关系
0
sin
cos
1
0
0 cos
x
0 sin
x
x
y
z
==============================================================================
坐标系小知识:
0
cos
x
sin
x
0
sin
x
cos
x
x
y
z
1
0
0
x
x
'
'
x
y
z
'
'
'
x
y
z
'
和
坐标系是指由固定在一起的三个相互垂直的单位矢量组成的右手坐标系,三个单位矢量
的符号可以人为规定,如 xˆ 、 yˆ 及 zˆ ,所谓右手坐标系是指伸出右手,四指先指向 xˆ 的正方
向,再转过 90 度绕向 yˆ 的正向,此时拇指指向 zˆ 的正向的坐标系,若指向 zˆ 的负向,则为
左手坐标系,我们所使用的都是右手坐标系。
通常在大地上要建立一个全局坐标系,称为 GCS(Global Coordinate System),用来对整
个多体系统提供一个统一的参照坐标系。在物体上要建立一个局部坐标系,称为 BCS(Body
Coordinate System),一方面用来描述物体在 GCS 内的位置和姿态,另一方面,为物体上的
点或其它坐标系提供局部的确定位置和姿态的标准。此外,在物体上可以根据需要建立其它
的坐标系,例如,为描述物体上的约束及列写约束方程,需要建立约束的坐标系。
//==========================================================================
X
Y
Z
Y
Z
Y
X
X
Z
B1
B2
B3
在四轴或者其他飞行器中,常用上图中的三种坐标系固连在飞行器质心上,作为飞行器载体
坐标系,通过计算载体坐标系与固连于大地上的参考坐标系(有些文献中叫世界坐标系,
world frame)之间的位置关系,进而得到飞行器的当前姿态。如下图中,宾夕法尼亚的四轴,
就是使用 B3 坐标系作为载体坐标系(body frame)
而在“Calibration and data fusion solution for the miniature attitude and heading reference system”
一文,以及 “Autonomous Quadrotor Flight Using a Vision System And Accommodating Frames
Misalignment”则使用的是B1坐标系,如下图
使用哪种坐标系,并没有严格的规定,可以根据自己的习惯,或者相关领域的要求进行选择。
《捷联惯性导航技术》一书中使用B1坐标系,如下图,xb指向机头方向,yb垂直于xb向右,
zb垂直机身向下。我也是使用的这种坐标系。
xb
yb
zb
//=====================================================================
欧拉角
从一个坐标系到另一个坐标系的变换,可以通过依次绕不同的坐标轴的3次连续转动来定义。
从物理角度看,欧拉角表示法可能是最简单的方法之一。(出自《捷联惯性导航技术》)
注意一个问题:维基百科上关于欧拉角的动态定义描述如下
“我们也可以给予欧拉角两种不同的动态定义。一种是绕着固定于刚体的坐标轴的三个旋转
的复合;另外一种是绕着实验室参考轴的三个旋转的复合。用动态的定义,我们能更了解,
欧拉角在物理上的含义与应用。特别注意,以下的描述, XYZ 坐标轴是旋转的刚体坐标轴;
而 xyz 坐标轴是静止不动的实验室参考轴。
A) 绕着 XYZ 坐标轴旋转:最初,两个坐标系统 xyz 与 XYZ 的坐标轴都是重叠著的。
开始先绕着 Z-轴旋转 角值。然后,绕着 X-轴旋转 角值。最后,绕着 Z-轴作角值
的旋转。
B) 绕着 xyz 坐标轴旋转:最初,两个坐标系统 xyz 与 XYZ 的坐标轴都是重叠著的。开
始先绕着 z-轴旋转 角值。然后,绕着 x-轴旋转 角值。最后,绕着 z-轴作角值 的
旋转”
我们通常使用的欧拉角是服从描述A)的。也就是绕着固定于刚体的坐标轴的三个旋转的复
合。为什么呢?因为对物体施加的转矩通常都是相对于物体自身的坐标轴的,控制上更直观
更容易。
另一个问题,欧拉角的三次旋转的旋转轴和旋转顺序。根据维基百科的说法,“在经典力
学里,时常用 zxz 顺规来设定欧拉角;照着第二个转动轴的轴名,简称为 x 顺规。另外,
还有别种欧拉角组。合法的欧拉角组中,唯一的限制是,任何两个连续的旋转,必须绕着
不同的转动轴旋转。因此,一共有 12 种顺规。例如,y 顺规,第二个转动轴是 y‐轴,时
常用在量子力学,核子物理学,粒子物理学。另外,还有一种顺规,xyz 顺规,是用在航空
航天工程学”。
欧拉角的12种顺序分别为:
X‐Z‐X, X‐Y‐X, Y‐X‐Y, Y‐Z‐Y, Z‐Y‐Z, Z‐X‐Z, X‐Z‐Y, X‐Y‐Z, Y‐X‐Z, Y‐Z‐X, Z‐Y‐X, Z‐X‐Y。
对于同样一个姿态,用不同的欧拉角顺序描述时,对应的欧拉角是不同的。但它们都是正确
的。注意,三个欧拉角只是描述绕三个轴转过了三个角度,只有将欧拉角应用于惯性导航领
域时才有偏航角、俯仰角和横滚角的概念。
知道了欧拉角的物理意义,那么怎样在数学上用欧拉角来计算姿态呢?(假设欧拉角已知的
前提下)。这样说好像不太对劲。换种说法,知道了坐标系2相对于坐标系1旋转的欧拉角,
已知一个向量在坐标系1下的坐标,如何求这个向量在坐标系2下的坐标呢?
首先明确一下我们的坐标系以及欧拉角的顺序。
yB
zB
yW
xB
xW
zW
如上图所示,建立载体坐标系B和世界坐标系W(世界坐标系始终不运动,是静态的参照,
载体坐标系相对世界坐标系运动,运动包括平移和转动,对于姿态解算来说,我们只考虑转
动),这种世界坐标系有的地方也叫做北-东-地坐标系。关于绕轴旋转的正方向,按照《捷
联惯性导航技术》一书中的规定,从原点看,沿每根轴的顺时针方向定义为这根轴的正向转
动。简单点说,就是服从右手定则(拇指指向轴的正方向,其余四指握紧的方向就是旋转的
正方向)。上图中所标示的就是旋转的正方向。
我们使用Z-Y-X欧拉角描述载体坐标系B相对于世界坐标系W的姿态(由于运载体坐标系是
固连于你要计算姿态的那个东西上,比如飞行器或者空鼠,所以欧拉角描述的就是那个东西
相对于世界坐标系的姿态),根据前文的描述,Z-Y-X欧拉角就是指:初始状态B系与W系
重合,然后B系先绕zB轴旋转一个角度a1,然后绕yB轴旋转一个角度a2,然后绕xB轴旋转一
个角度a3,得到了B系(也就是飞行器或其他东西的最终姿态)。这种欧拉角顺序有的书上
称为“航空次序欧拉角(aerospace sequence Euler angles)”。
其中,
a1通常用表示,代表方向或偏航(heading or yaw)
a2通常用表示,代表升降或俯仰(elevation or pitch)
a3通常用表示,代表倾斜或横滚(bank or roll)
注意:有些书上a3用φ表示,其实和φ是同一个字母的两种写法,本质是一样的。
小常识:
根据第一部分的介绍,可以知道,经过三个欧拉角转动后,世界坐标系下的一个矢量
B
B
B
x
y
z
0
cos
sin
rW=(xW,yW,zW)与其对应的运载体坐标系下的矢量rB=(xB,yB,zB)之间的关系可以表示为
sin
0
sin
cos
cos cos
cos
sin sin sin
cos sin sin
sin sin cos
cos sin cos
sin cos
cos cos
cos cos
sin cos
cos
0
sin
cos sin
sin sin
cos
sin
0
sin
cos
0
sin
0
cos
sin
W
W
x
y
z
W
0
0
1
1
0
0
0
1
0
W
W
x
y
z
W
用简化的写法为 B
r
C r ,其中 B
B W
W
WC 称为从坐标系W到坐标系B的变换矩阵。
BC 又叫做欧拉角形式的方向余弦矩阵。
C , W
B
W
T
反过来, W
r
C r ,其中
W B
B
C
W
B
四元数
基本概念:
根据维基百科的说法:三维旋转可以用欧拉角或单位四元数表示。
一个单位四元数可以描述为:
q
q
2
q
0
q
3
q
1
T
q
q
2
0
q
2
1
q
2
2
q
2
3
1
四元数可以看做绕一个轴的一个旋转
q
0
q
1
q
q
3
/ 2
/ 2 cos
/ 2 cos
/ 2 cos
cos
sin
sin
sin
x
y
z
2
其中,是旋转角,单位为弧度。
cos x ,
弦,也就是旋转轴与参考坐标系三个轴夹角的余弦值。
cos y 和
cos z 是旋转轴的方向余
而《捷联惯性导航技术》一书中是这样定义四元数的:四元数姿态表达式是一个四参数的表
达式。它基于的思路是:一个坐标系到另一个坐标系的变换可以通过绕一个定义在参考坐标
系中的矢量μ的单次转动来实现。四元数用符号q表示,它是一个具有4个元素的矢量,这些
元素是该矢量方向和转动大小的函数。
q
a
b
c
d
x
cos
sin
/
sin
/
/
sin
/ 2
/ 2
/ 2
/ 2
y
z
/ y
相当于
式中,x ,y 和z 是角矢量μ的分量,是其大小。
定义μ的大小和方向是使参考坐标系绕μ转动一个角度,就能与载体坐标系重合。
这个定义看着有点绕,其实矢量μ就是指维基百科定义中的旋转轴,
cos x ,
cos z ,相当于。容易乱的
就是这个,它在这里既代表旋转轴μ的长度,又代表旋转角,这并不冲突,明白了这一点,
就会发现其实这两种定义是一致的。
cos y ,
相当于
/ z
/ x
相当于
四元数,欧拉角和方向余弦的关系
这里直接给出公式,具体推导可以参考《捷联惯性导航技术》第三章的内容,以及秦永元的
《惯性导航》第九章的内容。注意,这里给出的公式只是对应 Z‐Y‐X 欧拉角,即本文定义的
欧拉角顺序,如果使用其他欧拉角顺序,这个公式就不适用了。关于欧拉角与四元数之间相
互转换的公式,可以参考“Euler Angles, Quaternions, and Transformation Matrices”一文中的
附录 A,以及“Representing Attitude: Euler Angles, Unit Quaternions, and Rotation Vectors” 一
文的第八部分。这两个文章中把所有的 12 种欧拉角顺序下的公式都给出了,我们可以直接
使用,非常方便。
下面仅给出 Z‐Y‐X 欧拉角与四元数相互转换的公式:参见“Representing Attitude: Euler Angles,
Unit Quaternions, and Rotation Vectors” 一文的 8.2 小节
公式中缩写 c 代表 cos,s 代表 sin。
===============================================================================
=========
关于飞行器用加速度计估计当前加速度,速度和位移的问题
这里的加速度,速度和位移不是指机体坐标系下的,也不是参考坐标系下的,而是把参考
坐标系旋转了一个当前偏航角得到的坐标系下的,暂时将其称为飞行器的水平坐标系。
关于加速度计的原理可以参考《捷联惯性导航技术》一书的第六章,其本质可以看做一个
弹簧质量块。需要注意的几句话“加速度计对重力加速度 g 不敏感,因而,其输出与沿敏感
器敏感轴每单位质量所受的非重力成正比,该力称为作用在敏感器上的比力。”这句话怎么
理解呢?如果对重力加速度不敏感,那为什么加计放在桌面上会有 1 个 g 的输出呢?我是这
么理解的,就是只有重力作用时,加计是没有输出的。可以这样想,如果加计在重力场中做
自由落体运动,那么加计只受重力作用,这时它是没有输出的。《捷联惯性导航技术》一书
中是这样解释的:
以MPU6050为例来分析一下加速度计的输出与实际飞行器加速度的关系。
MPU6050的坐标系如上图所示,直箭头的正方向就表示:如果这个芯片在该方向上有非重
力加速度,那么该轴输出就是正值。那重力是个什么角色呢?考虑芯片水平放置在桌子上的
情况,如果没有桌面支撑,那么芯片就会向下做自由落体,加速度向下为1g,而在桌面支撑
下,芯片是静止的,也就是说桌面提供了1g向上的加速度,与重力抵消了。这样,加速度计
z轴感应到的非重力加速度也就是桌面支持力产生的向上的1g加速度,该加速度方向与z轴正
方向一致,因而输出是正值,即+1g。这里有点绕,不过仔细想想,搞清楚什么是非重力加
速度,应该可以理解。
飞行器的真实加速度是指合外力产生的加速度,根据牛顿第二定律:F 合=ma。这个合外力
包括重力,而加速度计的测量值却不包含重力产生的加速度,因为,要由加计得到真实加速
度,需要将其测量值加上(矢量和)重力在该轴的分量(注意方向)。
计算飞行器水平坐标系下的加速度
水平坐标系下的一个矢量rH=(xH,yH,zH)与其对应的运载体坐标系下的矢量rB=(xB,yB,zB)
之间的关系可以表示为