3. 固定翼飞行器动力学模型:刚体运动方程、气动力与力矩模型、推力模型、重力模型

好,咱们进入正题。这一章要聊的是固定翼飞行器的动力学模型。说白了,就是搞清楚飞机在天上到底是怎么动的,以及哪些力在推它、拉它、拽它。

我个人习惯把动力学模型拆成四块来看:刚体运动方程、气动力与力矩、推力、重力。每一块都很关键,缺一个,你的控制律设计就是空中楼阁。

3.1 刚体运动方程

先说说刚体运动方程。你想想看,飞机在天上飞,它不是一个点,它是一个有体积、有质量的物体。所以它的运动包含两部分:平动和转动。

平动,就是飞机质心在空间里怎么走。转动,就是飞机绕质心怎么转。这两者耦合在一起,构成了六自由度的刚体运动方程。

我在项目中遇到过一个问题:刚开始做仿真时,只考虑了平动,忽略了转动耦合。结果仿真出来的轨迹跟实际试飞数据差了十万八千里。嗯,这里要注意,转动惯量矩阵一定要准确,尤其是非对角项,它们代表了不同轴之间的耦合效应。

刚体运动方程的标准形式是这样的:

m * (dV/dt + ω × V) = F
I * (dω/dt) + ω × (I * ω) = M

其中:

  • m 是飞行器质量
  • V 是速度向量
  • ω 是角速度向量
  • I 是转动惯量矩阵
  • F 是合外力
  • M 是合外力矩

这里有个坑,我踩过。方程里的叉乘项(ω × V 和 ω × (I·ω))很容易被忽略。但它们是真实存在的,尤其在飞机做大机动时,这些项的影响非常显著。我曾经在调试一个滚转控制律时,发现响应总是慢半拍,查了半天才发现是忽略了叉乘项。

注意: 刚体运动方程中的叉乘项不是小量,不能随意忽略。尤其是在高角速率情况下,它们会显著影响飞行器的动态响应。

3.2 气动力与力矩模型

接下来是气动力与力矩。这部分是固定翼飞行器最核心的模型,也是最复杂的。

气动力主要包含三个:升力、阻力、侧力。对应的力矩是:滚转力矩、俯仰力矩、偏航力矩。

我记得刚入行时,导师跟我说:「气动系数不是常数,它们是攻角、侧滑角、马赫数、舵面偏度的函数。」当时觉得好麻烦,后来做项目才明白,这句话值千金。

常用的气动模型是线性化模型,在小攻角和小侧滑角范围内有效:

L = 0.5 * ρ * V² * S * CL(α, β, δe, ...)
D = 0.5 * ρ * V² * S * CD(α, β, δe, ...)
Y = 0.5 * ρ * V² * S * CY(β, δr, ...)

其中:

  • ρ 是空气密度
  • V 是空速
  • S 是机翼参考面积
  • CL、CD、CY 是气动系数

力矩模型类似,但多了力矩系数和参考长度:

l = 0.5 * ρ * V² * S * b * Cl(β, δa, δr, p, r)
m = 0.5 * ρ * V² * S * c * Cm(α, δe, q)
n = 0.5 * ρ * V² * S * b * Cn(β, δa, δr, p, r)

这里 b 是翼展,c 是平均气动弦长。

个人经验: 在做气动模型时,我建议先用风洞数据或CFD数据拟合出气动导数。如果条件有限,可以用DATCOM或者AVL这类工具估算。但记住,估算值只能用于初步设计,最终一定要用试飞数据来修正。

为什么会这样?因为气动系数对飞行器的几何细节非常敏感。哪怕是一个小小的天线凸起,都可能改变局部流场,影响气动特性。

3.3 推力模型

推力模型相对简单,但也不能掉以轻心。

对于固定翼飞行器,常见的动力装置是螺旋桨发动机或喷气发动机。推力的大小通常取决于油门开度和飞行状态(空速、高度)。

我常用的推力模型是:

T = T_max * δ_th * f(V, h)

其中:

  • T_max 是最大推力
  • δ_th 是油门开度(0~1)
  • f(V, h) 是空速和高度修正函数

对于螺旋桨发动机,推力随空速增加而下降。对于喷气发动机,推力随高度增加而下降。这个趋势一定要在模型里体现出来。

我曾经犯过一个错误:在仿真里用了恒定推力模型,结果控制律设计出来后在高速段表现很好,但在低速段推力不足,飞机差点失速。嗯,从那以后,我再也不敢用恒定推力了。

注意: 推力模型一定要包含时间延迟。发动机从油门指令到推力输出是有惯性的,这个延迟如果忽略,控制律的相位裕度会受影响。

3.4 重力模型

最后是重力模型。这个最简单,但最容易出错。

重力始终指向地心,大小是 mg。但在机体坐标系下,重力分量会随着飞行器姿态变化而变化。

重力在机体坐标系下的表达式是:

F_g = m * g * [-sin(θ), sin(φ)*cos(θ), cos(φ)*cos(θ)]^T

其中 φ 是滚转角,θ 是俯仰角。

你看,重力在机体坐标系下不是常数。当飞机做机动时,重力分量会变化,这会影响飞行器的动态响应。

我记得有一次在调试纵向控制律时,发现飞机在爬升段和巡航段的响应不一样。查了半天,发现是重力分量在俯仰角变化时产生了额外的力矩。这个效应在常规飞行中不明显,但在大俯仰角机动时就很显著。

建议: 在仿真中,一定要把重力模型放在循环里实时更新,不要当成常数处理。尤其是做长航时仿真时,重力分量的变化会累积出明显的误差。

3.5 模型整合与使用

好了,四块模型都讲完了。现在把它们整合到一起。

完整的动力学模型就是:

m * (dV/dt + ω × V) = F_aero + F_thrust + F_gravity
I * (dω/dt) + ω × (I * ω) = M_aero + M_thrust

其中 F_aeroM_aero 来自气动模型,F_thrust 来自推力模型,F_gravity 来自重力模型。

在实际工程中,我建议把模型写成模块化的形式。每个模块独立测试,最后再集成。这样出了问题,定位也快。

举个例子,我曾经在集成测试时发现俯仰力矩异常。先单独测试气动模块,没问题。再测试推力模块,也没问题。最后发现是重力模块里把俯仰角的正负号搞反了。如果是一锅粥的代码,这种bug能查三天。

嗯,这一章的内容就到这里。下一章我们会聊坐标系变换和运动学方程,那是连接动力学模型和控制律设计的桥梁。