线性代数是无人机建模与控制的数学基石。本文从工程实际出发,系统讲解向量空间、矩阵、旋转、四元数、特征值等核心概念,每个知识点都给出数学定义、推导过程与无人机应用场景,帮你建立「定义 → 公式推导 → 物理直觉 → 代码实现」的完整认知链路。


一、为什么无人机工程师需要线性代数

打开任何一份无人机动力学代码,你会发现线性代数无处不在:

  • 坐标变换:地面站用经纬高(NED 系),飞控内部用机体系,传感器各有安装系——在它们之间转换全靠矩阵乘法 [1]
  • 姿态表示:四旋翼「朝哪飞、歪了多少」用旋转矩阵四元数描述 [5]
  • 动力学方程Iω˙+ω×Iω=τ\mathbf{I}\dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times \mathbf{I}\boldsymbol{\omega} = \boldsymbol{\tau} 里的惯性张量 I\mathbf{I} 是一个 3×33\times3 矩阵 [7]
  • 控制器设计:PID 调参要看特征值判断稳定性,卡尔曼滤波核心是矩阵方程 [9]
  • 传感器融合:多传感器标定要解超定方程组,用最小二乘拟合 [3]

本文不是线性代数教科书的复刻,而是挑出无人机建模中真正高频使用的知识点,用工程例子串起来。如果你已经在看 AirSim 源码或 PX4 飞控代码,这篇文章能帮你把那些矩阵运算「看懂」。


二、向量空间与坐标系:数学框架与物理实体

2.1 向量空间的严格定义

在深入无人机应用之前,先明确向量空间(Vector Space)的数学定义 [1][2]:

定义:一个集合 VV 连同标量域 F\mathbb{F}(通常取实数域 R\mathbb{R}),如果定义了加法标量乘法两种运算,且满足以下八条公理,则称 (V,F)(V, \mathbb{F}) 为向量空间:

公理 表达式 含义
加法交换律 u+v=v+u\mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u} 顺序无关
加法结合律 (u+v)+w=u+(v+w)(\mathbf{u}+\mathbf{v})+\mathbf{w} = \mathbf{u}+(\mathbf{v}+\mathbf{w}) 括号无关
零向量存在 0:v+0=v\exists\,\mathbf{0}: \mathbf{v}+\mathbf{0}=\mathbf{v} 存在”不动”元素
逆元素存在 (v):v+(v)=0\exists\,(-\mathbf{v}): \mathbf{v}+(-\mathbf{v})=\mathbf{0} 可以”抵消”
标量乘法结合律 a(bv)=(ab)va(b\mathbf{v}) = (ab)\mathbf{v} 缩放可组合
单位标量 1v=v1\cdot\mathbf{v} = \mathbf{v} 乘1不变
标量对向量的分配律 a(u+v)=au+ava(\mathbf{u}+\mathbf{v}) = a\mathbf{u}+a\mathbf{v} 缩放可分配
向量对标量的分配律 (a+b)v=av+bv(a+b)\mathbf{v} = a\mathbf{v}+b\mathbf{v} 缩放可分配

为什么要关心这个定义? 因为无人机状态量(位置、速度、角速度等)之所以能相加、能缩放、能做线性组合,正是因为它们生活在 R3\mathbb{R}^3 这个向量空间里。而旋转不满足加法交换律(先偏航后俯仰 ≠ 先俯仰后偏航),所以旋转不是向量空间的元素——这个区分在后面讨论旋转矩阵和四元数时至关重要。

2.2 基底、维数与坐标

定义(线性无关):向量组 {v1,,vn}\{\mathbf{v}_1, \ldots, \mathbf{v}_n\}线性无关的,当且仅当:

c1v1+c2v2++cnvn=0c1=c2==cn=0 c_1\mathbf{v}_1 + c_2\mathbf{v}_2 + \cdots + c_n\mathbf{v}_n = \mathbf{0} \quad \Longrightarrow \quad c_1 = c_2 = \cdots = c_n = 0

定义(基底):向量空间 VV 的一组基底是一组线性无关的向量 {e1,,en}\{\mathbf{e}_1, \ldots, \mathbf{e}_n\},使得 VV 中任何向量都可以唯一表示为它们的线性组合:

v=v1e1+v2e2+v3e3 \mathbf{v} = v_1\mathbf{e}_1 + v_2\mathbf{e}_2 + v_3\mathbf{e}_3

系数 (v1,v2,v3)(v_1, v_2, v_3) 就是 v\mathbf{v} 在这组基底下的坐标

关键认识同一个物理向量(比如无人机的速度),在不同基底(坐标系)下有不同的坐标表示。坐标变换的本质就是基底之间的转换 [1]。

2.3 无人机常用坐标系

坐标系 缩写 基底定义 典型用途 参考
北-东-地 NED ex\mathbf{e}_x 指北、ey\mathbf{e}_y 指东、ez\mathbf{e}_z 朝地心 PX4 飞控、MAVLink [7]
东-北-天 ENU ex\mathbf{e}_x 指东、ey\mathbf{e}_y 指北、ez\mathbf{e}_z 朝天 ROS、部分学术文献 [8]
机体系 Body ex\mathbf{e}_x 机头、ey\mathbf{e}_y 右翼、ez\mathbf{e}_z 朝下 飞控内环、传感器 [7]
惯性系 Inertial 固定在地面的参考基底 动力学推导 [6]

NED 与 ENU 之间的转换:它们之间的关系是一个固定的坐标变换矩阵:

vENU=[010100001]vNED \mathbf{v}_{\text{ENU}} = \begin{bmatrix} 0 & 1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & -1 \end{bmatrix} \mathbf{v}_{\text{NED}}

即交换前两个分量、翻转第三个分量(z 朝下变 z 朝上)。搞混这个转换是新手炸机的常见原因

2.4 向量的内积与外积

定义(内积/点积):Rn\mathbb{R}^n 上的标准内积定义为 [1]:

a,b=ab=i=1naibi=abcosθ \langle\mathbf{a}, \mathbf{b}\rangle = \mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = |\mathbf{a}||\mathbf{b}|\cos\theta

它引出了两个核心概念:

  • 范数(长度):a=aa|\mathbf{a}| = \sqrt{\mathbf{a} \cdot \mathbf{a}}
  • 正交性abab=0\mathbf{a} \perp \mathbf{b} \Leftrightarrow \mathbf{a} \cdot \mathbf{b} = 0

工程用途:

  • 计算推力在竖直方向的分量:Tz=Tz^=TcosαT_z = \mathbf{T} \cdot \hat{\mathbf{z}} = |\mathbf{T}|\cos\alpha,其中 α\alpha 是推力向量与竖直方向的夹角
  • 判断两个向量是否垂直(正交基底的验证)

定义(外积/叉积):仅在 R3\mathbb{R}^3 中定义 [1]:

a×b=[aybzazbyazbxaxbzaxbyaybx]=det[exeyezaxayazbxbybz] \mathbf{a} \times \mathbf{b} = \begin{bmatrix} a_y b_z - a_z b_y \\ a_z b_x - a_x b_z \\ a_x b_y - a_y b_x \end{bmatrix} = \det\begin{bmatrix} \mathbf{e}_x & \mathbf{e}_y & \mathbf{e}_z \\ a_x & a_y & a_z \\ b_x & b_y & b_z \end{bmatrix}

核心性质:

  • 反交换律a×b=(b×a)\mathbf{a} \times \mathbf{b} = -(\mathbf{b} \times \mathbf{a})
  • 几何意义:结果向量垂直于 a\mathbf{a}b\mathbf{b} 所成平面,大小 a×b=absinθ|\mathbf{a} \times \mathbf{b}| = |\mathbf{a}||\mathbf{b}|\sin\theta
  • 力矩公式τ=r×F\boldsymbol{\tau} = \mathbf{r} \times \mathbf{F}(力臂叉乘力等于力矩)[6]

数值示例:假设电机 1 位于机体系 r1=[0.175,0.175,0]T\mathbf{r}_1 = [0.175,\, 0.175,\, 0]^T m,产生推力 F1=[0,0,4.0]T\mathbf{F}_1 = [0,\, 0,\, -4.0]^T N,则力矩为:

τ1=r1×F1=[0.175×00×(4.0)0×00.175×(4.0)0.175×00.175×0]=[00.70] N\cdotpm \boldsymbol{\tau}_1 = \mathbf{r}_1 \times \mathbf{F}_1 = \begin{bmatrix} 0.175 \times 0 - 0 \times (-4.0) \\ 0 \times 0 - 0.175 \times (-4.0) \\ 0.175 \times 0 - 0.175 \times 0 \end{bmatrix} = \begin{bmatrix} 0 \\ 0.7 \\ 0 \end{bmatrix} \text{ N·m}

这个力矩绕 yy 轴(俯仰轴),使机体抬头。


三、线性映射与矩阵:变换的语言

3.1 线性映射的严格定义

定义(线性映射):一个函数 T:VWT: V \to W(从向量空间 VV 到向量空间 WW)称为线性映射(或线性变换),如果对所有 u,vV\mathbf{u}, \mathbf{v} \in V 和标量 cc 满足 [1][2]:

T(u+v)=T(u)+T(v)(保加法) T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v}) \qquad \text{(保加法)} T(cv)=cT(v)(保标量乘法) T(c\mathbf{v}) = cT(\mathbf{v}) \qquad \text{(保标量乘法)}

等价地,可以合并为一条:T(au+bv)=aT(u)+bT(v)T(a\mathbf{u} + b\mathbf{v}) = aT(\mathbf{u}) + bT(\mathbf{v})

定理:有限维向量空间之间的每一个线性映射都可以用一个矩阵表示 [1]。选定输入和输出空间的基底后,线性映射 TT 对应唯一的矩阵 A\mathbf{A},使得 T(x)=AxT(\mathbf{x}) = \mathbf{A}\mathbf{x}

这就是为什么在无人机代码中,旋转、坐标变换、混控——所有的”输入向量→输出向量”操作都写成矩阵乘法。

3.2 矩阵乘法:变换的组合

矩阵乘法定义为 (AB)ij=kAikBkj(\mathbf{AB})_{ij} = \sum_k A_{ik} B_{kj},其核心意义是变换的串联 [1]:

T2T1C=BA T_2 \circ T_1 \quad \longleftrightarrow \quad \mathbf{C} = \mathbf{B}\mathbf{A}

如果 A\mathbf{A} 把向量从坐标系 1 变到坐标系 2,B\mathbf{B} 从坐标系 2 变到坐标系 3,则 C=BA\mathbf{C} = \mathbf{BA} 直接从坐标系 1 到坐标系 3。

关键性质

  • 不可交换ABBA\mathbf{AB} \neq \mathbf{BA}(一般情况)——先偏航再俯仰 ≠ 先俯仰再偏航
  • 结合律成立(AB)C=A(BC)(\mathbf{AB})\mathbf{C} = \mathbf{A}(\mathbf{BC})——多次变换可以任意分组
  • 转置规则(AB)T=BTAT(\mathbf{AB})^T = \mathbf{B}^T\mathbf{A}^T——注意顺序反转

3.3 行列式:矩阵的”体积缩放因子”

定义n×nn \times n 方阵 A\mathbf{A} 的行列式 det(A)\det(\mathbf{A}) 是一个标量,几何上表示矩阵对应的线性变换对体积的缩放倍数(带符号)[1][2]。

3×33\times3 矩阵的行列式公式(Sarrus 法则): det(A)=a11(a22a33a23a32)a12(a21a33a23a31)+a13(a21a32a22a31) \det(\mathbf{A}) = a_{11}(a_{22}a_{33} - a_{23}a_{32}) - a_{12}(a_{21}a_{33} - a_{23}a_{31}) + a_{13}(a_{21}a_{32} - a_{22}a_{31})

核心性质与无人机应用

性质 公式 工程含义
det(R)=1\det(\mathbf{R}) = 1 旋转矩阵 旋转不改变体积,不包含反射
det(A)=0\det(\mathbf{A}) = 0 矩阵奇异 变换”压扁”了空间,信息丢失,方程组无唯一解
det(AB)=det(A)det(B)\det(\mathbf{AB}) = \det(\mathbf{A})\det(\mathbf{B}) 乘法规则 组合变换的缩放是各自缩放的乘积
det(A1)=1/det(A)\det(\mathbf{A}^{-1}) = 1/\det(\mathbf{A}) 逆矩阵 逆变换”放大”回原来的体积

3.4 转置、逆与正交矩阵

转置 AT\mathbf{A}^T(AT)ij=Aji(A^T)_{ij} = A_{ji},行列互换。

逆矩阵 A1\mathbf{A}^{-1}:满足 AA1=A1A=I\mathbf{A}\mathbf{A}^{-1} = \mathbf{A}^{-1}\mathbf{A} = \mathbf{I}。逆矩阵存在 \Leftrightarrow det(A)0\det(\mathbf{A}) \neq 0。物理含义:撤销变换

定义(正交矩阵):若方阵 Q\mathbf{Q} 满足 [1]:

QTQ=QQT=I \mathbf{Q}^T\mathbf{Q} = \mathbf{Q}\mathbf{Q}^T = \mathbf{I}

Q\mathbf{Q} 为正交矩阵,此时 Q1=QT\mathbf{Q}^{-1} = \mathbf{Q}^T

正交矩阵的等价刻画

  • 列向量(行向量)构成标准正交基
  • 保持向量长度不变:Qv=v|\mathbf{Q}\mathbf{v}| = |\mathbf{v}|
  • 保持向量夹角不变:Qu,Qv=u,v\langle\mathbf{Q}\mathbf{u}, \mathbf{Q}\mathbf{v}\rangle = \langle\mathbf{u}, \mathbf{v}\rangle

工程意义:旋转矩阵是正交矩阵,所以逆旋转只需转置,计算代价极低(9 次赋值 vs 通用逆的 O(n3)O(n^3) 运算):

vbody=RwbTvworld(世界系→机体系,转置即可) \mathbf{v}_{\text{body}} = \mathbf{R}_{wb}^T \mathbf{v}_{\text{world}} \qquad \text{(世界系→机体系,转置即可)}

3.5 矩阵的秩

定义(秩):矩阵 A\mathbf{A} rank(A)\text{rank}(\mathbf{A}) 是其列向量组的最大线性无关组的大小,等价于行空间的维数 [1]。

秩与方程组解的关系(Rouché-Capelli 定理):

对于 Ax=b\mathbf{Ax} = \mathbf{b}A\mathbf{A}m×nm \times n 矩阵):

  • rank(A)=rank([Ab])\text{rank}(\mathbf{A}) = \text{rank}([\mathbf{A}|\mathbf{b}]):有解
  • rank(A)=n\text{rank}(\mathbf{A}) = n:解唯一
  • rank(A)<n\text{rank}(\mathbf{A}) < n:有无穷多解(解空间维数 =nrank(A)= n - \text{rank}(\mathbf{A})

无人机应用:四旋翼混控矩阵 M\mathbf{M}4×44 \times 4rank(M)=4\text{rank}(\mathbf{M}) = 4,所以控制指令到电机转速的映射是唯一的。六旋翼的 M\mathbf{M}4×64 \times 6rank(M)=4<6\text{rank}(\mathbf{M}) = 4 < 6,有 2 个自由度的冗余——可用于优化功耗或容错。


四、旋转矩阵与 SO(3) 群:姿态表示的核心

4.1 旋转矩阵的严格定义

定义:旋转矩阵 R\mathbf{R} 属于特殊正交群 SO(3)SO(3)(Special Orthogonal Group),满足 [4][5]:

SO(3)={RR3×3RTR=I,  det(R)=+1} SO(3) = \{\mathbf{R} \in \mathbb{R}^{3\times3} \mid \mathbf{R}^T\mathbf{R} = \mathbf{I},\; \det(\mathbf{R}) = +1\}

两个条件缺一不可:

  • RTR=I\mathbf{R}^T\mathbf{R} = \mathbf{I}(正交):保长保角
  • det(R)=+1\det(\mathbf{R}) = +1(特殊):排除反射(det=1\det = -1 的是"镜像+旋转")

列向量的几何意义R=[exeyez]\mathbf{R} = [\mathbf{e}_x' \mid \mathbf{e}_y' \mid \mathbf{e}_z'],三列分别是新坐标系的三个基向量在原坐标系中的表示。

4.2 SO(3) 的群结构

SO(3)SO(3) 构成一个**李群**(Lie Group),具有以下性质 [4]:
群公理 在 SO(3) 中的表现 物理含义
封闭性 R1R2SO(3)\mathbf{R}_1\mathbf{R}_2 \in SO(3) 两次旋转的结果仍是旋转
结合律 (R1R2)R3=R1(R2R3)(\mathbf{R}_1\mathbf{R}_2)\mathbf{R}_3 = \mathbf{R}_1(\mathbf{R}_2\mathbf{R}_3) 旋转可任意分组
单位元 ISO(3)\mathbf{I} \in SO(3) “不转”也是合法旋转
逆元 R1=RTSO(3)\mathbf{R}^{-1} = \mathbf{R}^T \in SO(3) 任何旋转都可以”转回来”
不可交换 R1R2R2R1\mathbf{R}_1\mathbf{R}_2 \neq \mathbf{R}_2\mathbf{R}_1(一般) 旋转顺序很重要!

不可交换性的直观演示:拿一本书,先绕竖轴转 90°再绕前后轴转 90°,与反过来的结果完全不同。这就是为什么欧拉角必须指定旋转顺序。

4.3 绕单轴旋转的推导

以**绕 z 轴旋转角度 ψ\psi**为例,从几何推导旋转矩阵 [1][5]。

xyxy 平面内,点 (x,y)(x, y) 绕原点逆时针旋转 ψ\psi 后变为 (x,y)(x', y')

x=xcosψysinψ x' = x\cos\psi - y\sin\psi y=xsinψ+ycosψ y' = x\sin\psi + y\cos\psi

推导过程:设原始点的极坐标为 (r,α)(r, \alpha),则 x=rcosαx = r\cos\alphay=rsinαy = r\sin\alpha。旋转后角度变为 α+ψ\alpha + \psi

x=rcos(α+ψ)=r(cosαcosψsinαsinψ)=xcosψysinψ x' = r\cos(\alpha+\psi) = r(\cos\alpha\cos\psi - \sin\alpha\sin\psi) = x\cos\psi - y\sin\psi y=rsin(α+ψ)=r(sinαcosψ+cosαsinψ)=ycosψ+xsinψ y' = r\sin(\alpha+\psi) = r(\sin\alpha\cos\psi + \cos\alpha\sin\psi) = y\cos\psi + x\sin\psi zz 分量不变,写成矩阵形式: Rz(ψ)=[cosψsinψ0sinψcosψ0001] \mathbf{R}_z(\psi) = \begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix}

验证正交性

RzTRz=[cosψsinψ0sinψcosψ0001][cosψsinψ0sinψcosψ0001]=[cos2ψ+sin2ψ000cos2ψ+sin2ψ0001]=I \mathbf{R}_z^T\mathbf{R}_z = \begin{bmatrix} \cos\psi & \sin\psi & 0 \\ -\sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} \cos\psi & -\sin\psi & 0 \\ \sin\psi & \cos\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} = \begin{bmatrix} \cos^2\psi+\sin^2\psi & 0 & 0 \\ 0 & \cos^2\psi+\sin^2\psi & 0 \\ 0 & 0 & 1 \end{bmatrix} = \mathbf{I} \quad \checkmark

类似推导可得另外两个基本旋转矩阵:

绕 x 轴旋转 ϕ\phi(滚转 Roll)

Rx(ϕ)=[1000cosϕsinϕ0sinϕcosϕ] \mathbf{R}_x(\phi) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi & \cos\phi \end{bmatrix}

绕 y 轴旋转 θ\theta(俯仰 Pitch)

Ry(θ)=[cosθ0sinθ010sinθ0cosθ] \mathbf{R}_y(\theta) = \begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}

4.4 组合旋转:ZYX 欧拉角旋转矩阵的完整推导

PX4/AirSim 中常用 ZYX 顺序(先偏航 ψ\psi、再俯仰 θ\theta、再滚转 ϕ\phi)[5][7]:

Rwb=Rz(ψ)Ry(θ)Rx(ϕ) \mathbf{R}_{wb} = \mathbf{R}_z(\psi)\,\mathbf{R}_y(\theta)\,\mathbf{R}_x(\phi)

逐步展开:先计算 RyRx\mathbf{R}_y\mathbf{R}_x

RyRx=[cθsθsϕsθcϕ0cϕsϕsθcθsϕcθcϕ] \mathbf{R}_y\mathbf{R}_x = \begin{bmatrix} c\theta & s\theta s\phi & s\theta c\phi \\ 0 & c\phi & -s\phi \\ -s\theta & c\theta s\phi & c\theta c\phi \end{bmatrix}

再左乘 Rz\mathbf{R}_z

Rwb=[cψcθcψsθsϕsψcϕcψsθcϕ+sψsϕsψcθsψsθsϕ+cψcϕsψsθcϕcψsϕsθcθsϕcθcϕ] \mathbf{R}_{wb} = \begin{bmatrix} c\psi c\theta & c\psi s\theta s\phi - s\psi c\phi & c\psi s\theta c\phi + s\psi s\phi \\ s\psi c\theta & s\psi s\theta s\phi + c\psi c\phi & s\psi s\theta c\phi - c\psi s\phi \\ -s\theta & c\theta s\phi & c\theta c\phi \end{bmatrix}

其中 cc 表示 cos\cosss 表示 sin\sin。这个 9 元素矩阵虽然看起来复杂,但它编码了完整的三维姿态信息。

实际应用:四旋翼平动动力学方程 mr¨=RwbFb+mgm\ddot{\mathbf{r}} = \mathbf{R}_{wb}\mathbf{F}_b + m\mathbf{g},其中 Fb=[0,0,T]T\mathbf{F}_b = [0,\, 0,\, -T]^T 是机体系下的总推力 [6][7]。展开后可以看到:

mx¨=(cψsθcϕ+sψsϕ)(T)+0 m\ddot{x} = (c\psi s\theta c\phi + s\psi s\phi)(-T) + 0 my¨=(sψsθcϕcψsϕ)(T)+0 m\ddot{y} = (s\psi s\theta c\phi - c\psi s\phi)(-T) + 0 mz¨=(cθcϕ)(T)+mg m\ddot{z} = (c\theta c\phi)(-T) + mg

悬停时 ϕ=θ=0\phi = \theta = 0,得 z¨=T/m+g=0\ddot{z} = -T/m + g = 0,即 T=mgT = mg,推力等于重力。

4.5 旋转矩阵性质速查

性质 公式 证明要点
正交性 RT=R1\mathbf{R}^T = \mathbf{R}^{-1} 定义
保范性 Rv=v\lVert\mathbf{Rv}\rVert = \lVert\mathbf{v}\rVert Rv2=vTRTRv=vTv\lVert\mathbf{Rv}\rVert^2 = \mathbf{v}^T\mathbf{R}^T\mathbf{R}\mathbf{v} = \mathbf{v}^T\mathbf{v}
行列式 det(R)=1\det(\mathbf{R}) = 1 定义中的”特殊”条件
封闭性 R1R2SO(3)\mathbf{R}_1\mathbf{R}_2 \in SO(3) (R1R2)T(R1R2)=R2TR1TR1R2=I(\mathbf{R}_1\mathbf{R}_2)^T(\mathbf{R}_1\mathbf{R}_2) = \mathbf{R}_2^T\mathbf{R}_1^T\mathbf{R}_1\mathbf{R}_2 = \mathbf{I}
自由度 3(9 个元素,6 个约束) 正交条件给出 6 个方程

五、欧拉角与万向锁:直觉与陷阱

5.1 欧拉角的定义与直觉

欧拉角用三个标量 (ϕ,θ,ψ)(\phi, \theta, \psi) 参数化 SO(3)SO(3),与飞行员的直觉一致 [5]:

  • ϕ(π,π]\phi \in (-\pi, \pi](Roll/滚转):飞机左右倾斜
  • θ[π/2,π/2]\theta \in [-\pi/2, \pi/2](Pitch/俯仰):机头抬起或低下
  • ψ(π,π]\psi \in (-\pi, \pi](Yaw/偏航):机头朝向

优势:直观、仅 3 个参数(最小参数化)、便于人机交互。

注意:欧拉角有 12 种旋转顺序(XYZ, XZY, YXZ, YZX, ZXY, ZYX, XYX, XZX, YXY, YZY, ZXZ, ZYZ),航空领域最常用 ZYX(Tait-Bryan 角),务必确认所用约定 [5][6]。

5.2 万向锁的数学本质

定理(毛球定理,Hairy Ball Theorem 的推论 [4]):不存在 SO(3)SO(3)R3\mathbb{R}^3 的全局光滑参数化。

具体到 ZYX 欧拉角,当 θ=±π/2\theta = \pm\pi/2 时出现万向锁(Gimbal Lock)[5]。

严格推导θ=π/2\theta = \pi/2 时,cosθ=0\cos\theta = 0sinθ=1\sin\theta = 1,旋转矩阵退化为:

Rθ=π/2=[0cosψsinϕsinψcosϕcosψcosϕ+sinψsinϕ0sinψsinϕ+cosψcosϕsinψcosϕcosψsinϕ100] \mathbf{R}\big|_{\theta=\pi/2} = \begin{bmatrix} 0 & \cos\psi\sin\phi - \sin\psi\cos\phi & \cos\psi\cos\phi + \sin\psi\sin\phi \\ 0 & \sin\psi\sin\phi + \cos\psi\cos\phi & \sin\psi\cos\phi - \cos\psi\sin\phi \\ -1 & 0 & 0 \end{bmatrix}

利用三角恒等式 cos(AB)=cosAcosB+sinAsinB\cos(A-B) = \cos A\cos B + \sin A\sin Bsin(AB)=sinAcosBcosAsinB\sin(A-B) = \sin A\cos B - \cos A\sin B,简化为:

Rθ=π/2=[0sin(ψϕ)cos(ψϕ)0cos(ψϕ)sin(ψϕ)100] \mathbf{R}\big|_{\theta=\pi/2} = \begin{bmatrix} 0 & -\sin(\psi - \phi) & \cos(\psi - \phi) \\ 0 & \cos(\psi - \phi) & \sin(\psi - \phi) \\ -1 & 0 & 0 \end{bmatrix}

此时旋转矩阵只依赖于差值 (ψϕ)(\psi - \phi),而不是 ψ\psiϕ\phi 各自的值——丢失了一个自由度

从微分角度理解:欧拉角到角速度的映射矩阵(Jacobian)为 [5]:

ω=[10sinθ0cosϕcosθsinϕ0sinϕcosθcosϕ][ϕ˙θ˙ψ˙] \boldsymbol{\omega} = \begin{bmatrix} 1 & 0 & -\sin\theta \\ 0 & \cos\phi & \cos\theta\sin\phi \\ 0 & -\sin\phi & \cos\theta\cos\phi \end{bmatrix} \begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix}

θ=±π/2\theta = \pm\pi/2 时,cosθ=0\cos\theta = 0,该矩阵的行列式 =cosθ=0= \cos\theta = 0,矩阵奇异——无法从角速度唯一地反解出欧拉角的导数。这意味着积分会失败。

对无人机的实际影响

  • 正常飞行中 θ<45°|\theta| < 45°,万向锁不会触发
  • 但在仿真和数值积分中,接近 ±90°\pm 90° 时会导致数值爆炸
  • 因此 PX4、AirSim 内部用四元数积分,仅在显示时转成欧拉角 [7]

六、四元数:工程中姿态表示的首选

6.1 姿态表示方式的对比

表示方式 参数个数 约束数 自由度 万向锁 组合运算 插值 归一化
欧拉角 3 0 3 需转为矩阵 不需要
旋转矩阵 9 6 3 矩阵乘法 需要(Gram-Schmidt)
四元数 4 1 3 四元数乘法 好(SLERP) 简单(除以模长)
轴角 4 1 3 需转换 归一化轴

四元数在无万向锁计算效率插值质量上完胜,这就是飞控代码的首选 [5][10]。

6.2 四元数的数学基础

定义(Hamilton,1843 [10]):四元数是一种扩展了复数的超复数系统。四元数 q\mathbf{q} 定义为:

q=qw+qxi+qyj+qzk \mathbf{q} = q_w + q_x\mathbf{i} + q_y\mathbf{j} + q_z\mathbf{k}

其中虚单位满足 Hamilton 的基本方程:

i2=j2=k2=ijk=1 \mathbf{i}^2 = \mathbf{j}^2 = \mathbf{k}^2 = \mathbf{ijk} = -1

由此推导出虚单位的乘法表:

×\times i\mathbf{i} j\mathbf{j} k\mathbf{k}
i\mathbf{i} 1-1 k\mathbf{k} j-\mathbf{j}
j\mathbf{j} k-\mathbf{k} 1-1 i\mathbf{i}
k\mathbf{k} j\mathbf{j} i-\mathbf{i} 1-1

注意:ij=k\mathbf{ij} = \mathbf{k}ji=k\mathbf{ji} = -\mathbf{k},四元数乘法不可交换

单位四元数与旋转的对应(Euler 旋转定理 [4]):

任何旋转都可以表示为绕某个单位轴 u^=(ux,uy,uz)\hat{\mathbf{u}} = (u_x, u_y, u_z) 旋转角度 α\alpha。对应的单位四元数为:

q=cosα2+sinα2(uxi+uyj+uzk)=[cosα2uxsinα2uysinα2uzsinα2] \mathbf{q} = \cos\frac{\alpha}{2} + \sin\frac{\alpha}{2}(u_x\mathbf{i} + u_y\mathbf{j} + u_z\mathbf{k}) = \begin{bmatrix} \cos\frac{\alpha}{2} \\ u_x\sin\frac{\alpha}{2} \\ u_y\sin\frac{\alpha}{2} \\ u_z\sin\frac{\alpha}{2} \end{bmatrix}

为什么是半角 α/2\alpha/2 因为旋转操作需要左右各乘一次四元数(qvq\mathbf{q}\mathbf{v}\mathbf{q}^*),每次贡献 α/2\alpha/2,合计才是完整的 α\alpha。这也导致了 q\mathbf{q}q-\mathbf{q} 表示同一个旋转(double cover 性质)[5]。

6.3 四元数的核心运算

四元数乘法(Hamilton 积):

pq=[pwqwpxqxpyqypzqzpwqx+pxqw+pyqzpzqypwqypxqz+pyqw+pzqxpwqz+pxqypyqx+pzqw] \mathbf{p} \otimes \mathbf{q} = \begin{bmatrix} p_w q_w - p_x q_x - p_y q_y - p_z q_z \\ p_w q_x + p_x q_w + p_y q_z - p_z q_y \\ p_w q_y - p_x q_z + p_y q_w + p_z q_x \\ p_w q_z + p_x q_y - p_y q_x + p_z q_w \end{bmatrix}

也可以写成矩阵形式 pq=[p]Lq=[q]Rp\mathbf{p} \otimes \mathbf{q} = [\mathbf{p}]_L\,\mathbf{q} = [\mathbf{q}]_R\,\mathbf{p},其中 [5]:

p_w & -p_x & -p_y & -p_z \\ p_x & p_w & -p_z & p_y \\ p_y & p_z & p_w & -p_x \\ p_z & -p_y & p_x & p_w \end{bmatrix}

旋转向量:用四元数 q\mathbf{q} 旋转向量 v\mathbf{v}

v=qv~q \mathbf{v}' = \mathbf{q} \otimes \tilde{\mathbf{v}} \otimes \mathbf{q}^*

其中 v~=[0,vx,vy,vz]T\tilde{\mathbf{v}} = [0, v_x, v_y, v_z]^T 是纯四元数,q=[qw,qx,qy,qz]T\mathbf{q}^* = [q_w, -q_x, -q_y, -q_z]^T 是共轭。

组合旋转:先旋转 q1\mathbf{q}_1,再旋转 q2\mathbf{q}_2

qtotal=q2q1 \mathbf{q}_{\text{total}} = \mathbf{q}_2 \otimes \mathbf{q}_1

注意顺序:后执行的旋转在左边(与旋转矩阵的组合规则一致)。

共轭 = 逆旋转:对于单位四元数,q1=q\mathbf{q}^{-1} = \mathbf{q}^*,类似旋转矩阵的 R1=RT\mathbf{R}^{-1} = \mathbf{R}^T

6.4 四元数与旋转矩阵的互转

四元数 → 旋转矩阵(推导见 [5]):

R(q)=[12(qy2+qz2)2(qxqyqwqz)2(qxqz+qwqy)2(qxqy+qwqz)12(qx2+qz2)2(qyqzqwqx)2(qxqzqwqy)2(qyqz+qwqx)12(qx2+qy2)] \mathbf{R}(\mathbf{q}) = \begin{bmatrix} 1 - 2(q_y^2+q_z^2) & 2(q_x q_y - q_w q_z) & 2(q_x q_z + q_w q_y) \\ 2(q_x q_y + q_w q_z) & 1 - 2(q_x^2+q_z^2) & 2(q_y q_z - q_w q_x) \\ 2(q_x q_z - q_w q_y) & 2(q_y q_z + q_w q_x) & 1 - 2(q_x^2+q_y^2) \end{bmatrix}

旋转矩阵 → 四元数(Shepperd 方法 [10],数值稳定):

qw=121+R11+R22+R33 q_w = \frac{1}{2}\sqrt{1 + R_{11} + R_{22} + R_{33}}

qw0q_w \neq 0 时:

qx=R32R234qw,qy=R13R314qw,qz=R21R124qw q_x = \frac{R_{32} - R_{23}}{4q_w}, \quad q_y = \frac{R_{13} - R_{31}}{4q_w}, \quad q_z = \frac{R_{21} - R_{12}}{4q_w}

qw0q_w \approx 0(接近 180°180° 旋转)时,需要选择其他分量作为主元避免除零,这是代码实现中的常见细节。

四元数 → 欧拉角(ZYX 顺序 [5]):

ϕ=atan2(2(qwqx+qyqz),  12(qx2+qy2)) \phi = \text{atan2}\big(2(q_w q_x + q_y q_z),\; 1 - 2(q_x^2 + q_y^2)\big) θ=arcsin(2(qwqyqzqx)) \theta = \arcsin\big(2(q_w q_y - q_z q_x)\big) ψ=atan2(2(qwqz+qxqy),  12(qy2+qz2)) \psi = \text{atan2}\big(2(q_w q_z + q_x q_y),\; 1 - 2(q_y^2 + q_z^2)\big)

注意使用 atan2 而非 atan 以正确处理象限。

6.5 姿态微分方程:四元数积分

推导:设机体角速度为 ω=[ωx,ωy,ωz]T\boldsymbol{\omega} = [\omega_x, \omega_y, \omega_z]^T(由陀螺仪测得),四元数的时间导数为 [5][9]:

q˙=12qω~ \dot{\mathbf{q}} = \frac{1}{2}\mathbf{q} \otimes \tilde{\boldsymbol{\omega}}

其中 ω~=[0,ωx,ωy,ωz]T\tilde{\boldsymbol{\omega}} = [0, \omega_x, \omega_y, \omega_z]^T。展开为矩阵形式:

q˙=12Ω(ω)q,Ω(ω)=[0ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0] \dot{\mathbf{q}} = \frac{1}{2}\boldsymbol{\Omega}(\boldsymbol{\omega})\,\mathbf{q}, \qquad \boldsymbol{\Omega}(\boldsymbol{\omega}) = \begin{bmatrix} 0 & -\omega_x & -\omega_y & -\omega_z \\ \omega_x & 0 & \omega_z & -\omega_y \\ \omega_y & -\omega_z & 0 & \omega_x \\ \omega_z & \omega_y & -\omega_x & 0 \end{bmatrix}

离散化(一阶近似,适用于小步长 Δt\Delta t):

qk+1qk+Δt2Ω(ωk)qk=(I4+Δt2Ω)qk \mathbf{q}_{k+1} \approx \mathbf{q}_k + \frac{\Delta t}{2}\boldsymbol{\Omega}(\boldsymbol{\omega}_k)\,\mathbf{q}_k = \left(\mathbf{I}_4 + \frac{\Delta t}{2}\boldsymbol{\Omega}\right)\mathbf{q}_k

积分后必须重新归一化qq/q\mathbf{q} \leftarrow \mathbf{q}/|\mathbf{q}|,因为数值误差会使 q|\mathbf{q}| 偏离 1。

更高精度的方法(如四阶 Runge-Kutta 或矩阵指数 eΔt2Ωe^{\frac{\Delta t}{2}\boldsymbol{\Omega}})见 Solà [5] 的详细讨论。

6.6 SLERP:四元数的球面插值

定义(Spherical Linear Interpolation [10]):在两个姿态 q0\mathbf{q}_0q1\mathbf{q}_1 之间以恒定角速度插值:

SLERP(q0,q1,t)=sin((1t)Ω)sinΩq0+sin(tΩ)sinΩq1 \text{SLERP}(\mathbf{q}_0, \mathbf{q}_1, t) = \frac{\sin((1-t)\Omega)}{\sin\Omega}\mathbf{q}_0 + \frac{\sin(t\Omega)}{\sin\Omega}\mathbf{q}_1

其中 cosΩ=q0q1\cos\Omega = \mathbf{q}_0 \cdot \mathbf{q}_1t[0,1]t \in [0, 1]

应用:无人机轨迹规划中的姿态平滑过渡——欧拉角的线性插值会导致不均匀的角速度和万向锁风险,SLERP 则保证均匀、无奇异的姿态插值。


七、叉积与反对称矩阵:力矩计算的数学本质

7.1 叉积的矩阵表示

定理:叉积 a×b\mathbf{a} \times \mathbf{b} 可以等价地表示为矩阵-向量乘法 [1]:

a×b=[a]×b \mathbf{a} \times \mathbf{b} = [\mathbf{a}]_\times\, \mathbf{b}

其中 [a]×[\mathbf{a}]_\timesa\mathbf{a}反对称矩阵(skew-symmetric matrix):

证明:直接展开 [a]×b[\mathbf{a}]_\times\,\mathbf{b} 并与叉积定义对比即可验证。

为什么要矩阵化? 把叉积写成矩阵乘法后,可以利用线性代数的全套工具:求导(ddt[a×b]\frac{d}{dt}[\mathbf{a}\times\mathbf{b}] 变成矩阵乘法的 Leibniz 法则)、与其他矩阵运算组合、以及在代码中用高效的 BLAS 库计算。

7.2 反对称矩阵的性质

定义:矩阵 S\mathbf{S} 是反对称的,当且仅当 ST=S\mathbf{S}^T = -\mathbf{S}

性质 公式 证明思路
主对角线全零 Sii=0S_{ii} = 0 Sii=SiiS_{ii} = -S_{ii}
特征值为纯虚数 λ=0\lambda = 0±ia\pm i\lVert\mathbf{a}\rVert 反对称矩阵的特征值满足 λˉ=λ\bar{\lambda} = -\lambda [1]
迹为零 tr(S)=0\text{tr}(\mathbf{S}) = 0 主对角线全零之和
向量空间 dim=3\dim = 3(对 3×33\times3 3 个独立参数 (ax,ay,az)(a_x, a_y, a_z)

关键定理3×33\times3 反对称矩阵与 R3\mathbb{R}^3 向量一一对应,这个对应关系建立了 SO(3)SO(3)李代数 so(3)\mathfrak{so}(3),是理解旋转微分和小角度近似的基础 [4]。

7.3 在无人机动力学中的应用

力矩计算:电机 ii 的推力 Fi\mathbf{F}_i 在力臂 ri\mathbf{r}_i 处产生的力矩 [6]:

τi=ri×Fi=[ri]×Fi \boldsymbol{\tau}_i = \mathbf{r}_i \times \mathbf{F}_i = [\mathbf{r}_i]_\times\, \mathbf{F}_i

欧拉刚体方程中的陀螺效应项 [6][7]:

Iω˙=τω×(Iω) \mathbf{I}\dot{\boldsymbol{\omega}} = \boldsymbol{\tau} - \boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega})

其中 ω×(Iω)=[ω]×Iω\boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega}) = [\boldsymbol{\omega}]_\times \mathbf{I}\boldsymbol{\omega}陀螺力矩——旋转刚体因角动量方向改变而产生的额外力矩。

数值示例:假设四旋翼以角速度 ω=[0,0,2]T\boldsymbol{\omega} = [0, 0, 2]^T rad/s(绕 z 轴偏航),惯性张量 I=diag(0.0125,0.0125,0.025)\mathbf{I} = \text{diag}(0.0125, 0.0125, 0.025)

Iω=[000.05], \mathbf{I}\boldsymbol{\omega} = \begin{bmatrix} 0 \\ 0 \\ 0.05 \end{bmatrix}, \quad ω×(Iω)=[020200000][000.05]=[0.100] N\cdotpm \boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega}) = \begin{bmatrix} 0 & -2 & 0 \\ 2 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix}\begin{bmatrix} 0 \\ 0 \\ 0.05 \end{bmatrix} = \begin{bmatrix} -0.1 \\ 0 \\ 0 \end{bmatrix} \text{ N·m}

因为 Ixx=IyyI_{xx} = I_{yy}(轴对称),陀螺力矩仅当 IxxIyyI_{xx} \neq I_{yy} 时才产生耦合效果。当四旋翼挂载不对称负载时,这一项变得不可忽略。

7.4 Rodrigues 旋转公式与矩阵指数

定理(Rodrigues,1840 [4]):绕单位轴 u^\hat{\mathbf{u}} 旋转角度 α\alpha 的旋转矩阵可以表示为:

R(u^,α)=I+sinα[u^]×+(1cosα)[u^]×2 \mathbf{R}(\hat{\mathbf{u}}, \alpha) = \mathbf{I} + \sin\alpha\,[\hat{\mathbf{u}}]_\times + (1 - \cos\alpha)\,[\hat{\mathbf{u}}]_\times^2

推导:利用矩阵指数 R=eα[u^]×\mathbf{R} = e^{\alpha[\hat{\mathbf{u}}]_\times},并将指数展开为 Taylor 级数 [4]:

eα[u^]×=k=0(α[u^]×)kk! e^{\alpha[\hat{\mathbf{u}}]_\times} = \sum_{k=0}^{\infty} \frac{(\alpha[\hat{\mathbf{u}}]_\times)^k}{k!}

利用 [u^]×3=[u^]×[\hat{\mathbf{u}}]_\times^3 = -[\hat{\mathbf{u}}]_\times(可验证),奇数幂和偶数幂分别收敛到 sin\sincos\cos 级数,得到上述封闭形式。

应用场景

  • 从陀螺仪的角速度向量 ωΔt\boldsymbol{\omega}\Delta t 直接构造旋转增量矩阵
  • 小角度近似:当 α1\alpha \ll 1 时,sinαα\sin\alpha \approx \alpha(1cosα)0(1-\cos\alpha) \approx 0,得到 RI+α[u^]×\mathbf{R} \approx \mathbf{I} + \alpha[\hat{\mathbf{u}}]_\times

八、特征值与特征向量:惯性张量与稳定性分析

8.1 基本定义与求解

定义:方阵 ARn×n\mathbf{A} \in \mathbb{R}^{n \times n}特征值 λ\lambda特征向量 v0\mathbf{v} \neq \mathbf{0} 满足 [1][2]:

Av=λv \mathbf{A}\mathbf{v} = \lambda\mathbf{v}

求解方法:上式等价于 (AλI)v=0(\mathbf{A} - \lambda\mathbf{I})\mathbf{v} = \mathbf{0}。要有非零解,需要:

det(AλI)=0(特征方程/特征多项式) \det(\mathbf{A} - \lambda\mathbf{I}) = 0 \qquad \text{(特征方程/特征多项式)}

对于 n×nn \times n 矩阵,这是一个 nn 次多项式,有 nn 个根(含重根,可能为复数)。

2×22\times2 示例:设 A=[4213]\mathbf{A} = \begin{bmatrix} 4 & 2 \\ 1 & 3 \end{bmatrix}

det[4λ213λ]=(4λ)(3λ)2=λ27λ+10=(λ5)(λ2)=0 \det\begin{bmatrix} 4-\lambda & 2 \\ 1 & 3-\lambda \end{bmatrix} = (4-\lambda)(3-\lambda) - 2 = \lambda^2 - 7\lambda + 10 = (\lambda-5)(\lambda-2) = 0

特征值 λ1=5\lambda_1 = 5λ2=2\lambda_2 = 2

λ1=5\lambda_1 = 5(A5I)v=[1212]v=0(\mathbf{A} - 5\mathbf{I})\mathbf{v} = \begin{bmatrix} -1 & 2 \\ 1 & -2 \end{bmatrix}\mathbf{v} = \mathbf{0},解得 v1=[21]\mathbf{v}_1 = \begin{bmatrix} 2 \\ 1 \end{bmatrix}

8.2 谱定理:实对称矩阵的对角化

定理(谱定理 [1][2]):实对称矩阵 A=AT\mathbf{A} = \mathbf{A}^T 具有以下性质:

  1. 所有特征值都是实数
  2. 不同特征值对应的特征向量相互正交
  3. 存在正交矩阵 P\mathbf{P}(列为特征向量),使得 A=PΛPT\mathbf{A} = \mathbf{P}\boldsymbol{\Lambda}\mathbf{P}^T

其中 Λ=diag(λ1,λ2,,λn)\boldsymbol{\Lambda} = \text{diag}(\lambda_1, \lambda_2, \ldots, \lambda_n) 是特征值对角矩阵。

证明核心思路

  1. 实对称矩阵的特征值为实数:设 Av=λv\mathbf{Av} = \lambda\mathbf{v},取共轭转置 vA=λˉv\mathbf{v}^*\mathbf{A} = \bar{\lambda}\mathbf{v}^*,由 A=AT\mathbf{A} = \mathbf{A}^Tλvv=λˉvv\lambda\mathbf{v}^*\mathbf{v} = \bar{\lambda}\mathbf{v}^*\mathbf{v},因 vv>0\mathbf{v}^*\mathbf{v} > 0,故 λ=λˉ\lambda = \bar{\lambda},即 λR\lambda \in \mathbb{R}
  2. 不同特征值的特征向量正交:设 Av1=λ1v1\mathbf{Av}_1 = \lambda_1\mathbf{v}_1Av2=λ2v2\mathbf{Av}_2 = \lambda_2\mathbf{v}_2,则 λ1v2Tv1=v2TAv1=(Av2)Tv1=λ2v2Tv1\lambda_1\mathbf{v}_2^T\mathbf{v}_1 = \mathbf{v}_2^T\mathbf{Av}_1 = (\mathbf{Av}_2)^T\mathbf{v}_1 = \lambda_2\mathbf{v}_2^T\mathbf{v}_1。若 λ1λ2\lambda_1 \neq \lambda_2,必须 v2Tv1=0\mathbf{v}_2^T\mathbf{v}_1 = 0

8.3 惯性张量的特征值分解

四旋翼的惯性张量 I\mathbf{I} 是实对称矩阵 [6]:

I=[IxxIxyIxzIxyIyyIyzIxzIyzIzz] \mathbf{I} = \begin{bmatrix} I_{xx} & -I_{xy} & -I_{xz} \\ -I_{xy} & I_{yy} & -I_{yz} \\ -I_{xz} & -I_{yz} & I_{zz} \end{bmatrix}

其中对角元素 Ixx=(y2+z2)dmI_{xx} = \int(y^2+z^2)\,dm 等是惯性矩(总为正),非对角元素 Ixy=xydmI_{xy} = \int xy\,dm 等是惯性积(可正可负可零)。

由谱定理,I\mathbf{I} 可对角化:

I=Pdiag(I1,I2,I3)PT \mathbf{I} = \mathbf{P}\,\text{diag}(I_1, I_2, I_3)\,\mathbf{P}^T
  • 特征值 I1,I2,I3I_1, I_2, I_3主惯性矩——绕三个主轴的转动惯量
  • P\mathbf{P} 的列向量定义了**主轴方向**

工程意义:四旋翼通常几何对称,主轴与机体轴对齐,IxyIxzIyz0I_{xy} \approx I_{xz} \approx I_{yz} \approx 0,惯性张量近似对角。此时欧拉方程大幅简化为三个解耦方程 [6]:

Ixxω˙x=τx(IzzIyy)ωyωz I_{xx}\dot{\omega}_x = \tau_x - (I_{zz} - I_{yy})\omega_y\omega_z Iyyω˙y=τy(IxxIzz)ωxωz I_{yy}\dot{\omega}_y = \tau_y - (I_{xx} - I_{zz})\omega_x\omega_z Izzω˙z=τz(IyyIxx)ωxωy I_{zz}\dot{\omega}_z = \tau_z - (I_{yy} - I_{xx})\omega_x\omega_y

AirSim 中的典型数值设定:

1
2
3
4
Eigen::Matrix3f inertia;
inertia << 0.0125, 0, 0, // Ixx:绕机头轴
0, 0.0125, 0, // Iyy:绕右翼轴
0, 0, 0.0250; // Izz:绕竖轴(更大,桨盘平面质量分布)

8.4 特征值与系统稳定性

线性系统稳定性理论 [3][9]:

对于线性化后的系统 x˙=Ax\dot{\mathbf{x}} = \mathbf{A}\mathbf{x},其解为 x(t)=eAtx0\mathbf{x}(t) = e^{\mathbf{A}t}\mathbf{x}_0。系统的行为完全由 A\mathbf{A} 的特征值决定:

设特征值 λi=σi+jωi\lambda_i = \sigma_i + j\omega_iσi\sigma_i 为实部,ωi\omega_i 为虚部),则对应的分量解为:

xi(t)eσitcos(ωit+φi) x_i(t) \propto e^{\sigma_i t}\cos(\omega_i t + \varphi_i)
特征值性质 条件 时域行为 无人机含义
实部 σ<0\sigma < 0 稳定 指数衰减 扰动后自动恢复
实部 σ=0\sigma = 0 临界 等幅振荡或匀速 不收敛也不发散
实部 σ>0\sigma > 0 不稳定 指数增长 发散,必须靠控制器纠正
虚部 ω0\omega \neq 0 振荡 正弦振荡 伴随振荡的收敛或发散
纯实数 ω=0\omega = 0 非振荡 纯指数 无振荡的收敛或发散

PID 调参的本质:闭环系统 x˙=(ABK)x\dot{\mathbf{x}} = (\mathbf{A} - \mathbf{BK})\mathbf{x} 中,调增益矩阵 K\mathbf{K} 就是在调 (ABK)(\mathbf{A} - \mathbf{BK}) 的特征值位置。增益太小 \to 特征值实部不够负(响应慢),增益太大 \to 虚部增大(振荡)或实部变正(不稳定)[3][9]。

数值示例:一个简化的俯仰角控制系统,状态 x=[θ,θ˙]T\mathbf{x} = [\theta, \dot{\theta}]^T

A=[0100],B=[01/Iyy] \mathbf{A} = \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix}, \quad \mathbf{B} = \begin{bmatrix} 0 \\ 1/I_{yy} \end{bmatrix}

开环特征值 λ1,2=0\lambda_{1,2} = 0(临界稳定,无控制时俯仰角不回零)。加入 PD 控制 u=KpθKdθ˙u = -K_p\theta - K_d\dot{\theta}

Acl=[01Kp/IyyKd/Iyy] \mathbf{A}_{\text{cl}} = \begin{bmatrix} 0 & 1 \\ -K_p/I_{yy} & -K_d/I_{yy} \end{bmatrix}

特征方程 λ2+(Kd/Iyy)λ+Kp/Iyy=0\lambda^2 + (K_d/I_{yy})\lambda + K_p/I_{yy} = 0,由韦达定理,所有特征值实部为负需要 Kp>0K_p > 0Kd>0K_d > 0


九、线性方程组与最小二乘:传感器融合基础

9.1 线性方程组 Ax=b\mathbf{Ax} = \mathbf{b}

Fredholm 替代定理(简化版)[1]:对 m×nm \times n 矩阵 A\mathbf{A}

情况 条件 解的情况 无人机例子
恰定 m=nm = ndet(A)0\det(\mathbf{A}) \neq 0 唯一解 x=A1b\mathbf{x} = \mathbf{A}^{-1}\mathbf{b} 四旋翼混控
欠定 m<nm < n 无穷多解 六旋翼混控(冗余)
超定 m>nm > n 一般无精确解 传感器标定
奇异 det(A)=0\det(\mathbf{A}) = 0 无解或无穷多解 传感器故障退化

9.2 最小二乘法的严格推导

当超定方程组 Ax=b\mathbf{Ax} = \mathbf{b} 无精确解时,最小二乘目标为 [1][3]:

x=argminxAxb2 \mathbf{x}^* = \arg\min_{\mathbf{x}} \lVert\mathbf{Ax} - \mathbf{b}\rVert^2

推导:定义残差 r=Axb\mathbf{r} = \mathbf{Ax} - \mathbf{b},目标函数:

J(x)=rTr=(Axb)T(Axb)=xTATAx2bTAx+bTb J(\mathbf{x}) = \mathbf{r}^T\mathbf{r} = (\mathbf{Ax}-\mathbf{b})^T(\mathbf{Ax}-\mathbf{b}) = \mathbf{x}^T\mathbf{A}^T\mathbf{A}\mathbf{x} - 2\mathbf{b}^T\mathbf{A}\mathbf{x} + \mathbf{b}^T\mathbf{b}

x\mathbf{x} 求梯度并令其为零:

xJ=2ATAx2ATb=0 \nabla_{\mathbf{x}} J = 2\mathbf{A}^T\mathbf{A}\mathbf{x} - 2\mathbf{A}^T\mathbf{b} = \mathbf{0}

得到正规方程(Normal Equation):

ATAx=ATb \mathbf{A}^T\mathbf{A}\,\mathbf{x}^* = \mathbf{A}^T\mathbf{b}

A\mathbf{A} 列满秩时,ATA\mathbf{A}^T\mathbf{A} 可逆,唯一解为:

x=(ATA)1ATb \mathbf{x}^* = (\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T\mathbf{b}

矩阵 A+=(ATA)1AT\mathbf{A}^+ = (\mathbf{A}^T\mathbf{A})^{-1}\mathbf{A}^T 称为Moore-Penrose 伪逆

几何解释Ax\mathbf{Ax}^*b\mathbf{b}A\mathbf{A} 列空间上的正交投影——最小二乘解就是使残差与列空间正交的那个 x\mathbf{x} [1]。

9.3 奇异值分解(SVD)

定理 [1][2]:任何 m×nm \times n 矩阵 A\mathbf{A} 都可以分解为:

A=UΣVT \mathbf{A} = \mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^T

其中:

  • URm×m\mathbf{U} \in \mathbb{R}^{m \times m}:正交矩阵(左奇异向量)
  • ΣRm×n\boldsymbol{\Sigma} \in \mathbb{R}^{m \times n}:对角矩阵,σ1σ20\sigma_1 \geq \sigma_2 \geq \cdots \geq 0(奇异值)
  • VRn×n\mathbf{V} \in \mathbb{R}^{n \times n}:正交矩阵(右奇异向量)

SVD 与伪逆

A+=VΣ+UT \mathbf{A}^+ = \mathbf{V}\boldsymbol{\Sigma}^+\mathbf{U}^T

其中 Σ+\boldsymbol{\Sigma}^+ 是将 Σ\boldsymbol{\Sigma} 中非零对角元素取倒数、然后转置。SVD 方法比正规方程数值更稳定,是实际代码中解最小二乘的首选。

条件数κ(A)=σmax/σmin\kappa(\mathbf{A}) = \sigma_{\max}/\sigma_{\min}。条件数越大,方程组对噪声越敏感。无人机中,若传感器配置导致 κ\kappa 很大,标定结果会不可靠。

9.4 实际应用:磁力计硬铁标定

磁力计原始读数受硬铁偏置 b=[bx,by,bz]T\mathbf{b} = [b_x, b_y, b_z]^T 影响 [7]。理想情况下,标定后的读数应落在球面上:

(mxbx)2+(myby)2+(mzbz)2=r2 (m_x - b_x)^2 + (m_y - b_y)^2 + (m_z - b_z)^2 = r^2

展开:mx2+my2+mz22bxmx2bymy2bzmz+(bx2+by2+bz2r2)=0m_x^2 + m_y^2 + m_z^2 - 2b_x m_x - 2b_y m_y - 2b_z m_z + (b_x^2+b_y^2+b_z^2-r^2) = 0

x=[bx,by,bz,c]T\mathbf{x} = [b_x, b_y, b_z, c]^Tc=bx2+by2+bz2r2c = b_x^2+b_y^2+b_z^2-r^2),对每组测量写成:

2mx(i)bx+2my(i)by+2mz(i)bz+c=(mx(i))2+(my(i))2+(mz(i))2 2m_x^{(i)} b_x + 2m_y^{(i)} b_y + 2m_z^{(i)} b_z + c = (m_x^{(i)})^2 + (m_y^{(i)})^2 + (m_z^{(i)})^2 NN 组测量构成 Ax=b\mathbf{A}\mathbf{x} = \mathbf{b}N×4N \times 4,超定),用最小二乘求解。

9.5 卡尔曼滤波中的线性代数

卡尔曼滤波(KF)是无人机状态估计的基石 [3][9],其每一步都是矩阵运算:

预测步(Time Update):

x^kk1=Fkx^k1k1+Bkuk \hat{\mathbf{x}}_{k|k-1} = \mathbf{F}_k\hat{\mathbf{x}}_{k-1|k-1} + \mathbf{B}_k\mathbf{u}_k Pkk1=FkPk1k1FkT+Qk \mathbf{P}_{k|k-1} = \mathbf{F}_k\mathbf{P}_{k-1|k-1}\mathbf{F}_k^T + \mathbf{Q}_k

更新步(Measurement Update):

Kk=Pkk1HkT(HkPkk1HkT+Rk)1 \mathbf{K}_k = \mathbf{P}_{k|k-1}\mathbf{H}_k^T\big(\mathbf{H}_k\mathbf{P}_{k|k-1}\mathbf{H}_k^T + \mathbf{R}_k\big)^{-1} x^kk=x^kk1+Kk(zkHkx^kk1) \hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k\big(\mathbf{z}_k - \mathbf{H}_k\hat{\mathbf{x}}_{k|k-1}\big) Pkk=(IKkHk)Pkk1 \mathbf{P}_{k|k} = (\mathbf{I} - \mathbf{K}_k\mathbf{H}_k)\mathbf{P}_{k|k-1}
符号 含义 维度 线性代数角色
F\mathbf{F} 状态转移矩阵 n×nn \times n 线性映射(动力学模型)
H\mathbf{H} 观测矩阵 m×nm \times n 线性映射(传感器模型)
P\mathbf{P} 状态协方差 n×nn \times n 对称半正定矩阵(不确定性)
K\mathbf{K} 卡尔曼增益 n×mn \times m 加权伪逆
Q\mathbf{Q} 过程噪声协方差 n×nn \times n 对称半正定矩阵
R\mathbf{R} 观测噪声协方差 m×mm \times m 对称正定矩阵

线性代数视角的深层理解

  1. 卡尔曼增益是加权最小二乘的解K\mathbf{K} 本质上在”相信预测”(协方差 P\mathbf{P} 小 → K\mathbf{K} 小)和”相信测量”(噪声 R\mathbf{R} 小 → K\mathbf{K} 大)之间找最优平衡 [3]
  2. P\mathbf{P} 的特征值:代表各状态分量的估计不确定性大小;特征向量代表不确定性的主方向
  3. 可观测性[HT,(FH)T,,(Fn1H)T]T[\mathbf{H}^T, (\mathbf{FH})^T, \ldots, (\mathbf{F}^{n-1}\mathbf{H})^T]^T 的秩等于 nn 时,所有状态可被估计 [3]

十、实战:AirSim 与 PX4 源码中的线性代数

10.1 AirSim 中的旋转矩阵应用

AirSim 使用 Eigen 库进行所有线性代数运算 [11]。动力学更新的核心代码:

1
2
3
4
5
6
7
8
9
10
// 推力从机体系变换到世界系(旋转矩阵应用)
Vector3r thrust_body(0, 0, -total_thrust);
Vector3r thrust_world = pose.orientation.toRotationMatrix() * thrust_body;

// 加上重力(世界系下,NED 约定 z 朝下)
Vector3r gravity(0, 0, 9.81);
Vector3r total_force = thrust_world + mass * gravity;

// 牛顿第二定律
Vector3r acceleration = total_force / mass;

10.2 PX4 中的四元数姿态更新

PX4 的 EKF2 姿态估计器核心循环 [7]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 从陀螺仪获取角速度(减去估计的零偏)
Vector3f gyro_corrected = gyro_raw - gyro_bias;

// 四元数微分方程的一阶离散化
float dt = 0.001f; // 1kHz 更新频率
Quatf delta_q;
delta_q.w() = 1.0f;
delta_q.x() = 0.5f * gyro_corrected.x() * dt;
delta_q.y() = 0.5f * gyro_corrected.y() * dt;
delta_q.z() = 0.5f * gyro_corrected.z() * dt;

// 姿态更新:四元数乘法(组合旋转)
attitude_q = attitude_q * delta_q;

// 重新归一化(修正数值漂移)
attitude_q.normalize();

10.3 混控矩阵的线性代数本质

四旋翼混控的矩阵形式 [7]:

[Tτϕτθτψ]期望力/力矩=[kTkTkTkTdkTdkTdkTdkTdkTdkTdkTdkTkQkQkQkQ]M  (4×4,  满秩)[ω12ω22ω32ω42]电机转速平方 \underbrace{\begin{bmatrix} T \\ \tau_\phi \\ \tau_\theta \\ \tau_\psi \end{bmatrix}}_{\text{期望力/力矩}} = \underbrace{\begin{bmatrix} k_T & k_T & k_T & k_T \\ -dk_T & dk_T & dk_T & -dk_T \\ dk_T & dk_T & -dk_T & -dk_T \\ -k_Q & k_Q & -k_Q & k_Q \end{bmatrix}}_{\mathbf{M}\;(4\times4,\;\text{满秩})} \underbrace{\begin{bmatrix} \omega_1^2 \\ \omega_2^2 \\ \omega_3^2 \\ \omega_4^2 \end{bmatrix}}_{\text{电机转速平方}}
  • 四旋翼M\mathbf{M}4×44\times4 满秩方阵,ω2=M1f\boldsymbol{\omega}^2 = \mathbf{M}^{-1}\mathbf{f},唯一解
  • 六旋翼M\mathbf{M}4×64\times6rank=4<6\text{rank} = 4 < 6,欠定方程组,用伪逆 M+\mathbf{M}^+ 求最小范数解(最小功耗),或加约束做优化
  • 八旋翼:类似六旋翼但冗余度更高,可容忍 1-2 个电机失效

10.4 Eigen 库常用操作速查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <Eigen/Dense>
#include <Eigen/Geometry>

// === 向量运算 ===
Eigen::Vector3f v(1, 2, 3);
float len = v.norm(); // 长度(L2范数)
Eigen::Vector3f v_hat = v.normalized(); // 单位化(不修改原向量)
float dot = a.dot(b); // 点积
Eigen::Vector3f cross = a.cross(b); // 叉积

// === 旋转矩阵构造 ===
Eigen::Matrix3f R;
R = Eigen::AngleAxisf(yaw, Eigen::Vector3f::UnitZ())
* Eigen::AngleAxisf(pitch, Eigen::Vector3f::UnitY())
* Eigen::AngleAxisf(roll, Eigen::Vector3f::UnitX());

// === 四元数 ===
Eigen::Quaternionf q(R); // 旋转矩阵 → 四元数
Eigen::Matrix3f R2 = q.toRotationMatrix(); // 四元数 → 旋转矩阵
Eigen::Quaternionf q_combined = q2 * q1; // 组合旋转
Eigen::Quaternionf q_inv = q.conjugate(); // 逆旋转

// === 解线性方程组 ===
// 方阵直接求解
Eigen::Vector4f x = A.colPivHouseholderQr().solve(b);
// 最小二乘(超定系统)
Eigen::VectorXf x_ls = A.bdcSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(b);

// === 特征值分解(对称矩阵) ===
Eigen::SelfAdjointEigenSolver<Eigen::Matrix3f> solver(I);
Eigen::Vector3f eigenvalues = solver.eigenvalues();
Eigen::Matrix3f eigenvectors = solver.eigenvectors();

// === SVD 分解 ===
Eigen::JacobiSVD<Eigen::MatrixXf> svd(A, Eigen::ComputeThinU | Eigen::ComputeThinV);
Eigen::VectorXf singular_values = svd.singularValues();
float condition_number = singular_values(0) / singular_values(singular_values.size()-1);

十一、总结与学习路线

11.1 知识点回顾

章节 核心概念 数学要点 无人机应用
向量空间、基底 八公理、线性无关、内积外积 坐标系定义、力矩计算
线性映射、矩阵 行列式、秩、正交矩阵 坐标变换、可逆性判断
旋转矩阵 SO(3)SO(3) 正交群、ZYX 展开推导 机体系↔世界系变换
欧拉角、万向锁 Jacobian 奇异性 旋转顺序选择、数值稳定性
四元数 Hamilton 积、SLERP、微分方程 飞控姿态积分
反对称矩阵 李代数、Rodrigues 公式 陀螺效应、旋转增量
特征值分解 谱定理、特征多项式 惯性主轴、系统稳定性
最小二乘、SVD 正规方程推导、条件数 传感器标定、卡尔曼滤波
Eigen 库实战 AirSim/PX4 源码理解

11.2 推荐学习路线

第一阶段:建立直觉(1-2 周)

  • 观看 3Blue1Brown《线性代数的本质》系列视频 [12],建立几何直觉
  • 手算 2×22\times23×33\times3 旋转矩阵,画出旋转前后的向量
  • 用 Python(NumPy)验证矩阵运算结果

第二阶段:掌握核心工具(2-4 周)

  • 系统学习一本线性代数教材 [1] 或 [2]
  • 推导 ZYX 旋转矩阵的完整表达式
  • 手写四元数乘法和旋转,与旋转矩阵结果对比
  • 实现简单的欧拉角↔四元数↔旋转矩阵转换代码
  • 阅读 Solà 的四元数教程 [5]

第三阶段:对接工程实践(持续)

  • 阅读 AirSim/PX4 源码中的 Eigen 调用 [7][11],逐行理解
  • 自己实现一个简化版 EKF 姿态估计器
  • 修改 AirSim 的惯性参数,观察仿真行为变化
  • 阅读 Beard & McLain 的无人机教材 [6] 中的完整动力学推导

参考文献

教材

  • [1] Gilbert Strang. Introduction to Linear Algebra, 6th Edition. Wellesley-Cambridge Press, 2023.
    经典线性代数教材,侧重直觉与应用。配套 MIT OCW 课程:https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/

  • [2] Sheldon Axler. Linear Algebra Done Right, 4th Edition. Springer, 2024. 开放获取:https://linear.axler.net/
    从线性映射出发的现代教材,数学推导更严谨,适合深入理解理论基础。

  • [3] Dan Simon. Optimal State Estimation: Kalman, H∞, and Nonlinear Approaches. Wiley, 2006. ISBN: 978-0471708582.
    状态估计的权威教材,涵盖卡尔曼滤波的完整线性代数推导与无人机应用。

论文与技术报告

  • [4] Richard M. Murray, Zexiang Li, S. Shankar Sastry. A Mathematical Introduction to Robotic Manipulation. CRC Press, 1994. 全文开放获取:http://www.cds.caltech.edu/~murray/mlswiki/
    机器人学中的李群/李代数、旋转矩阵 SO(3)SO(3) 理论的经典参考。

  • [5] Joan Solà. “Quaternion kinematics for the error-state Kalman filter.” arXiv preprint, 2017. https://arxiv.org/abs/1711.02508
    四元数运动学的最佳工程教程,涵盖四元数定义、微分方程、与旋转矩阵/欧拉角的互转,以及在 EKF 中的应用。强烈推荐

  • [6] Randal W. Beard, Timothy W. McLain. Small Unmanned Aircraft: Theory and Practice. Princeton University Press, 2012. 配套资源:https://github.com/randybeard/uavbook
    小型无人机建模与控制的标准教材,完整推导了坐标系、旋转、动力学方程和控制器设计。

  • [7] PX4 开发团队. PX4 Autopilot User Guide. https://docs.px4.io/main/en/
    PX4 飞控的官方文档,包含坐标系约定、EKF2 实现细节和参数说明。

  • [8] Open Robotics. REP 103 - Standard Units of Measure and Coordinate Conventions. https://www.ros.org/reps/rep-0103.html
    ROS 的坐标系与单位约定标准,定义了 ENU 坐标系的使用规范。

进阶参考

  • [9] Peter Corke. Robotics, Vision and Control, 3rd Edition. Springer, 2023. 配套 MATLAB/Python 工具箱:https://github.com/petercorke/robotics-toolbox-python
    涵盖旋转表示、齐次变换、视觉伺服等,有大量可运行的代码示例。

  • [10] Jack B. Kuipers. Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace and Virtual Reality. Princeton University Press, 2002. ISBN: 978-0691102986.
    四元数专著,从 Hamilton 的历史发现讲到航天应用,数学推导详尽。

  • [11] Gaël Guennebaud, Benoît Jacob, et al. Eigen: a C++ template library for linear algebra. https://eigen.tuxfamily.org/
    AirSim、PX4 等项目使用的 C++ 线性代数库,官方文档包含详细的 API 参考和教程。

视频课程


核心思想:线性代数在无人机建模中不是抽象数学,而是描述旋转、变换、融合的工程语言。每个矩阵运算背后都有清晰的物理图像——旋转矩阵是”坐标系之间的桥梁”,特征值是”系统稳不稳”,最小二乘是”怎么从噪声里提取信号”。建立了这种对应关系,再看飞控源码就不再是一堆符号,而是一幅完整的物理画面。