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 是平均气动弦长。
为什么会这样?因为气动系数对飞行器的几何细节非常敏感。哪怕是一个小小的天线凸起,都可能改变局部流场,影响气动特性。
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_aero 和 M_aero 来自气动模型,F_thrust 来自推力模型,F_gravity 来自重力模型。
在实际工程中,我建议把模型写成模块化的形式。每个模块独立测试,最后再集成。这样出了问题,定位也快。
举个例子,我曾经在集成测试时发现俯仰力矩异常。先单独测试气动模块,没问题。再测试推力模块,也没问题。最后发现是重力模块里把俯仰角的正负号搞反了。如果是一锅粥的代码,这种bug能查三天。
嗯,这一章的内容就到这里。下一章我们会聊坐标系变换和运动学方程,那是连接动力学模型和控制律设计的桥梁。