四旋翼的仿真与控制,本质上是在求解一组微分方程。本文从牛顿三定律出发 ,逐步推导刚体平动与转动方程,引入螺旋桨空气动力学模型,最终得到完整的六自由度(6-DOF)运动方程组。每一步都给出物理图像、数学推导和数值示例,并以拉格朗日力学提供第二视角。
一、引言:一组微分方程如何让无人机飞起来 无人机仿真的核心工作,就是在每个时间步里回答一个问题:已知当前状态和控制输入,下一个时刻无人机在哪、朝哪、转多快?
这个问题的答案隐藏在一组常微分方程 (ODE)中——六自由度运动方程。它的推导需要三块物理知识:
经典力学 :牛顿定律 → 刚体的平动和转动方程
空气动力学 :螺旋桨如何产生推力与扭矩
数值方法 :如何在计算机上高效、稳定地积分这些方程
本文从第一性原理出发,逐步搭建完整的物理模型。如果你已经读过《四旋翼飞行力学基础》建立了直觉,这篇文章会帮你把直觉变成可以编程实现的方程 [1][6]。
二、经典力学回顾:从质点到刚体 2.1 牛顿三定律 所有推导的起点是牛顿三定律 [1][2]:
第一定律 (惯性定律):不受外力的物体保持匀速直线运动或静止。
第二定律 (运动定律):
F = m a = m d v d t = d p d t
\mathbf{F} = m\mathbf{a} = m\frac{d\mathbf{v}}{dt} = \frac{d\mathbf{p}}{dt}
F = m a = m d t d v = d t d p
其中 p = m v \mathbf{p} = m\mathbf{v} p = m v 是动量。这是整个力学推导的核心方程。
第三定律 (作用-反作用):F 12 = − F 21 \mathbf{F}_{12} = -\mathbf{F}_{21} F 12 = − F 21 。螺旋桨的反扭矩正是第三定律的直接结果。
2.2 从质点到质点系 无人机不是一个质点,而是由无数质点组成的刚体 。对于质点系,牛顿第二定律可以推广为两个基本定理 [1][2]:
质心运动定理 :质点系质心的运动如同一个集中了全部质量的质点,受合外力作用:
m r ¨ c = ∑ ext F i = F ext
m\ddot{\mathbf{r}}_c = \sum_{\text{ext}} \mathbf{F}_i = \mathbf{F}_{\text{ext}}
m r ¨ c = ext ∑ F i = F ext
推导 :设系统由 N N N 个质点组成,质心定义为 r c = 1 m ∑ i m i r i \mathbf{r}_c = \frac{1}{m}\sum_i m_i\mathbf{r}_i r c = m 1 ∑ i m i r i (其中 m = ∑ i m i m = \sum_i m_i m = ∑ i m i ),对时间求二阶导:
m r ¨ c = ∑ i m i r ¨ i = ∑ i F i = ∑ i F i ext + ∑ i F i int
m\ddot{\mathbf{r}}_c = \sum_i m_i\ddot{\mathbf{r}}_i = \sum_i \mathbf{F}_i = \sum_i \mathbf{F}_i^{\text{ext}} + \sum_i \mathbf{F}_i^{\text{int}}
m r ¨ c = i ∑ m i r ¨ i = i ∑ F i = i ∑ F i ext + i ∑ F i int
由牛顿第三定律,内力成对抵消 ∑ i F i int = 0 \sum_i \mathbf{F}_i^{\text{int}} = \mathbf{0} ∑ i F i int = 0 ,得到 m r ¨ c = F ext m\ddot{\mathbf{r}}_c = \mathbf{F}_{\text{ext}} m r ¨ c = F ext 。■ \quad\blacksquare ■
角动量定理 :质点系相对某参考点的角动量变化率等于合外力矩:
d L d t = τ ext
\frac{d\mathbf{L}}{dt} = \boldsymbol{\tau}_{\text{ext}}
d t d L = τ ext
其中角动量 L = ∑ i r i × ( m i v i ) \mathbf{L} = \sum_i \mathbf{r}_i \times (m_i\mathbf{v}_i) L = ∑ i r i × ( m i v i ) ,力矩 τ ext = ∑ i r i × F i ext \boldsymbol{\tau}_{\text{ext}} = \sum_i \mathbf{r}_i \times \mathbf{F}_i^{\text{ext}} τ ext = ∑ i r i × F i ext 。
推导 :
d L d t = ∑ i d d t ( r i × m i v i ) = ∑ i ( r ˙ i × m i v i + r i × m i v ˙ i )
\frac{d\mathbf{L}}{dt} = \sum_i \frac{d}{dt}(\mathbf{r}_i \times m_i\mathbf{v}_i) = \sum_i (\dot{\mathbf{r}}_i \times m_i\mathbf{v}_i + \mathbf{r}_i \times m_i\dot{\mathbf{v}}_i)
d t d L = i ∑ d t d ( r i × m i v i ) = i ∑ ( r ˙ i × m i v i + r i × m i v ˙ i )
第一项 r ˙ i × m i v i = m i ( v i × v i ) = 0 \dot{\mathbf{r}}_i \times m_i\mathbf{v}_i = m_i(\mathbf{v}_i \times \mathbf{v}_i) = \mathbf{0} r ˙ i × m i v i = m i ( v i × v i ) = 0 。第二项利用 m i v ˙ i = F i m_i\dot{\mathbf{v}}_i = \mathbf{F}_i m i v ˙ i = F i ,同样由牛顿第三定律,内力矩成对抵消,剩余 ∑ i r i × F i ext = τ ext \sum_i \mathbf{r}_i \times \mathbf{F}_i^{\text{ext}} = \boldsymbol{\tau}_{\text{ext}} ∑ i r i × F i ext = τ ext 。■ \quad\blacksquare ■
2.3 刚体约束 定义 :刚体是一种特殊的质点系,任意两个质点之间的距离在运动过程中保持不变 [1]:
∣ r i − r j ∣ = const , ∀ i , j
|\mathbf{r}_i - \mathbf{r}_j| = \text{const}, \quad \forall\, i, j
∣ r i − r j ∣ = const , ∀ i , j
这个约束极大地简化了问题:刚体的运动可以完全 由质心的平动和绕质心的转动来描述,总共 6 个自由度 (3 个平动 + 3 个转动)。
Chasles 定理 [1]:刚体的任意运动都可以分解为质心的平动和绕质心的转动的叠加。
三、刚体运动学:描述”怎么动” 运动学只关心几何描述——位置、速度、角速度的关系,不涉及力。
3.1 位姿描述 刚体在空间中的状态由位姿 (Pose)完全确定 [3][6]:
位姿 = ( r c , R ) ∈ R 3 × S O ( 3 )
\text{位姿} = (\mathbf{r}_c,\; \mathbf{R}) \in \mathbb{R}^3 \times SO(3)
位姿 = ( r c , R ) ∈ R 3 × S O ( 3 )
r c = [ x , y , z ] T \mathbf{r}_c = [x, y, z]^T r c = [ x , y , z ] T :质心在惯性系中的位置(3 个自由度)
R \mathbf{R} R :机体系到惯性系的旋转矩阵(3 个自由度,由欧拉角或四元数参数化)
3.2 速度与角速度 平动速度 :质心速度在惯性系中的表示:
v = r ˙ c = d r c d t
\mathbf{v} = \dot{\mathbf{r}}_c = \frac{d\mathbf{r}_c}{dt}
v = r ˙ c = d t d r c
角速度 ω \boldsymbol{\omega} ω :描述刚体绕质心转动的瞬时快慢和方向 [1][3]。角速度与旋转矩阵的关系:
R ˙ = R [ ω b ] ×
\dot{\mathbf{R}} = \mathbf{R}\,[\boldsymbol{\omega}_b]_\times
R ˙ = R [ ω b ] ×
其中 ω b = [ ω x , ω y , ω z ] T \boldsymbol{\omega}_b = [\omega_x, \omega_y, \omega_z]^T ω b = [ ω x , ω y , ω z ] T 是角速度在机体系 中的分量(陀螺仪直接测量的就是这个),[ ⋅ ] × [\cdot]_\times [ ⋅ ] × 是反对称矩阵。
推导 :设机体系基向量为 e i ′ \mathbf{e}_i' e i ′ (是惯性系中的时变向量),则 R = [ e 1 ′ ∣ e 2 ′ ∣ e 3 ′ ] \mathbf{R} = [\mathbf{e}_1' \mid \mathbf{e}_2' \mid \mathbf{e}_3'] R = [ e 1 ′ ∣ e 2 ′ ∣ e 3 ′ ] 。刚体绕角速度 ω \boldsymbol{\omega} ω 转动时,固连在刚体上的任意向量的变化率满足 [1]:
e ˙ i ′ = ω × e i ′
\dot{\mathbf{e}}_i' = \boldsymbol{\omega} \times \mathbf{e}_i'
e ˙ i ′ = ω × e i ′
写成矩阵形式即为 R ˙ = [ ω w ] × R = R [ ω b ] × \dot{\mathbf{R}} = [\boldsymbol{\omega}_w]_\times \mathbf{R} = \mathbf{R}[\boldsymbol{\omega}_b]_\times R ˙ = [ ω w ] × R = R [ ω b ] × 。
3.3 刚体上任意一点的速度 刚体上某点 P P P 相对质心的位矢为 ρ \boldsymbol{\rho} ρ (机体系中恒定),则 P P P 在惯性系中的速度为 [1]:
v P = v c + ω × ( R ρ )
\mathbf{v}_P = \mathbf{v}_c + \boldsymbol{\omega} \times (\mathbf{R}\boldsymbol{\rho})
v P = v c + ω × ( R ρ )
应用 :计算某个电机安装点的速度,用于估算桨叶来流速度和气动力。
3.4 角速度与欧拉角导数的关系 若使用 ZYX 欧拉角 ( ϕ , θ , ψ ) (\phi, \theta, \psi) ( ϕ , θ , ψ ) 参数化姿态,则机体系角速度与欧拉角导数之间的映射为 [3][6]:
ω b = [ ω x ω y ω z ] = [ 1 0 − sin θ 0 cos ϕ cos θ sin ϕ 0 − sin ϕ cos θ cos ϕ ] ⏟ W ( ϕ , θ ) [ ϕ ˙ θ ˙ ψ ˙ ]
\boldsymbol{\omega}_b = \begin{bmatrix} \omega_x \\ \omega_y \\ \omega_z \end{bmatrix} = \underbrace{\begin{bmatrix} 1 & 0 & -\sin\theta \\ 0 & \cos\phi & \cos\theta\sin\phi \\ 0 & -\sin\phi & \cos\theta\cos\phi \end{bmatrix}}_{\mathbf{W}(\phi,\theta)} \begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix}
ω b = ω x ω y ω z = W ( ϕ , θ ) 1 0 0 0 cos ϕ − sin ϕ − sin θ cos θ sin ϕ cos θ cos ϕ ϕ ˙ θ ˙ ψ ˙
逆变换(当 cos θ ≠ 0 \cos\theta \neq 0 cos θ = 0 时):
[ ϕ ˙ θ ˙ ψ ˙ ] = [ 1 sin ϕ tan θ cos ϕ tan θ 0 cos ϕ − sin ϕ 0 sin ϕ sec θ cos ϕ sec θ ] [ ω x ω y ω z ]
\begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix} = \begin{bmatrix} 1 & \sin\phi\tan\theta & \cos\phi\tan\theta \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi\sec\theta & \cos\phi\sec\theta \end{bmatrix} \begin{bmatrix} \omega_x \\ \omega_y \\ \omega_z \end{bmatrix}
ϕ ˙ θ ˙ ψ ˙ = 1 0 0 sin ϕ tan θ cos ϕ sin ϕ sec θ cos ϕ tan θ − sin ϕ cos ϕ sec θ ω x ω y ω z
注意当 θ = ± 90 ° \theta = \pm 90° θ = ± 90° 时 cos θ = 0 \cos\theta = 0 cos θ = 0 ,逆变换奇异——这就是万向锁。实际飞控中使用四元数微分方程避免此问题 [3]。
四、刚体动力学:牛顿-欧拉方程的完整推导 4.1 平动方程(牛顿方程) 将质心运动定理应用于无人机刚体 [1][6]:
m r ¨ c = F ext
m\ddot{\mathbf{r}}_c = \mathbf{F}_{\text{ext}}
m r ¨ c = F ext
在惯性系(NED)中展开,作用力包括重力和螺旋桨推力(从机体系变换到惯性系):
m [ x ¨ y ¨ z ¨ ] = R w b [ 0 0 − T ] + [ 0 0 m g ] + F drag
m\begin{bmatrix} \ddot{x} \\ \ddot{y} \\ \ddot{z} \end{bmatrix} = \mathbf{R}_{wb}\begin{bmatrix} 0 \\ 0 \\ -T \end{bmatrix} + \begin{bmatrix} 0 \\ 0 \\ mg \end{bmatrix} + \mathbf{F}_{\text{drag}}
m x ¨ y ¨ z ¨ = R w b 0 0 − T + 0 0 m g + F drag
其中 T = ∑ i = 1 4 T i T = \sum_{i=1}^{4} T_i T = ∑ i = 1 4 T i 是总推力(NED 约定下推力沿机体 z z z 轴负方向),F drag \mathbf{F}_{\text{drag}} F drag 是空气阻力。
也可以写在机体系中 :在旋转参考系中,需要加上科里奥利力和离心力等非惯性力 [1]:
m ( v ˙ b + ω b × v b ) = F b
m(\dot{\mathbf{v}}_b + \boldsymbol{\omega}_b \times \mathbf{v}_b) = \mathbf{F}_b
m ( v ˙ b + ω b × v b ) = F b
其中 v b \mathbf{v}_b v b 是质心速度在机体系中的分量,F b \mathbf{F}_b F b 是所有外力在机体系中的合力。项 ω b × v b \boldsymbol{\omega}_b \times \mathbf{v}_b ω b × v b 是将惯性系的加速度转换到旋转参考系时出现的附加项。
推导 :惯性系中 F = m v ˙ w \mathbf{F} = m\dot{\mathbf{v}}_w F = m v ˙ w 。由于 v w = R v b \mathbf{v}_w = \mathbf{R}\mathbf{v}_b v w = R v b ,求导:
v ˙ w = R ˙ v b + R v ˙ b = R [ ω b ] × v b + R v ˙ b = R ( v ˙ b + ω b × v b )
\dot{\mathbf{v}}_w = \dot{\mathbf{R}}\mathbf{v}_b + \mathbf{R}\dot{\mathbf{v}}_b = \mathbf{R}[\boldsymbol{\omega}_b]_\times\mathbf{v}_b + \mathbf{R}\dot{\mathbf{v}}_b = \mathbf{R}(\dot{\mathbf{v}}_b + \boldsymbol{\omega}_b \times \mathbf{v}_b)
v ˙ w = R ˙ v b + R v ˙ b = R [ ω b ] × v b + R v ˙ b = R ( v ˙ b + ω b × v b )
两边左乘 R T \mathbf{R}^T R T ,得到 m ( v ˙ b + ω b × v b ) = R T F w = F b m(\dot{\mathbf{v}}_b + \boldsymbol{\omega}_b \times \mathbf{v}_b) = \mathbf{R}^T\mathbf{F}_w = \mathbf{F}_b m ( v ˙ b + ω b × v b ) = R T F w = F b 。■ \quad\blacksquare ■
4.2 转动方程(欧拉方程)的完整推导 这是六自由度建模中最关键的方程 [1][2][6]。
起点 :角动量定理(相对质心):
d L d t ∣ 惯性系 = τ ext
\frac{d\mathbf{L}}{dt}\bigg|_{\text{惯性系}} = \boldsymbol{\tau}_{\text{ext}}
d t d L 惯性系 = τ ext
第一步:角动量的表达式
刚体相对质心的角动量 [1]:
L = ∫ body ρ × ( ω × ρ ) d m
\mathbf{L} = \int_{\text{body}} \boldsymbol{\rho} \times (\boldsymbol{\omega} \times \boldsymbol{\rho})\,dm
L = ∫ body ρ × ( ω × ρ ) d m
其中 ρ \boldsymbol{\rho} ρ 是质量元到质心的位矢。利用向量恒等式 a × ( b × c ) = b ( a ⋅ c ) − c ( a ⋅ b ) \mathbf{a}\times(\mathbf{b}\times\mathbf{c}) = \mathbf{b}(\mathbf{a}\cdot\mathbf{c}) - \mathbf{c}(\mathbf{a}\cdot\mathbf{b}) a × ( b × c ) = b ( a ⋅ c ) − c ( a ⋅ b ) :
ρ × ( ω × ρ ) = ω ( ρ ⋅ ρ ) − ρ ( ρ ⋅ ω ) = ( ρ 2 I 3 − ρ ρ T ) ω
\boldsymbol{\rho} \times (\boldsymbol{\omega} \times \boldsymbol{\rho}) = \boldsymbol{\omega}(\boldsymbol{\rho}\cdot\boldsymbol{\rho}) - \boldsymbol{\rho}(\boldsymbol{\rho}\cdot\boldsymbol{\omega}) = (\rho^2\mathbf{I}_3 - \boldsymbol{\rho}\boldsymbol{\rho}^T)\boldsymbol{\omega}
ρ × ( ω × ρ ) = ω ( ρ ⋅ ρ ) − ρ ( ρ ⋅ ω ) = ( ρ 2 I 3 − ρ ρ T ) ω
对整个刚体积分:
L = [ ∫ body ( ρ 2 I 3 − ρ ρ T ) d m ] ⏟ I ( 惯性张量 ) ω = I ω
\mathbf{L} = \underbrace{\left[\int_{\text{body}} (\rho^2\mathbf{I}_3 - \boldsymbol{\rho}\boldsymbol{\rho}^T)\,dm\right]}_{\mathbf{I}\;(\text{惯性张量})} \boldsymbol{\omega} = \mathbf{I}\boldsymbol{\omega}
L = I ( 惯性张量 ) [ ∫ body ( ρ 2 I 3 − ρ ρ T ) d m ] ω = I ω
惯性张量 在机体系中展开(设 ρ = [ ξ , η , ζ ] T \boldsymbol{\rho} = [\xi, \eta, \zeta]^T ρ = [ ξ , η , ζ ] T ):
I = [ ∫ ( η 2 + ζ 2 ) d m − ∫ ξ η d m − ∫ ξ ζ d m − ∫ ξ η d m ∫ ( ξ 2 + ζ 2 ) d m − ∫ η ζ d m − ∫ ξ ζ d m − ∫ η ζ d m ∫ ( ξ 2 + η 2 ) d m ] = [ I x x − I x y − I x z − I x y I y y − I y z − I x z − I y z I z z ]
\mathbf{I} = \begin{bmatrix}
\int(\eta^2+\zeta^2)\,dm & -\int\xi\eta\,dm & -\int\xi\zeta\,dm \\
-\int\xi\eta\,dm & \int(\xi^2+\zeta^2)\,dm & -\int\eta\zeta\,dm \\
-\int\xi\zeta\,dm & -\int\eta\zeta\,dm & \int(\xi^2+\eta^2)\,dm
\end{bmatrix} = \begin{bmatrix}
I_{xx} & -I_{xy} & -I_{xz} \\
-I_{xy} & I_{yy} & -I_{yz} \\
-I_{xz} & -I_{yz} & I_{zz}
\end{bmatrix}
I = ∫ ( η 2 + ζ 2 ) d m − ∫ ξ η d m − ∫ ξ ζ d m − ∫ ξ η d m ∫ ( ξ 2 + ζ 2 ) d m − ∫ η ζ d m − ∫ ξ ζ d m − ∫ η ζ d m ∫ ( ξ 2 + η 2 ) d m = I xx − I x y − I x z − I x y I y y − I y z − I x z − I y z I z z
关键性质 :I \mathbf{I} I 是实对称正定矩阵,在机体系中是常数(因为质量分布不随时间变化)。
第二步:在机体系中求角动量的时间导数
角动量定理要求在惯性系 中求导。但 I \mathbf{I} I 在惯性系中是时变的(随刚体旋转而变),在机体系中才是常数。因此用旋转参考系的导数转换 [1]:
d L d t ∣ 惯性 = d L d t ∣ 机体 + ω × L
\frac{d\mathbf{L}}{dt}\bigg|_{\text{惯性}} = \frac{d\mathbf{L}}{dt}\bigg|_{\text{机体}} + \boldsymbol{\omega} \times \mathbf{L}
d t d L 惯性 = d t d L 机体 + ω × L
这是”旋转参考系中的导数公式”——任何向量 A \mathbf{A} A 在惯性系和旋转系中的导数关系为 ( d A d t ) 惯 = ( d A d t ) 转 + ω × A \left(\frac{d\mathbf{A}}{dt}\right)_{\text{惯}} = \left(\frac{d\mathbf{A}}{dt}\right)_{\text{转}} + \boldsymbol{\omega} \times \mathbf{A} ( d t d A ) 惯 = ( d t d A ) 转 + ω × A [1]。
在机体系中 I \mathbf{I} I 是常数,所以:
d L d t ∣ 机体 = I ω ˙ b
\frac{d\mathbf{L}}{dt}\bigg|_{\text{机体}} = \mathbf{I}\dot{\boldsymbol{\omega}}_b
d t d L 机体 = I ω ˙ b
第三步:得到欧拉方程
I ω ˙ b + ω b × ( I ω b ) = τ b
\mathbf{I}\dot{\boldsymbol{\omega}}_b + \boldsymbol{\omega}_b \times (\mathbf{I}\boldsymbol{\omega}_b) = \boldsymbol{\tau}_b
I ω ˙ b + ω b × ( I ω b ) = τ b
这就是欧拉刚体方程 ——刚体转动动力学的基本方程 [1][2]。
4.3 欧拉方程的分量形式 设惯性张量为对角阵 I = diag ( I x x , I y y , I z z ) \mathbf{I} = \text{diag}(I_{xx}, I_{yy}, I_{zz}) I = diag ( I xx , I y y , I z z ) (四旋翼近似对称),展开:
ω b × ( I ω b ) = [ ω x ω y ω z ] × [ I x x ω x I y y ω y I z z ω z ] = [ ( I z z − I y y ) ω y ω z ( I x x − I z z ) ω x ω z ( I y y − I x x ) ω x ω y ]
\boldsymbol{\omega}_b \times (\mathbf{I}\boldsymbol{\omega}_b) = \begin{bmatrix} \omega_x \\ \omega_y \\ \omega_z \end{bmatrix} \times \begin{bmatrix} I_{xx}\omega_x \\ I_{yy}\omega_y \\ I_{zz}\omega_z \end{bmatrix} = \begin{bmatrix} (I_{zz}-I_{yy})\omega_y\omega_z \\ (I_{xx}-I_{zz})\omega_x\omega_z \\ (I_{yy}-I_{xx})\omega_x\omega_y \end{bmatrix}
ω b × ( I ω b ) = ω x ω y ω z × I xx ω x I y y ω y I z z ω z = ( I z z − I y y ) ω y ω z ( I xx − I z z ) ω x ω z ( I y y − I xx ) ω x ω y
三个分量方程为:
I x x ω ˙ x = τ x + ( I y y − I z z ) ω y ω z
I_{xx}\dot{\omega}_x = \tau_x + (I_{yy} - I_{zz})\omega_y\omega_z
I xx ω ˙ x = τ x + ( I y y − I z z ) ω y ω z
I y y ω ˙ y = τ y + ( I z z − I x x ) ω x ω z
I_{yy}\dot{\omega}_y = \tau_y + (I_{zz} - I_{xx})\omega_x\omega_z
I y y ω ˙ y = τ y + ( I z z − I xx ) ω x ω z
I z z ω ˙ z = τ z + ( I x x − I y y ) ω x ω y
I_{zz}\dot{\omega}_z = \tau_z + (I_{xx} - I_{yy})\omega_x\omega_y
I z z ω ˙ z = τ z + ( I xx − I y y ) ω x ω y
物理解读 :
左边 I ω ˙ I\dot{\omega} I ω ˙ 是”转动的加速度”
右边第一项 τ \tau τ 是外力矩(电机产生)
右边第二项是陀螺效应 :当 I x x ≠ I y y ≠ I z z I_{xx} \neq I_{yy} \neq I_{zz} I xx = I y y = I z z 时,一个轴上的角速度会通过交叉项影响另一个轴的角加速度
数值示例 :设 I x x = I y y = 0.0125 I_{xx} = I_{yy} = 0.0125 I xx = I y y = 0.0125 kg·m²,I z z = 0.025 I_{zz} = 0.025 I z z = 0.025 kg·m²,无人机正在以 ω z = 3 \omega_z = 3 ω z = 3 rad/s 偏航,ω y = 0.5 \omega_y = 0.5 ω y = 0.5 rad/s 俯仰:
陀螺耦合到 roll 轴 = ( I z z − I y y ) ω y ω z = ( 0.025 − 0.0125 ) × 0.5 × 3 = 0.01875 N \cdotp m
\text{陀螺耦合到 roll 轴} = (I_{zz} - I_{yy})\omega_y\omega_z = (0.025 - 0.0125) \times 0.5 \times 3 = 0.01875 \text{ N·m}
陀螺耦合到 roll 轴 = ( I z z − I y y ) ω y ω z = ( 0.025 − 0.0125 ) × 0.5 × 3 = 0.01875 N \cdotp m
这个力矩会导致无意的滚转——飞控的内环必须实时补偿。
4.4 动能与转动动能 刚体的总动能由 König 定理分解为 [1][2]:
E k = 1 2 m ∣ v c ∣ 2 ⏟ 质心平动动能 + 1 2 ω T I ω ⏟ 绕质心转动动能
E_k = \underbrace{\frac{1}{2}m|\mathbf{v}_c|^2}_{\text{质心平动动能}} + \underbrace{\frac{1}{2}\boldsymbol{\omega}^T\mathbf{I}\boldsymbol{\omega}}_{\text{绕质心转动动能}}
E k = 质心平动动能 2 1 m ∣ v c ∣ 2 + 绕质心转动动能 2 1 ω T I ω
对于对角惯性张量:
E k rot = 1 2 ( I x x ω x 2 + I y y ω y 2 + I z z ω z 2 )
E_k^{\text{rot}} = \frac{1}{2}(I_{xx}\omega_x^2 + I_{yy}\omega_y^2 + I_{zz}\omega_z^2)
E k rot = 2 1 ( I xx ω x 2 + I y y ω y 2 + I z z ω z 2 )
这个表达式在拉格朗日力学推导中至关重要(见第八章)。
五、螺旋桨空气动力学:推力与扭矩从何而来 5.1 动量理论(Momentum Theory) 动量理论是分析螺旋桨最简单的模型,将桨盘视为一个无限薄的”致动盘”(Actuator Disk),均匀地对通过的空气做功 [4][6]。
假设 :
空气不可压缩,流动定常
桨盘均匀加速气流
无旋涡损失
推导 :设桨盘面积 A = π R 2 A = \pi R^2 A = π R 2 (R R R 为桨半径),来流速度 V ∞ V_\infty V ∞ (悬停时为 0),诱导速度 v i v_i v i :
由动量定理,推力等于气流的动量变化率:
T = m ˙ Δ v = ρ A ( V ∞ + v i ) ⋅ 2 v i
T = \dot{m}\Delta v = \rho A(V_\infty + v_i) \cdot 2v_i
T = m ˙ Δ v = ρ A ( V ∞ + v i ) ⋅ 2 v i
其中 m ˙ = ρ A ( V ∞ + v i ) \dot{m} = \rho A(V_\infty + v_i) m ˙ = ρ A ( V ∞ + v i ) 是质量流量,远处尾流速度增加 Δ v = 2 v i \Delta v = 2v_i Δ v = 2 v i (Froude 理论)[4]。
悬停状态 (V ∞ = 0 V_\infty = 0 V ∞ = 0 ):
T = 2 ρ A v i 2
T = 2\rho A v_i^2
T = 2 ρ A v i 2
解出诱导速度:
v i = T 2 ρ A
v_i = \sqrt{\frac{T}{2\rho A}}
v i = 2 ρ A T
悬停功率 (理想功率下界):
P ideal = T v i = T T 2 ρ A = T 3 2 ρ A
P_{\text{ideal}} = Tv_i = T\sqrt{\frac{T}{2\rho A}} = \sqrt{\frac{T^3}{2\rho A}}
P ideal = T v i = T 2 ρ A T = 2 ρ A T 3
数值示例 :1.5 kg 四旋翼悬停,每桨承担 T 1 = m g / 4 = 3.68 T_1 = mg/4 = 3.68 T 1 = m g /4 = 3.68 N,桨半径 R = 0.127 R = 0.127 R = 0.127 m(5 英寸桨):
A = π × 0.127 2 = 0.0507 m 2
A = \pi \times 0.127^2 = 0.0507 \text{ m}^2
A = π × 0.12 7 2 = 0.0507 m 2
v i = 3.68 2 × 1.225 × 0.0507 = 29.5 = 5.43 m/s
v_i = \sqrt{\frac{3.68}{2 \times 1.225 \times 0.0507}} = \sqrt{29.5} = 5.43 \text{ m/s}
v i = 2 × 1.225 × 0.0507 3.68 = 29.5 = 5.43 m/s
P 1 = 3.68 × 5.43 = 20.0 W
P_1 = 3.68 \times 5.43 = 20.0 \text{ W}
P 1 = 3.68 × 5.43 = 20.0 W
四桨总功率约 80 W——这是理论最低值,实际因桨尖涡、阻力等约为此值的 1.5-2 倍。
5.2 叶素理论(Blade Element Theory) 动量理论无法预测推力随转速的关系。叶素理论(BET)将桨叶沿径向切成无穷多微元,对每个微元应用二维翼型理论 [4]。
核心思想 :桨叶上距轴心 r r r 处的微元,弦长 c ( r ) c(r) c ( r ) ,桨距角 β ( r ) \beta(r) β ( r ) ,在旋转角速度 Ω \Omega Ω 下:
旋转引起的切向速度:V t = Ω r V_t = \Omega r V t = Ω r
诱导速度分量:v i ( r ) v_i(r) v i ( r )
有效攻角:α ( r ) = β ( r ) − arctan v i ( r ) V t \alpha(r) = \beta(r) - \arctan\frac{v_i(r)}{V_t} α ( r ) = β ( r ) − arctan V t v i ( r )
微元上的升力和阻力:
d L = 1 2 ρ V eff 2 c C L ( α ) d r
dL = \frac{1}{2}\rho V_{\text{eff}}^2 c\, C_L(\alpha)\, dr
d L = 2 1 ρ V eff 2 c C L ( α ) d r
d D = 1 2 ρ V eff 2 c C D ( α ) d r
dD = \frac{1}{2}\rho V_{\text{eff}}^2 c\, C_D(\alpha)\, dr
d D = 2 1 ρ V eff 2 c C D ( α ) d r
其中 V eff = V t 2 + v i 2 V_{\text{eff}} = \sqrt{V_t^2 + v_i^2} V eff = V t 2 + v i 2 是合成来流速度,C L C_L C L 和 C D C_D C D 是翼型的升力和阻力系数。
沿径向积分并乘以桨叶数 B B B ,得到总推力和扭矩。
5.3 工程简化模型:推力和扭矩系数 在仿真和飞控中,通常不做完整的 BET 积分,而是使用经验系数模型 [4][6][8]:
T i = k T ω i 2
T_i = k_T \omega_i^2
T i = k T ω i 2
Q i = k Q ω i 2
Q_i = k_Q \omega_i^2
Q i = k Q ω i 2
其中:
k T k_T k T 是**推力系数**,由桨型、空气密度决定,单位 N/(rad/s)²
k Q k_Q k Q 是**扭矩系数**,单位 N·m/(rad/s)²
ω i \omega_i ω i 是第 i i i 个电机的角速度(rad/s)
推力系数的物理来源 :量纲分析(Buckingham π 定理 [2])表明 T = C T ρ n 2 D 4 T = C_T \rho n^2 D^4 T = C T ρ n 2 D 4 ,其中 C T C_T C T 是无量纲推力系数,n n n 是转速(rev/s),D D D 是桨直径。转换为角速度形式:
k T = C T ρ D 4 4 π 2
k_T = \frac{C_T \rho D^4}{4\pi^2}
k T = 4 π 2 C T ρ D 4
典型数值 (5 英寸桨,海平面):
参数
值
来源
C T C_T C T
∼ 0.1 \sim 0.1 ∼ 0.1
桨效率测试(如 UIUC 数据库 [13])
C Q C_Q C Q
∼ 0.005 \sim 0.005 ∼ 0.005
同上
ρ \rho ρ
1.225 kg/m³
标准大气
D D D
0.127 m(5”)
桨规格
k T k_T k T
∼ 8 × 10 − 6 \sim 8 \times 10^{-6} ∼ 8 × 1 0 − 6 N/(rad/s)²
计算得到
5.4 推力-扭矩比 推力与扭矩之间的比值是一个关键设计参数 [4]:
Q i T i = k Q k T = C Q D C T ≈ const
\frac{Q_i}{T_i} = \frac{k_Q}{k_T} = \frac{C_Q D}{C_T} \approx \text{const}
T i Q i = k T k Q = C T C Q D ≈ const
这个比值决定了偏航控制的灵敏度——k Q / k T k_Q/k_T k Q / k T 越大,同样的推力变化产生越多的偏航扭矩。
六、外力与外力矩的完整模型 6.1 作用在四旋翼上的所有力 在机体系中,合外力 F b \mathbf{F}_b F b 为 [6][8]:
F b = [ 0 0 − ∑ i = 1 4 T i ] ⏟ 推力 + R T [ 0 0 m g ] ⏟ 重力(转到机体系) + [ − k d x v x − k d y v y − k d z v z ] ⏟ 平动空气阻力
\mathbf{F}_b = \underbrace{\begin{bmatrix} 0 \\ 0 \\ -\sum_{i=1}^4 T_i \end{bmatrix}}_{\text{推力}} + \underbrace{\mathbf{R}^T\begin{bmatrix} 0 \\ 0 \\ mg \end{bmatrix}}_{\text{重力(转到机体系)}} + \underbrace{\begin{bmatrix} -k_{dx}\,v_x \\ -k_{dy}\,v_y \\ -k_{dz}\,v_z \end{bmatrix}}_{\text{平动空气阻力}}
F b = 推力 0 0 − ∑ i = 1 4 T i + 重力(转到机体系) R T 0 0 m g + 平动空气阻力 − k d x v x − k d y v y − k d z v z
空气阻力模型 :低速飞行中,阻力近似与速度成正比(低雷诺数区域),k d x , k d y , k d z k_{dx}, k_{dy}, k_{dz} k d x , k d y , k d z 为阻力系数。更精确的模型使用平方关系 F drag = − 1 2 ρ C D A ref ∣ v ∣ v F_{\text{drag}} = -\frac{1}{2}\rho C_D A_{\text{ref}} |\mathbf{v}|\mathbf{v} F drag = − 2 1 ρ C D A ref ∣ v ∣ v ,但线性模型在大部分仿真中已足够 [8]。
6.2 作用在四旋翼上的所有力矩 在机体系中,合力矩 τ b \boldsymbol{\tau}_b τ b 为 [6][7][8]:
τ b = [ l ( T 2 + T 3 − T 1 − T 4 ) l ( T 1 + T 2 − T 3 − T 4 ) Q 1 − Q 2 + Q 3 − Q 4 ] ⏟ 电机推力与反扭矩 + [ − k r ω x − k r ω y − k r ω z ] ⏟ 旋转空气阻力
\boldsymbol{\tau}_b = \underbrace{\begin{bmatrix} l(T_2 + T_3 - T_1 - T_4) \\ l(T_1 + T_2 - T_3 - T_4) \\ Q_1 - Q_2 + Q_3 - Q_4 \end{bmatrix}}_{\text{电机推力与反扭矩}} + \underbrace{\begin{bmatrix} -k_{r}\omega_x \\ -k_{r}\omega_y \\ -k_{r}\omega_z \end{bmatrix}}_{\text{旋转空气阻力}}
τ b = 电机推力与反扭矩 l ( T 2 + T 3 − T 1 − T 4 ) l ( T 1 + T 2 − T 3 − T 4 ) Q 1 − Q 2 + Q 3 − Q 4 + 旋转空气阻力 − k r ω x − k r ω y − k r ω z
其中(以 X 型布局为例 [7]):
滚转力矩 (τ x \tau_x τ x ):左右两侧推力差 × 力臂 l l l (质心到电机的距离)
俯仰力矩 (τ y \tau_y τ y ):前后两侧推力差 × 力臂
偏航力矩 (τ z \tau_z τ z ):反扭矩差。CW 和 CCW 桨的扭矩方向相反,不平衡时产生偏航
旋转阻力 :k r k_r k r 为旋转阻力系数,阻止机体转动
注意 :具体的电机编号与混控矩阵取决于机架布局(X 型、+ 型)和飞控约定,务必对照实际配置 [7]。
6.3 电机动态特性 实际电机不是瞬时响应的。从控制指令到实际转速之间有延迟,通常建模为一阶惯性环节 [8]:
ω ˙ i = 1 τ m ( ω i cmd − ω i )
\dot{\omega}_i = \frac{1}{\tau_m}(\omega_i^{\text{cmd}} - \omega_i)
ω ˙ i = τ m 1 ( ω i cmd − ω i )
其中 τ m ≈ 0.02 ∼ 0.05 \tau_m \approx 0.02 \sim 0.05 τ m ≈ 0.02 ∼ 0.05 s 是电机时间常数。在快速机动仿真中,忽略电机动态会导致与实际飞行的显著偏差。
七、完整六自由度运动方程 7.1 状态向量 将四旋翼的完整状态定义为 12 维向量(使用欧拉角参数化)[6]:
x = [ x y z ϕ θ ψ u v w ω x ω y ω z ] T
\mathbf{x} = \begin{bmatrix} x & y & z & \phi & \theta & \psi & u & v & w & \omega_x & \omega_y & \omega_z \end{bmatrix}^T
x = [ x y z ϕ θ ψ u v w ω x ω y ω z ] T
变量
含义
参考系
x , y , z x, y, z x , y , z
质心位置
惯性系
ϕ , θ , ψ \phi, \theta, \psi ϕ , θ , ψ
欧拉角(roll, pitch, yaw)
—
u , v , w u, v, w u , v , w
质心速度分量
机体系
ω x , ω y , ω z \omega_x, \omega_y, \omega_z ω x , ω y , ω z
角速度分量
机体系
控制输入为四个电机转速 u = [ ω 1 , ω 2 , ω 3 , ω 4 ] T \mathbf{u} = [\omega_1, \omega_2, \omega_3, \omega_4]^T u = [ ω 1 , ω 2 , ω 3 , ω 4 ] T 。
7.2 完整方程组 将前面推导的所有方程整合,得到 x ˙ = f ( x , u ) \dot{\mathbf{x}} = f(\mathbf{x}, \mathbf{u}) x ˙ = f ( x , u ) [6][8]:
位置运动学 (惯性系速度 = 旋转矩阵 × 机体系速度):
[ x ˙ y ˙ z ˙ ] = R w b ( ϕ , θ , ψ ) [ u v w ]
\begin{bmatrix} \dot{x} \\ \dot{y} \\ \dot{z} \end{bmatrix} = \mathbf{R}_{wb}(\phi,\theta,\psi) \begin{bmatrix} u \\ v \\ w \end{bmatrix}
x ˙ y ˙ z ˙ = R w b ( ϕ , θ , ψ ) u v w
姿态运动学 (欧拉角导数 = 映射矩阵 × 角速度):
[ ϕ ˙ θ ˙ ψ ˙ ] = [ 1 sin ϕ tan θ cos ϕ tan θ 0 cos ϕ − sin ϕ 0 sin ϕ / cos θ cos ϕ / cos θ ] [ ω x ω y ω z ]
\begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix} = \begin{bmatrix} 1 & \sin\phi\tan\theta & \cos\phi\tan\theta \\ 0 & \cos\phi & -\sin\phi \\ 0 & \sin\phi/\cos\theta & \cos\phi/\cos\theta \end{bmatrix} \begin{bmatrix} \omega_x \\ \omega_y \\ \omega_z \end{bmatrix}
ϕ ˙ θ ˙ ψ ˙ = 1 0 0 sin ϕ tan θ cos ϕ sin ϕ / cos θ cos ϕ tan θ − sin ϕ cos ϕ / cos θ ω x ω y ω z
平动动力学 (机体系中的牛顿方程):
[ u ˙ v ˙ w ˙ ] = 1 m F b − ω b × [ u v w ]
\begin{bmatrix} \dot{u} \\ \dot{v} \\ \dot{w} \end{bmatrix} = \frac{1}{m}\mathbf{F}_b - \boldsymbol{\omega}_b \times \begin{bmatrix} u \\ v \\ w \end{bmatrix}
u ˙ v ˙ w ˙ = m 1 F b − ω b × u v w
展开:
u ˙ = F b x m + r v − q w
\dot{u} = \frac{F_{bx}}{m} + rv - qw
u ˙ = m F b x + r v − q w
v ˙ = F b y m + p w − r u
\dot{v} = \frac{F_{by}}{m} + pw - ru
v ˙ = m F b y + pw − r u
w ˙ = F b z m + q u − p v
\dot{w} = \frac{F_{bz}}{m} + qu - pv
w ˙ = m F b z + q u − p v
其中 ( p , q , r ) = ( ω x , ω y , ω z ) (p, q, r) = (\omega_x, \omega_y, \omega_z) ( p , q , r ) = ( ω x , ω y , ω z ) (航空符号惯例 [6])。
转动动力学 (欧拉方程):
[ ω ˙ x ω ˙ y ω ˙ z ] = I − 1 ( τ b − ω b × ( I ω b ) )
\begin{bmatrix} \dot{\omega}_x \\ \dot{\omega}_y \\ \dot{\omega}_z \end{bmatrix} = \mathbf{I}^{-1}\left(\boldsymbol{\tau}_b - \boldsymbol{\omega}_b \times (\mathbf{I}\boldsymbol{\omega}_b)\right)
ω ˙ x ω ˙ y ω ˙ z = I − 1 ( τ b − ω b × ( I ω b ) )
对角惯性张量展开:
ω ˙ x = 1 I x x [ τ x + ( I y y − I z z ) ω y ω z ]
\dot{\omega}_x = \frac{1}{I_{xx}}[\tau_x + (I_{yy} - I_{zz})\omega_y\omega_z]
ω ˙ x = I xx 1 [ τ x + ( I y y − I z z ) ω y ω z ]
ω ˙ y = 1 I y y [ τ y + ( I z z − I x x ) ω x ω z ]
\dot{\omega}_y = \frac{1}{I_{yy}}[\tau_y + (I_{zz} - I_{xx})\omega_x\omega_z]
ω ˙ y = I y y 1 [ τ y + ( I z z − I xx ) ω x ω z ]
ω ˙ z = 1 I z z [ τ z + ( I x x − I y y ) ω x ω y ]
\dot{\omega}_z = \frac{1}{I_{zz}}[\tau_z + (I_{xx} - I_{yy})\omega_x\omega_y]
ω ˙ z = I z z 1 [ τ z + ( I xx − I y y ) ω x ω y ]
7.3 方程组的结构分析 这 12 个一阶 ODE 可以分为四组:
方程组
维度
类型
特点
位置运动学
3
线性
仅依赖姿态和速度
姿态运动学
3
非线性
含 tan θ \tan\theta tan θ ,有奇异点
平动动力学
3
非线性
含 ω × v \boldsymbol{\omega} \times \mathbf{v} ω × v 耦合
转动动力学
3
非线性
含 ω × I ω \boldsymbol{\omega} \times \mathbf{I}\boldsymbol{\omega} ω × I ω 耦合
关键观察 :
方程是强非线性 的(三角函数、叉积),不能直接用线性控制理论
级联结构 :力矩 → 角速度 → 姿态 → 推力方向 → 加速度 → 速度 → 位置。这就是为什么飞控使用内外环串级控制 [7]
使用四元数替代欧拉角可消除姿态运动学的奇异点,但状态向量维度变为 13 [3]
7.4 混控矩阵:从控制量到电机指令 定义中间控制量为 u c = [ T , τ x , τ y , τ z ] T \mathbf{u}_c = [T, \tau_x, \tau_y, \tau_z]^T u c = [ T , τ x , τ y , τ z ] T (总推力 + 三轴力矩),与电机转速的关系为 [7]:
[ T τ x τ y τ z ] = [ k T k T k T k T − l k T l k T l k T − l k T l k T l k T − l k T − l k T − k Q k Q − k Q k Q ] ⏟ M [ ω 1 2 ω 2 2 ω 3 2 ω 4 2 ]
\begin{bmatrix} T \\ \tau_x \\ \tau_y \\ \tau_z \end{bmatrix} = \underbrace{\begin{bmatrix}
k_T & k_T & k_T & k_T \\
-lk_T & lk_T & lk_T & -lk_T \\
lk_T & lk_T & -lk_T & -lk_T \\
-k_Q & k_Q & -k_Q & k_Q
\end{bmatrix}}_{\mathbf{M}} \begin{bmatrix} \omega_1^2 \\ \omega_2^2 \\ \omega_3^2 \\ \omega_4^2 \end{bmatrix}
T τ x τ y τ z = M k T − l k T l k T − k Q k T l k T l k T k Q k T l k T − l k T − k Q k T − l k T − l k T k Q ω 1 2 ω 2 2 ω 3 2 ω 4 2
给定期望的 u c \mathbf{u}_c u c ,电机转速指令为:
[ ω 1 2 ω 2 2 ω 3 2 ω 4 2 ] = M − 1 u c
\begin{bmatrix} \omega_1^2 \\ \omega_2^2 \\ \omega_3^2 \\ \omega_4^2 \end{bmatrix} = \mathbf{M}^{-1}\mathbf{u}_c
ω 1 2 ω 2 2 ω 3 2 ω 4 2 = M − 1 u c
需检查 ω i 2 ≥ 0 \omega_i^2 \geq 0 ω i 2 ≥ 0 (电机不能反转)和 ω i ≤ ω max \omega_i \leq \omega_{\max} ω i ≤ ω m a x (不超过最大转速),超出范围时需要饱和限幅 [7]。
八、拉格朗日力学:第二视角 8.1 拉格朗日力学的基本框架 拉格朗日力学提供了一种基于能量 而非力的建模方法,在处理约束系统时更加优雅 [1][2][5]。
定义 (拉格朗日量):
L = E k − E p
\mathcal{L} = E_k - E_p
L = E k − E p
即动能减势能。
拉格朗日方程 (Euler-Lagrange 方程)[1][5]:
d d t ∂ L ∂ q ˙ j − ∂ L ∂ q j = Q j
\frac{d}{dt}\frac{\partial \mathcal{L}}{\partial \dot{q}_j} - \frac{\partial \mathcal{L}}{\partial q_j} = Q_j
d t d ∂ q ˙ j ∂ L − ∂ q j ∂ L = Q j
其中 q j q_j q j 是广义坐标 ,Q j Q_j Q j 是对应的广义力 (非保守力在该广义坐标方向上的投影)。
与牛顿力学的等价性 :对于无约束系统,拉格朗日方程给出与牛顿方程完全相同的运动方程。但当系统有约束(如刚体约束)时,拉格朗日方法自动处理约束力,不需要显式列出 [1]。
8.2 四旋翼的拉格朗日量 选择广义坐标 q = [ x , y , z , ϕ , θ , ψ ] T \mathbf{q} = [x, y, z, \phi, \theta, \psi]^T q = [ x , y , z , ϕ , θ , ψ ] T [5][6]。
动能 (König 定理):
E k = 1 2 m ( x ˙ 2 + y ˙ 2 + z ˙ 2 ) + 1 2 ω T I ω
E_k = \frac{1}{2}m(\dot{x}^2 + \dot{y}^2 + \dot{z}^2) + \frac{1}{2}\boldsymbol{\omega}^T\mathbf{I}\boldsymbol{\omega}
E k = 2 1 m ( x ˙ 2 + y ˙ 2 + z ˙ 2 ) + 2 1 ω T I ω
转动动能需要用 ( ϕ ˙ , θ ˙ , ψ ˙ ) (\dot{\phi}, \dot{\theta}, \dot{\psi}) ( ϕ ˙ , θ ˙ , ψ ˙ ) 表达 ω \boldsymbol{\omega} ω :
E k rot = 1 2 [ ϕ ˙ θ ˙ ψ ˙ ] T W T I W [ ϕ ˙ θ ˙ ψ ˙ ]
E_k^{\text{rot}} = \frac{1}{2}\begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix}^T \mathbf{W}^T \mathbf{I}\, \mathbf{W} \begin{bmatrix} \dot{\phi} \\ \dot{\theta} \\ \dot{\psi} \end{bmatrix}
E k rot = 2 1 ϕ ˙ θ ˙ ψ ˙ T W T I W ϕ ˙ θ ˙ ψ ˙
其中 W \mathbf{W} W 是 3.4 节中的角速度映射矩阵。
势能 (仅重力,NED 约定 z 朝下):
E p = − m g z
E_p = -mgz
E p = − m g z
注意:NED 中 z z z 增大表示向下,所以高度增加时 z z z 减小,势能 − m g z -mgz − m g z 增大,符号正确。
拉格朗日量 :
L = 1 2 m ( x ˙ 2 + y ˙ 2 + z ˙ 2 ) + 1 2 ω T I ω + m g z
\mathcal{L} = \frac{1}{2}m(\dot{x}^2 + \dot{y}^2 + \dot{z}^2) + \frac{1}{2}\boldsymbol{\omega}^T\mathbf{I}\boldsymbol{\omega} + mgz
L = 2 1 m ( x ˙ 2 + y ˙ 2 + z ˙ 2 ) + 2 1 ω T I ω + m g z
8.3 推导运动方程(平动部分) 以 z z z 方向为例 [5]:
∂ L ∂ z ˙ = m z ˙ , ∂ L ∂ z = m g
\frac{\partial \mathcal{L}}{\partial \dot{z}} = m\dot{z}, \qquad \frac{\partial \mathcal{L}}{\partial z} = mg
∂ z ˙ ∂ L = m z ˙ , ∂ z ∂ L = m g
d d t ( m z ˙ ) − m g = Q z
\frac{d}{dt}(m\dot{z}) - mg = Q_z
d t d ( m z ˙ ) − m g = Q z
m z ¨ = m g + Q z
m\ddot{z} = mg + Q_z
m z ¨ = m g + Q z
其中 Q z Q_z Q z 是推力在惯性系 z z z 方向的分量:Q z = ( R F b ) z = − ( c θ c ϕ ) T Q_z = (\mathbf{R}\mathbf{F}_b)_z = -(c\theta c\phi)T Q z = ( R F b ) z = − ( c θ c ϕ ) T 。
得到 m z ¨ = m g − ( c θ c ϕ ) T m\ddot{z} = mg - (c\theta c\phi)T m z ¨ = m g − ( c θ c ϕ ) T ,与牛顿方法的结果一致。✓ \quad\checkmark ✓
8.4 拉格朗日方法的优势与局限
方面
牛顿-欧拉法
拉格朗日法
出发点
力和力矩
能量
约束处理
需显式写出约束力
自动消去
适合场景
独立刚体、仿真实现
多连杆系统、理论分析
计算效率
高(直接写出 ODE)
低(需对 L \mathcal{L} L 求偏导)
物理直觉
强(力→加速度)
弱(能量→运动)
对于四旋翼这种单刚体系统,牛顿-欧拉法更直接、更适合编程实现。拉格朗日法的价值在于:
验证牛顿方法的正确性
为多体系统(如带万向架的无人机、机械臂+无人机复合体)提供系统化建模工具 [5]
九、数值积分:让方程”跑”起来 9.1 初值问题 六自由度方程可以统一写成 [8][9]:
x ˙ = f ( x , u , t ) , x ( 0 ) = x 0
\dot{\mathbf{x}} = f(\mathbf{x}, \mathbf{u}, t), \qquad \mathbf{x}(0) = \mathbf{x}_0
x ˙ = f ( x , u , t ) , x ( 0 ) = x 0
给定初始状态 x 0 \mathbf{x}_0 x 0 (如悬停),在每个时间步根据控制输入 u \mathbf{u} u 计算 x ˙ \dot{\mathbf{x}} x ˙ ,然后积分得到下一时刻的状态。
9.2 欧拉法(一阶) 最简单的积分方法 [9]:
x k + 1 = x k + Δ t ⋅ f ( x k , u k )
\mathbf{x}_{k+1} = \mathbf{x}_k + \Delta t \cdot f(\mathbf{x}_k, \mathbf{u}_k)
x k + 1 = x k + Δ t ⋅ f ( x k , u k )
优点 :实现简单,计算量小
缺点 :精度 O ( Δ t ) O(\Delta t) O ( Δ t ) ,对于快速动态(高角速度)容易发散
步长要求 :通常需要 Δ t ≤ 0.001 \Delta t \leq 0.001 Δ t ≤ 0.001 s(1 kHz)
9.3 四阶 Runge-Kutta 法(RK4) 工程仿真中最常用的方法 [9]:
k 1 = f ( x k , u k )
\mathbf{k}_1 = f(\mathbf{x}_k, \mathbf{u}_k)
k 1 = f ( x k , u k )
k 2 = f ( x k + Δ t 2 k 1 , u k )
\mathbf{k}_2 = f(\mathbf{x}_k + \frac{\Delta t}{2}\mathbf{k}_1, \mathbf{u}_k)
k 2 = f ( x k + 2 Δ t k 1 , u k )
k 3 = f ( x k + Δ t 2 k 2 , u k )
\mathbf{k}_3 = f(\mathbf{x}_k + \frac{\Delta t}{2}\mathbf{k}_2, \mathbf{u}_k)
k 3 = f ( x k + 2 Δ t k 2 , u k )
k 4 = f ( x k + Δ t k 3 , u k )
\mathbf{k}_4 = f(\mathbf{x}_k + \Delta t\,\mathbf{k}_3, \mathbf{u}_k)
k 4 = f ( x k + Δ t k 3 , u k )
x k + 1 = x k + Δ t 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 )
\mathbf{x}_{k+1} = \mathbf{x}_k + \frac{\Delta t}{6}(\mathbf{k}_1 + 2\mathbf{k}_2 + 2\mathbf{k}_3 + \mathbf{k}_4)
x k + 1 = x k + 6 Δ t ( k 1 + 2 k 2 + 2 k 3 + k 4 )
精度 :O ( Δ t 4 ) O(\Delta t^4) O ( Δ t 4 ) ——同样步长下比欧拉法精确得多
步长 :Δ t = 0.005 \Delta t = 0.005 Δ t = 0.005 s(200 Hz)通常已足够
代价 :每步需要计算 4 次 f f f
9.4 步长选择与稳定性
仿真场景
推荐步长
推荐方法
说明
悬停/缓慢飞行
5 ms
RK4
动态变化慢
快速机动
1 ms
RK4
高角速度需要更小步长
PX4 HITL
1 ms
欧拉/RK4
与飞控主频匹配
碰撞检测
0.1 ms
专用积分器
接触力刚度大
经验法则 :步长应小于系统最快模态周期的 1/10。对于典型四旋翼,最快模态是角速度环(带宽约 50 Hz),所以 Δ t ≤ 1 / ( 10 × 50 ) = 2 \Delta t \leq 1/(10 \times 50) = 2 Δ t ≤ 1/ ( 10 × 50 ) = 2 ms [8]。
9.5 积分中的注意事项
四元数归一化 :如果使用四元数表示姿态,每步积分后必须重新归一化 q ← q / ∣ q ∣ \mathbf{q} \leftarrow \mathbf{q}/|\mathbf{q}| q ← q /∣ q ∣ [3]
角度环绕 :欧拉角 ψ \psi ψ 在 ± π \pm\pi ± π 处需要处理环绕(wrap around)
电机饱和 :计算出的电机转速不能为负或超过上限
能量守恒检查 :自由落体等已知场景下,检查总能量是否守恒(误差应与 O ( Δ t p ) O(\Delta t^p) O ( Δ t p ) 一致)
十、仿真验证:从方程到代码 10.1 Python 实现框架 将六自由度方程实现为可运行的仿真器:
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 import numpy as npfrom scipy.spatial.transform import Rotationclass QuadrotorDynamics : def __init__ (self ): self .m = 1.5 self .g = 9.81 self .l = 0.25 self .kT = 8e-6 self .kQ = 2e-7 self .Ixx = 0.0125 self .Iyy = 0.0125 self .Izz = 0.025 self .I = np.diag([self .Ixx, self .Iyy, self .Izz]) self .I_inv = np.linalg.inv(self .I) def forces_and_moments (self, state, motor_speeds ): """计算机体系下的合力与合力矩""" phi, theta, psi = state[3 :6 ] omega_sq = motor_speeds ** 2 T = self .kT * np.sum (omega_sq) tau_x = self .l * self .kT * (-omega_sq[0 ] + omega_sq[1 ] + omega_sq[2 ] - omega_sq[3 ]) tau_y = self .l * self .kT * ( omega_sq[0 ] + omega_sq[1 ] - omega_sq[2 ] - omega_sq[3 ]) tau_z = self .kQ * (-omega_sq[0 ] + omega_sq[1 ] - omega_sq[2 ] + omega_sq[3 ]) F_body = np.array([0 , 0 , -T]) R = Rotation.from_euler('ZYX' , [psi, theta, phi]).as_matrix() F_gravity = np.array([0 , 0 , self .m * self .g]) F_total_world = R @ F_body + F_gravity tau_body = np.array([tau_x, tau_y, tau_z]) return F_total_world, tau_body def derivatives (self, state, motor_speeds ): """计算状态导数 dx/dt""" pos = state[0 :3 ] angles = state[3 :6 ] vel = state[6 :9 ] omega_b = state[9 :12 ] F_world, tau_b = self .forces_and_moments(state, motor_speeds) d_pos = vel phi, theta, _ = angles W_inv = np.array([ ]) d_angles = W_inv @ omega_b d_vel = F_world / self .m gyro = np.cross(omega_b, self .I @ omega_b) d_omega = self .I_inv @ (tau_b - gyro) return np.concatenate([d_pos, d_angles, d_vel, d_omega]) def step_rk4 (self, state, motor_speeds, dt ): """四阶 Runge-Kutta 积分""" k1 = self .derivatives(state, motor_speeds) k2 = self .derivatives(state + 0.5 *dt*k1, motor_speeds) k3 = self .derivatives(state + 0.5 *dt*k2, motor_speeds) k4 = self .derivatives(state + dt*k3, motor_speeds) return state + (dt/6 ) * (k1 + 2 *k2 + 2 *k3 + k4)
10.2 悬停验证 基本的正确性检验——悬停时状态应保持不变:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 quad = QuadrotorDynamics() state = np.zeros(12 ) omega_hover = np.sqrt(quad.m * quad.g / (4 * quad.kT)) motors = np.array([omega_hover] * 4 ) print (f"悬停转速: {omega_hover:.1 f} rad/s ({omega_hover*60 /(2 *np.pi):.0 f} RPM)" )dt = 0.005 for _ in range (1000 ): state = quad.step_rk4(state, motors, dt) print (f"5秒后位置: z = {state[2 ]:.6 f} m(应接近 0)" )print (f"5秒后速度: vz = {state[8 ]:.6 f} m/s(应接近 0)" )
10.3 自由落体验证 关闭电机(ω i = 0 \omega_i = 0 ω i = 0 ),检查竖直方向加速度是否为 g g g :
1 2 3 4 5 6 7 8 9 10 11 state = np.zeros(12 ) motors = np.zeros(4 ) dt = 0.001 positions = [] for _ in range (1000 ): state = quad.step_rk4(state, motors, dt) positions.append(state[2 ]) print (f"1秒后 z = {state[2 ]:.4 f} m(理论值 4.905 m)" )
十一、总结 11.1 推导路线图 1 2 3 4 5 6 7 8 9 10 11 牛顿三定律 ├── 质心运动定理 ──→ 平动方程: m(dv/dt + ω×v) = F └── 角动量定理 ──→ 转动方程: Iω̇ + ω×(Iω) = τ │ 螺旋桨空气动力学 ──→ 推力/扭矩模型: T = kT·ω², Q = kQ·ω² │ 混控矩阵 ──→ 控制指令 → 各电机转速 │ 合成 ──→ 完整 6-DOF ODE: ẋ = f(x, u) │ 数值积分 (RK4) ──→ 仿真器
11.2 核心方程速查
方程
公式
出处
平动(惯性系)
m r ¨ = R F b + m g m\ddot{\mathbf{r}} = \mathbf{R}\mathbf{F}_b + m\mathbf{g} m r ¨ = R F b + m g
牛顿第二定律
平动(机体系)
m ( v ˙ b + ω × v b ) = F b m(\dot{\mathbf{v}}_b + \boldsymbol{\omega} \times \mathbf{v}_b) = \mathbf{F}_b m ( v ˙ b + ω × v b ) = F b
旋转参考系修正
转动
I ω ˙ + ω × ( I ω ) = τ \mathbf{I}\dot{\boldsymbol{\omega}} + \boldsymbol{\omega} \times (\mathbf{I}\boldsymbol{\omega}) = \boldsymbol{\tau} I ω ˙ + ω × ( I ω ) = τ
欧拉方程
推力
T i = k T ω i 2 T_i = k_T\omega_i^2 T i = k T ω i 2
空气动力学简化模型
扭矩
Q i = k Q ω i 2 Q_i = k_Q\omega_i^2 Q i = k Q ω i 2
同上
姿态运动学
q ˙ = 1 2 q ⊗ ω ~ \dot{\mathbf{q}} = \frac{1}{2}\mathbf{q} \otimes \tilde{\boldsymbol{\omega}} q ˙ = 2 1 q ⊗ ω ~
四元数微分
拉格朗日方程
d d t ∂ L ∂ q ˙ − ∂ L ∂ q = Q \frac{d}{dt}\frac{\partial\mathcal{L}}{\partial\dot{q}} - \frac{\partial\mathcal{L}}{\partial q} = Q d t d ∂ q ˙ ∂ L − ∂ q ∂ L = Q
能量方法
参考文献 经典力学教材
[1] Herbert Goldstein, Charles P. Poole, John L. Safko. Classical Mechanics , 3rd Edition. Addison-Wesley, 2001. ISBN: 978-0201657029. 经典力学的权威教材,涵盖牛顿力学、拉格朗日力学、哈密顿力学和刚体动力学的完整理论。
[2] L.D. Landau, E.M. Lifshitz. Mechanics (Course of Theoretical Physics, Vol. 1), 3rd Edition. Butterworth-Heinemann, 1976. ISBN: 978-0750628969. 朗道力学,以极简的方式从最小作用量原理推导出全部经典力学。理论物理的经典参考。
无人机建模专著
[3] Joan Solà. “Quaternion kinematics for the error-state Kalman filter.” arXiv preprint , 2017. https://arxiv.org/abs/1711.02508 四元数运动学的工程教程,涵盖旋转参数化、微分方程和 EKF 应用。
[4] J. Gordon Leishman. Principles of Helicopter Aerodynamics , 2nd Edition. Cambridge University Press, 2006. ISBN: 978-0521858601. 直升机/旋翼空气动力学的标准教材,详细推导了动量理论和叶素理论。对理解螺旋桨推力模型至关重要。
[5] Reza N. Jazar. Theory of Applied Robotics: Kinematics, Dynamics, and Control , 3rd Edition. Springer, 2022. ISBN: 978-3030932695. 覆盖刚体运动学、动力学(牛顿-欧拉法和拉格朗日法)及控制,有大量无人机相关的算例。
[6] Randal W. Beard, Timothy W. McLain. Small Unmanned Aircraft: Theory and Practice . Princeton University Press, 2012. 配套资源:https://github.com/randybeard/uavbook 小型无人机建模与控制的标准教材,本文六自由度方程的推导主要参考此书第 3-5 章。
飞控与仿真文档
[7] PX4 开发团队. PX4 Autopilot User Guide . https://docs.px4.io/main/en/ PX4 飞控文档,包含坐标系约定、混控矩阵定义和控制架构说明。
[8] Quan Quan. Introduction to Multicopter Design and Control . Springer, 2017. ISBN: 978-9811033810. 多旋翼设计与控制的系统化教材,详细推导了完整六自由度模型及控制器设计。
[9] William H. Press et al. Numerical Recipes: The Art of Scientific Computing , 3rd Edition. Cambridge University Press, 2007. http://numerical.recipes/ 数值方法的经典参考,包含 ODE 积分方法(欧拉、RK4、自适应步长等)的详细讨论。
进阶与数据资源
核心思想 :六自由度运动方程是无人机仿真的”操作系统”——所有的控制算法、传感器模型、轨迹规划,都是在这组方程的基础上运行的。理解它的推导过程,就是理解仿真为什么能逼近现实 ,以及在什么条件下会偏离现实 (模型假设被违反时)。把这组方程从头到尾手推一遍,再对着 AirSim 或 PX4 源码逐行核对,你对无人机物理的理解会提升一个量级。