3. 无人机动力学模型建立

做飞控这么多年,我越来越觉得——动力学模型是整个控制系统的灵魂。你想想看,连被控对象长什么样都不清楚,怎么设计控制器?说白了,模型就是我们对物理世界的数学抽象。这一章,我们就来聊聊无人机动力学模型的建立过程。

3.1 刚体六自由度运动方程

任何飞行器,不管是四旋翼还是固定翼,在空间中都有6个自由度:三个平动(前后、左右、上下)和三个转动(俯仰、滚转、偏航)。描述这6个自由度的运动,就是刚体六自由度运动方程。

我个人习惯把方程拆成两部分来看:

  • 动力学方程:描述力与加速度、力矩与角加速度的关系(F=ma, M=Iα)
  • 运动学方程:描述位置与速度、姿态与角速度的关系

完整的六自由度方程长这样:

动力学方程(体坐标系下):
m * (dV/dt + ω × V) = F_ext
I * (dω/dt) + ω × (I * ω) = M_ext

运动学方程:
dP/dt = R * V          (位置更新)
dΘ/dt = W * ω          (姿态更新,用欧拉角或四元数)

这里有个坑,我在项目中遇到过——欧拉角的万向锁问题。当俯仰角接近±90°时,偏航和滚转会耦合在一起,导致姿态解算失效。所以实际工程中,我建议用四元数来更新姿态,只在最后输出控制量时再转成欧拉角。

核心要点:六自由度方程是所有无人机模型的基础。记住,它描述的是刚体运动,不考虑结构弹性变形。如果你做的是大型固定翼,那还得加上结构动力学。

3.2 四旋翼的简化动力学模型

四旋翼的动力学模型,说白了就是四个电机转速 → 力和力矩的映射关系。我刚开始做四旋翼时,总觉得这玩意儿很复杂,后来发现其实可以简化得很漂亮。

四旋翼的简化假设:

  • 机体为刚体,质量分布对称
  • 电机响应足够快,忽略动态延迟
  • 空气阻力与速度成正比(低速飞行时成立)
  • 忽略桨叶之间的气动干扰

基于这些假设,四旋翼的动力学模型可以写成:

总推力:T = b * (ω₁² + ω₂² + ω₃² + ω₄²)
滚转力矩:M_x = l * b * (ω₂² - ω₄²)
俯仰力矩:M_y = l * b * (ω₃² - ω₁²)
偏航力矩:M_z = d * (ω₁² - ω₂² + ω₃² - ω₄²)

其中b是推力系数,d是扭矩系数,l是臂长。嗯,这里要注意——电机编号顺序不同,公式里的正负号会变。我习惯用X型布局,电机1和3逆时针转,2和4顺时针转。

个人经验:实际飞行中,电机响应延迟对控制性能影响很大。我曾经在调试时发现,如果不考虑电机一阶延迟模型(约0.02s的时间常数),高频段的相位裕度会明显不足。建议在模型中加上:τ * dω/dt + ω = ω_cmd

3.3 固定翼的简化动力学模型

固定翼的模型比四旋翼复杂不少,因为多了气动力的非线性。不过,对于控制器设计来说,我们通常只保留主要的气动导数。

固定翼的简化模型通常分为纵向横航向两部分:

纵向模型(俯仰、速度、高度):

  • 升力:L = 0.5 * ρ * V² * S * C_L(α, δ_e)
  • 阻力:D = 0.5 * ρ * V² * S * C_D(α)
  • 俯仰力矩:M = 0.5 * ρ * V² * S * c * C_m(α, δ_e, q)

横航向模型(滚转、偏航、侧滑):

  • 滚转力矩:L = 0.5 * ρ * V² * S * b * C_l(β, δ_a, δ_r, p, r)
  • 偏航力矩:N = 0.5 * ρ * V² * S * b * C_n(β, δ_a, δ_r, p, r)
  • 侧力:Y = 0.5 * ρ * V² * S * C_Y(β, δ_r)

你可能会问:这么多气动导数,怎么获取?我在项目中常用的方法有两种:

  1. 风洞实验:最准确,但成本高
  2. CFD仿真:精度够用,适合前期设计
  3. 系统辨识:用飞行数据反推,我比较推荐这个

避坑指南:我曾经在固定翼项目中,直接用线性气动模型做控制器,结果在大迎角飞行时炸机了。原因是失速后气动导数变化很大,线性模型完全失效。所以,如果你要做全包线控制,一定要考虑气动参数的非线性变化。

3.4 模型线性化与状态空间表示

非线性模型虽然准确,但控制器设计起来太麻烦。所以工程上,我们通常会在平衡点附近做线性化。说白了,就是用泰勒展开,只保留一阶项。

线性化的步骤:

  1. 找到平衡点(比如悬停状态、平飞状态)
  2. 计算雅可比矩阵(对状态量和控制量求偏导)
  3. 得到线性状态空间方程

状态空间的标准形式:

dx/dt = A * x + B * u
y = C * x + D * u

以四旋翼悬停状态为例,线性化后的状态空间模型:

状态量 x = [φ, θ, ψ, p, q, r, u, v, w, x, y, z]ᵀ
控制量 u = [ω₁², ω₂², ω₃², ω₄²]ᵀ

A矩阵(12×12):
A = [0_3×3    I_3×3    0_3×3    0_3×3;
     0_3×3    0_3×3    0_3×3    0_3×3;
     0_3×3    0_3×3    0_3×3    g * e_3;
     0_3×3    0_3×3    -g * e_3  0_3×3]

B矩阵(12×4):
B = [0_3×4;
     inv(J) * B_moment;
     0_3×4;
     (1/m) * B_force]

嗯,这里要注意——线性化只在平衡点附近有效。如果你飞的是特技动作,那线性模型就不够用了。我一般会在控制器里加增益调度,根据当前飞行状态切换不同的线性模型。

实用建议:对于初学者,我建议先做悬停点的线性化,把PID调稳了,再考虑非线性补偿。别一上来就搞复杂的非线性控制,容易翻车。

3.5 本章知识体系

为了让你更直观地理解本章的知识结构,我画了一张图:

无人机动力学模型建立 - 知识体系 动力学模型 刚体六自由度方程 四旋翼简化模型 固定翼简化模型 动力学方程 (F=ma, M=Iα) 运动学方程 (位置/姿态更新) 推力/力矩 → 电机转速映射 电机一阶延迟模型 纵向模型 (俯仰/速度/高度) 横航向模型 (滚转/偏航/侧滑) 模型线性化 状态空间表示 (A, B, C, D)

这张图把本章的核心逻辑串起来了:从最底层的刚体六自由度方程出发,分别推导四旋翼和固定翼的简化模型,最后统一做线性化,得到状态空间表示。你顺着这个思路走,就不会乱。

我的习惯:每次做新机型,我都会先把这张图画一遍,把每个模块的公式写清楚。这样后面设计控制器时,心里就有底了。


公众号:蓝海资料掘金营,微信deep3321