type
slug
status
summary
icon
category
date
tags
password
1 前置知识
1.1 刚体运动
- 质点:理想化的物理模型,一个有质量但不考虑体积和形状的点。
- 刚体:理想化的物理模型,在外力作用下,形状和大小都不会发生改变的物体。(不可形变)
- 刚体的运动
- 平动
- 刚体所有点沿着同一方向、相同的速度移动,没有相对运动。
- 转动
- 刚体与质点在运动形式上最大的区别就是,刚体存在转动这一运动形式。
- 刚体绕某个点或某条轴旋转。
在上面提到了转动可以分解为绕某一坐标系三轴的转动的叠加。根据转动所绕的坐标系,可以分为内旋和外旋两种情况。
- 外旋 (Extrinsic Rotation)
- 概念:外旋是围绕固定的外部坐标轴(通常是世界坐标系)旋转。
- 特点:每次旋转都是在原始世界坐标系的基础上进行的。
- 例子:飞机在地球坐标系下:先绕地球的 Z 轴转;再绕地球的 Y 轴转;再绕地球的 X 轴转。
- 内旋 (Intrinsic Rotation)
- 概念:内旋是围绕刚体自身的坐标轴来旋转。
- 特点:这种旋转是“累积”的,每次旋转都基于新的、已经旋转过的坐标系。
- 例子:先绕机体的 Z 轴转;接着绕已经转过的 Y 轴转;最后绕再转过的X轴转。
显然,刚体在一定时间内的运动都可以看作是先进行平动然后再进行转动,也可以看作是先进行转动,然后再进行平动。即所有的运动都可以看作是平动和转动的合成。
由于硬件传感器的限制,我们的四轴飞行器本身无法检测其在大地坐标系中的位置,因此在不额外增加传感器的前提下,平动是无法进行控制的。因此课程,我们对于四轴飞行器刚体的运动仅仅考虑转动。
- 左手系、右手系
- 联系:大拇指-->X轴,食指-->Y轴,中指-->Z轴
- 区别:通过左手/右手来确定三个坐标轴的相对位置,当XY轴一致时,Z轴朝向不同
- 通常我们规定右手系,因为在数学上右手系和向量的叉乘定义的正方向一致
1.2 线性代数
- 回顾:线性代数即对空间变换进行描述。了解同一个点在不同坐标系的关系可以使用线性代数。
- 向量与坐标表示
- 向量的本质:向量是几何对象,它独立存在,不依赖某个坐标系。
- 坐标表示:为了用数字描述向量,我们需要选择一个坐标系(即一组基向量),然后用分量来表示。
- 基底
- 基底是一组线性无关的向量,它们可以“生成”整个向量空间。换句话说,任何向量都可以由基底向量的线性组合唯一表示。
- 在我们整个的研究中,我们一直采用标准正交基进行研究
- 关键点:向量是同一个,但坐标数值取决于“参照物”---基底。参照物不同,向量的坐标表示不同(虽然向量本身没变客观存在)


出现问题:画图法在一些复杂的坐标系里或者高维坐标系无法实现
- 坐标系变化:通过矩阵向量乘法
- 向量的变换的本质,把矩阵所描述的线性变换作用于这个向量上。
- 每个线性变换都可以由一个矩阵来表示。这个矩阵叫做这个矩阵称为“基变换矩阵”或“坐标变换矩阵”。




2 姿态解算
- 姿态
- 直观上说,就是飞机的运动状态。比如飞机机头朝向哪边?飞机机翼水平还是扬起?这些状态的叠加就是飞机的姿态。
- 两个姿态
- 未起飞的飞行器---初始姿态。飞机升空后,每个时刻对应的姿态---实时姿态。
- 根据运动是相对的,当我们确定了初始姿态之后,我们寻找到实时姿态和初始姿态的差异,将差异叠加给初始姿态/初始坐标,就可以得到实时姿态/实时坐标
2.1 地球坐标系和机体坐标系
- 地球坐标系(地理坐标系)E(Earth Frame)
- 概念:该坐标系用于研究飞行器相对于地面的运动状态(即飞行器的轨迹),通常以飞行器的起始地址为原点,XY轴可沿当地经纬线的切线方向,根据右手系判断Z轴方向。Z轴可能与重力加速度的方向相同,也可能相反。
- 用途:常用在导航和飞行器上的坐标系
- 东北天:X轴指向东,Y轴指向北,Z轴指向天(向上)
- 北东地:X轴指向北,Y轴指向东,Z轴指向地(向下,贴合飞行习惯)
- 特点:表示物体在地球上的位置,速度,运动轨迹,全局性(不随飞行器的姿态改变)
- 机体坐标系B(Body Frame)
- 概念:该坐标系用于研究飞行器的姿态。以飞行器的质心为原点,一般根据飞行器自身结构方向构成坐标系,可以以机体质心为原点,前进方向为X轴(拇指指向),Z轴垂直向下,然后食指指向Y轴,更能理解好三个角了。上面说基于飞机建立的坐标系就是一种载体坐标系,可类比到汽车、舰船、人体、动物或手机等各种物体。
- 特点
- 始终“绑在”飞行器上,随姿态变化而转动。
- 传感器(加速度计、陀螺仪、气速管)的输出,通常就是机体坐标系下的量。
- 姿态
- 直观上说,就是飞机的运动状态。比如飞机机头朝向哪边?飞机机翼水平还是扬起?这些状态的叠加就是飞机的姿态。
- 抽象来说,姿态是“机体坐标系”与“地球坐标系”之间的转换关系。
- 数学层面,姿态 = 一个坐标变换(姿态角/欧拉角/旋转矩阵 / 四元数),用于把机体系和地球系联系起来。
2.2 姿态角
- 三个姿态角
- 在飞行器中,飞行姿态通常用三个姿态角来描述。以飞机自身的中心建立坐标系,当飞机绕坐标轴旋转的时候,会分别影响偏航角(ψ)、横滚角(φ)及俯仰角(θ)。
- 如果我们知道飞机初始状态是图1中左上角的状态,只要想办法测量出基于原始状态的三个姿态角的变化量,再进行叠加,就可以获知它的实时姿态了。


yaw(偏航ψ), pitch(俯仰θ), roll(横滚φ),对应z,y,x三个坐标轴
- 偏航角(Yaw):绕Z轴旋转,改变机体的朝向。
- 俯仰角(Pitch):绕Y轴旋转,改变机体的上下倾斜。
- 横滚角(Roll):绕X轴旋转,改变机体的左右倾斜。
2.3 欧拉角
- 自由度
- 概念:指为了完全确定一个系统在空间中的位姿(位置和姿态)所需的独立参数的个数。(自变量的个数)
- 例子
- 空间中的一个点:要确定它的位置,我们需要3个独立参数,比如
(x, y, z)坐标。所以,一个点的自由度是3(3个平移自由度)。 - 空间中的一个刚体(比如一个飞机模型)
- 确定其位置:我们需要3个参数
(x, y, z)来确定其重心在哪里。 - 确定其姿态:我们还需要3个参数来确定它绕着重心的旋转姿态(机头朝哪、左翼朝哪)。
- 所以,一个自由刚体在三维空间中的总自由度是6(3个平移 + 3个旋转)。
- 欧拉定理
- 概念:在三维空间中,刚体绕某个固定点的任意旋转,都等价于绕某一条过该点的轴的单一旋转。
- 作用:任何三维空间中的旋转,都可以用一个唯一的旋转轴(一个方向向量)和一个绕该轴的旋转角度来描述。
- 欧拉角
- 概念:用依次绕三个相互垂直坐标轴的旋转角度来描述一个坐标系相对于另一个坐标系的旋转。旋转的角度被欧拉角。旋转轴是待转动坐标系的某一对应坐标轴
- 本质:将一次完整的旋转分成三次绕坐标轴的旋转
- 用途:欧拉角用来描述刚体/移动坐标系在一个固定坐标系中的姿态。
- 万向锁
- 图2-1 展示了欧拉角表示姿态的最大问题,在 ZYX 坐标系中,先绕Z轴旋转,再绕Y轴旋转90 度,此时,空间中X轴初始的Z轴完全重合。即如果第二次旋转的角度为90度,那么在本次旋转中,就会失去一个自由度。在后续我们也会通过数学角度来证明万向锁。
- 欧拉角的缺点
- 一个姿态对应一个旋转矩阵,旋转矩阵相同姿态相同。当pitch≠90°的时候,如果Rz(yaw)Ry(pitch)RX(roll)表示一个姿态,那么RZ(30°)RY(pitch)Rx(10°)代表的姿态≠RZ(45°)RY(pitch)Rx(25°)代表的姿态.但是当pitch=90°的时候,X轴和Z轴重合,改变X轴和改变Z轴只能得到一个效果的改变(见视频),通过代数也可以知道当(yaw-roll)的角度一致,姿态矩阵相同,所描述的姿态相同。
- 也就是说当我们改变两个角yaw和roll,并不会改变姿态。两个变量失去独立性,塌缩成一个自由度。
- 如果我们已知一个姿态,存在多解(yaw,roll)。这代表姿态编码不是一一对应,可能会导致歧义导致系统无法分辨。


3 旋转矩阵与姿态矩阵
- 旋转矩阵
- 回顾我们前面线代的知识,在二维的XY坐标系的变换,通过左乘一个矩阵实现。拓展到三维,可以看作绕Z轴旋转了一定的角度,从而导致XY轴坐标系的变换。所以绕一个轴旋转一个角度可以对应左乘一个旋转矩阵。
- 强调:绕轴旋转
- 旋转次序
- 旋转顺序不能随意改变,要注意描述时所参考的坐标系。
- 原因:绕某一坐标轴旋转一个角度可以用一个旋转矩阵表示。但由于矩阵乘法不满足交换律,不同的旋转顺序会导致最终结果不同。为了唯一确定一个姿态,我们必须事先规定旋转的顺序。
- 我们通常固定旋转方向为ZYX,这个和飞行员自身的操作顺序相符的,先确定方向(即先确定方向,再确定俯仰,再确定横滚)

- 姿态矩阵
- 概念:三个基本机体旋转矩阵(每个旋转对应一个矩阵)相乘来得到。
- 特点:旋转矩阵的乘积顺序必须与欧拉角的旋转顺序相匹配。
- 用途:姿态矩阵是把机体坐标系下的向量转换到世界坐标系下的矩阵(Body->World)
3.1 用外旋推导地球旋转矩阵
我们来思考一下:物体旋转是可以理解为坐标系反向旋转。坐标系不转,物体自身的旋转==物体不转,坐标系反向旋转。
所以存在两种矩阵,我们组给它的名字是地球旋转矩阵和机体旋转矩阵。
回顾一下前面的内旋和外旋的知识点。
地球旋转矩阵:绕固定的地球坐标系旋转,又叫外旋矩阵。
机体旋转矩阵:绕上一次旋转后的机体坐标系旋转,旋转累积,又叫内旋矩阵。
我们按照飞行员的操作习惯选取ZYX的旋转次序。前面提到每一次完整的转动可以看作刚体按一定次序分别绕三个坐标轴的旋转合成,因此我们根据ZYX的旋转次序计算刚体绕固定地球坐标系的ZYX轴的三个地球旋转矩阵。
三个地球旋转矩阵推导思路非常类似,下面以绕z轴的情况为例展开。
我们先令初始机体坐标系与地球坐标系重合,O点是刚体质心,P点是刚体上一点且取向量OP为单位向量。由于刚体形状不变,所以任意选择P点效果相同。向量OP绕地球坐标系z轴(固定轴)进行转动。

3.2 用机体旋转矩阵推导姿态矩阵
- 固连
- 坐标系和刚体固连接。因为它们相对静止。所以研究的机体向量相对于地球系的旋转矩阵RZ,RY,RX,接下来需要研究的是地球向量相对于机体系的旋转矩阵。这个矩阵本质上是描述机体系之间的变换。
- 左乘和右乘
- 注意:刚体不转坐标系旋转的情况下,由于每一次转动得到的坐标都是基于上一次旋转后得到的坐标系得出,而不是根据标准正交坐标系(地球坐标系)得出,由此不能简单使用线性代数左乘运算得出姿态矩阵。我们是通过线性代数的计算化简得出右乘的思路的
- 机体旋转矩阵=坐标系旋转矩阵=旋转矩阵,在数值上=RZ,RY,RX
- 因为从思维上也可以理解,就是我们算出的Reb1是针对于上一状态e的旋转矩阵,它相当于只旋转了Z轴,当计算Rb1b2的时候,是针对于b1进行研究,b2只旋转了Y轴。所以用基底计算的时候可以将b1摆正,再研究下一个状态b2相对于b1的基底表示。
- 然后e到b1绕Z轴转的在数值上等于RZ,那么可以合理推测b1到b2的旋转矩阵在数值上等于RY……




3.3 旋转矩阵的性质与使用
正交矩阵

Q:机体上的加速度计陀螺仪测量的到底是什么,如何转换为我们可用的数据?
- 陀螺仪
- 陀螺仪测量的是瞬时加速度,输出是一个三维向ω机,单位 rad/s。这三个分量是绕机体系 x、y、z 轴的瞬时角速度。有了角速度,积分就能得到姿态角(欧拉角/四元数/方向余弦矩阵)。
- 换句话说:陀螺仪告诉你机体“在自转”,转得有多快。
- 加速度计
- 测量的物理量:比力 (Specific Force),也叫固有加速度 (Proper Acceleration)
- 加速度计测量的不是我们通常理解的运动加速度。它测量的是非引力引起的加速度。
- f=a-g
- f:加速度计测量值(比力)
- a:飞行器相对于地球的真实加速度
- g:引力加速度
- 如何将这些数据转换成可用信息
- 如何把加速度计和陀螺仪测到的机体系数据,变成我们在地球系(或导航系)下可用的数据。
- 陀螺仪提供的信息可以得到旋转矩阵Reb
- 比如说fe=Rebfb,ae=fe+ge,ve(t)=积分aedt,re(t)=积分vedt.

综上所述得出的结论如下

4 轴角法
4.1 轴角法表示三维旋转
- 引入:
- 欧拉角
- 优点:直观,符合人类对“绕轴旋转”的直觉(如俯仰、偏航、滚转)。
- 缺点:存在万向锁问题——当两个旋转轴对齐时,系统会丢失一个自由度,导致无法唯一表示某些姿态,比如说俯仰角等于90°的时候发生万向锁,此时偏航和横滚变成同一个动作,丢失一个自由度也就是说无法区分某些旋转。或者是姿态表示不唯一。
- 旋转矩阵
- 优点:无奇异性(不会在某些角度卡住/失效,无论物体怎么转,总能用一个合法的3*3矩阵精准表示),可直接用于坐标变换。
- 缺点:参数冗余。一个3×3的旋转矩阵包含9个数据,但三维旋转仅有3个自由度(两个参数确定轴的方向,一个参数确定轴的角度)。实际上,旋转矩阵必须满足正交性( )和行列式为 1(det(R)=1 ),这些约束使得9个数据中中只有3个信息是有效和独立的,其余6个是由这3个决定的。
因此,我们需要一种既能避免奇异性,又参数紧凑(仅用3个参数)的旋转表示方法——轴角法。
- 定义
- 任何在三维空间中的旋转,都可以被一个过原点的轴和一个绕这个轴旋转的角度来唯一定义。

- 数学表示:
- 旋转轴是一个在三维空间中的单位向量,我们用一个三维向量来表示。满足。
- 旋转角是一个标量值,表示绕旋转轴转动的角度。 表示绕该轴逆时针旋转的角度(按右手定则)。 我们可以使用右手法则来确定旋转的正方向:右手握住旋转轴,大拇指指向轴的正方向,四指弯曲的方向就是旋转的正方向。
- 轴角旋转的数学表示可以表示为一个有序对:。整个旋转由这个有序对唯一确定。
- 轴角法看似用了4个数(3 个轴分量 + 1 个角度),但由于u是单位向量,满足 ,这个约束方程将三个分量绑定在一起使其不能独立变化。在数学上约束会减少一个自由度。因此实际自由度为3(2 个用于方向,1个用于角度),符合三维旋转的自由度。
有了轴和角,我们如何实际计算一个点旋转后的新位置呢?即向量v‘和v的关系?下面是罗德里格旋转公式的推导。
4.2 罗德里格斯旋转公式

第一步:分解向量v
将向量v分解成两个部分平行于旋转轴的部分:和垂直旋转轴的部分
。



注意这个辅助向量:w方向垂直于黑板向里
更加详细的解释一下第三步(罗德里格斯公式最巧妙的地方)

我们以底部的w作为第一个基底(如图所示,就是xy平面的y轴。)原始的垂直分量作为第二个基底(x轴)。所以就可以得出



这里再回顾一下叉乘
叉乘的计算这里记得j的符号是-1,所以得出来是1.


每一个向量都可以用矩阵表示,我们使用去掉箭头的同名符号为该向量的矩阵。(其实没什么区别)
所以,我们要做的就是:把罗德里格斯公式中的每一项,都写成
“某个矩阵 × v ” 的形式。


这里可以反向验证:(3*3的单位矩阵)*(3*1)的向量=3*1的矩阵,也就是原来的向量。




- 它们的乘积是一个3×3矩阵(外积):这个矩阵有个名字—投影矩阵。任意向量v左乘这个矩阵,结果就是(u·v)u,即v在u 上的投影!







一些反思:

叉乘结果是i,j,k之和我能理解,但是为什么会变成一个3*1的矩阵呢?这个地方省略了什么我有点没懂。





4.1.3 性质推导


现在我们进入更深入的性质推导——从旋转矩阵反推轴角表示 (uθ) 。这是非常实用的内容,比如在机器人、计算机视觉中,我们经常需要“从旋转矩阵恢复旋转轴和角度”。
4.1.3.1 已知旋转矩阵R求旋转轴

旋转矩阵每个元素的表示如下:

观察比如说r12和r21,r13和r31.发现只有反对称矩阵的贡献部分不同,呈现符号相反数值一样的规律。









4.1.3.2 已知旋转矩阵R求旋转角度




4.1.4 总结
- 公式:
- 轴角与旋转矩阵之间的转化:
- 轴角法的优缺点总结:
- 优点:
- 极其直观:旋转被描述为“绕某轴转多少度”,符合人类对三维旋转的直觉(源自欧拉旋转定理)。
- 无万向锁:不像欧拉角在特定姿态下会丢失自由度,轴角法对任意旋转都有定义(除奇点外)。
- 紧凑(4个量表示):仅需4个实数:单位轴u=(ux,uy,uz)(3个)+角度θ(1个)。若使用旋转向量ω=θu,则只需3个参数,达到最小表示。
- 缺点:
- 存在奇点
- 奇点:一个数学对象在某个点上行为变得不确定、不唯一或无法定义。
- 当角度为0(或者等价的=2πkk∈Z)时,此时旋转为恒等变换,即无论绕哪个轴旋转0度,结果都一样=> 因此旋转轴不唯一。
- 后果:表示不唯一,同一个旋转对应无穷个(u,0)。在数值计算/优化中,可能导致不稳定/歧义。
- 注意:这与欧拉角的“万向锁”不同——万向锁是自由度丢失,而轴角法的奇点是表示不唯一,但自由度并未丢失。
- 插值困难
- 插值:给定两个旋转 R=(u1,)和 R2=(u2,),希望找到一条平滑、最短路径(测地线)上的中间旋转 R(t),使得动画或过渡看起来自然(如机器人运动、3D动画) => 可以计算出每一帧的位置
- 插值困难:在给定的数学表示下,无法通过简单、线性的方法在两个数据点之间生成正确且视觉自然的中间过渡值。

正因为轴角法在插值上的困难,产生了一种更好的工具——四元数。
- 作者:Sparkle_Yuyu
- 链接:https://imyuyu.top/article/Quadcopter3-1
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。





