飞行动力学
飞行器的空气动力特性
- 飞行器在空中飞行,作用在飞机上的气动力和气动力矩是外力和外力矩最重要的部分
- 气动力:物体和空气作相对运动时,空气作用在物体上的力。可压缩的黏性气流流过飞行器各部件表面时,表面压强分布不对称出现压强差;空气对飞行器表面有黏性摩擦,产生黏性摩擦力。这两部分力合在一起形成了作用在飞行器上的空气动力,包括升力 L、侧力Y 和阻力 D
- 气动力矩:空气动力的作用线不通过飞行器质心时, 形成对质心的空气动力矩。包括俯仰力矩 M、偏航力矩 N、滚转力矩 L
- 气动力和气动力矩是改变飞行器位置和姿态最主要的控制力和力矩,这些力和力矩的产生与飞行器的气动布局、对操纵面的操纵有直接关系

气动升力

影响因素
- 空气密度
- 物体与周围空气之间相对速度的大小和方向
- 绕流物体的形状
- 在飞行器外形尺寸、飞行速度和高度(影响空气密度) 给定的情况下, 研究飞行
- 器飞行中所受的气动升力, 可简化成研究升力系数CL(无量纲比例因数)
- CL对于每一种机翼是唯一的
- 通常通过大量风洞实验、试飞测试或CFD研究得出

- 升力系数CL 基本上取决于马赫数、攻角、升降舵的舵面偏转角、高度等参数
- 升力随攻角α增加而增加,当 α 介于 100 ~ 150 区间呈线性增长
- CL 从CL0 (α=0)升到最大 CLmax (α=αmax)
- α > αmax,机翼表面气流出现紊乱,CL 开始下降(失速)。失速取决于攻角而不是空速
- 在机翼后缘增加副翼或者在前缘增加缝翼,可以显著改进升力特性,尤其在起飞、降落阶段非常有用

气动阻力D
产生原因:飞行器在大气中飞行时或者由于空气黏性产生阻力,或者由于流体压缩性影响出现激波产生阻力

阻力系数CD(无量纲比例因数)
- 每架飞行器都有自己的阻力曲线
- 通常通过大量风洞实验、试飞测试或CFD研究得出
降低襟翼增加升力,同时增加了与滑流接触的机翼面积,造成阻力增大
装有扰流板或减速板的飞机会增加阻力
阻力会随着起落架的抬起、放下发生变化

气动侧力Y:线性范围内,主要受到方向舵项的影响
俯仰力矩 M
产生原因:升降舵位于平尾后缘,当舵面偏转时改变平尾翼型的有效弯度,产生附加升力,对飞行器质心形成附加的纵向力矩。一般定义舵面后缘向下偏转时,形成的升降舵偏角为正。为了提高超音速飞机的操纵效能,一般采用全动平尾,即整个平尾可以绕铰链轴旋转。

滚转力矩 L
产生原因:副翼对称安装在机翼外段后缘,驾驶员左右移动操纵杆,可使左、右副翼反向等角度偏转,反对称偏转引起的横向力矩。规定右副翼下偏为正。
偏航力矩 N
产生原因:方向舵是引起偏航的主要原因。方向舵装在垂尾后缘,驾驶员蹬动脚蹬,使方向舵左右偏转引起作用力矩。左脚蹬前移,方向舵偏向左翼,规定为正。
坐标系
地面坐标系
衡量飞行器位置和姿态的基准
- 固连于大地,原点在大地中的某点;
- Z 轴铅垂向下;
- X 轴在水平面,方向任选,通常与飞行任务相关;
- Y 轴按右手法则。
机体坐标系
- 原点位于飞行器质心;
- Z 轴在对称平面,垂直于纵轴,指向下;
- X 轴沿飞行器结构纵轴,指向前;
- Y 轴垂直于对称平面,指向右。
- 气动力矩的三个分量(滚转力矩、偏航力矩、俯仰力矩)定义在机体坐标系中。

气流坐标系
与机体坐标系的区别是,x是沿着空速矢量。因此平飞的时候重叠。
α 迎角: 速度向量在飞机对称面的投影与机体轴夹角,速度在轴下为正。(飞机的姿态“扬起”,相对于速度)
β 侧滑角: 速度向量与飞机对称面的夹角。右侧滑为正
发动机系统仿真方法
发动机系统仿真有不同的方法,不同的方法仿真精度不同,仿真逼真度不同。
外特性仿真
把发动机系统看成一个整体,对其主要输入、输出性能进行建模
油门杆位置作为输入参数,推力和转速为主要输出性能参数,飞行高度和速度是影响在某一油门杆位置下的推力的主要因素
系统示意图





整体组织结构
1. base/ 目录 – 基础组件
类似vehicle的基础部件,aircraft需要以下基础组件:
AircraftBase.h/.cpp – 考虑在这个项目中可能只需要一个飞行器,因此可能把基类的设计删去
- 所有飞行器的基类
- 提供通用接口:位置、姿态、质量属性等
- 管理飞行器的基本物理属性
Wing.h/.cpp – 机翼系统
class Wing {
Vector3 position; // 机翼在机身的位置
Real area; // 机翼面积
Real liftCoeff, dragCoeff; // 升力、阻力系数
下面四条暂定为不需要
Real aspectRatio; // 展弦比
Real sweep; // 后掠角
Real dihedral; // 上反角
AirfoilProfile profile; // 翼型
// 计算气动力
Vector3 calculateLift(Real airspeed, Real angleOfAttack);
Vector3 calculateDrag(Real airspeed);
};
ControlSurface.h/.cpp – 操纵面
class ControlSurface {
enum Type { ELEVATOR, RUDDER, AILERON, FLAP, SLAT };
Type type;
Real maxDeflection; // 最大偏转角
Real currentDeflection; // 当前偏转角
Real effectiveArea; // 有效面积
// 计算操纵面产生的力矩
Vector3 calculateMoment(Real airspeed, Real deflection);
};
Propulsion.h/.cpp – 推进系统基类
class Propulsion {
Real maxThrust; // 最大推力
Real currentThrust; // 当前推力
virtual Real calculateThrust(Real throttle, Real airspeed) = 0;
virtual Real calculateFuelFlow(Real throttle) = 0;
};
LandingGear.h/.cpp – 起落架——暂定为不需要
class LandingGear {
bool isRetracted; // 是否收起
Vector3 position; // 位置
Real stiffness, damping; // 刚度、阻尼
Real friction; // 摩擦系数
Vector3 calculateGroundForce(const Vector3& velocity);
};
Atmosphere.h/.cpp – 大气环境——暂定为理想模型,即空气密度均匀,风速可能影响(直接与推进力抵消)
class Atmosphere {
Real density;
Vector3 windVelocity;
void updateAtmosphericProperties(Real alt);
Real calculateAirspeed(const Vector3& velocity);
};
2. core/ 目录 – 核心世界管理
AircraftWorld.h/.cpp
类似VehicleWorld,管理整个飞行仿真环境:
class AircraftWorld : public RigidWorld {
ObjectArray<Ref<AircraftBase>> mAircrafts;
Ref<Atmosphere> mAtmosphere;
public:
int addAircraft(const Ref<AircraftBase>& aircraft);
void removeAircraft(int id);
void updateAerodynamics(Real dt);
void load(std::string filePath);
void save(std::string filePath);
};
3. powertrain/ 目录 – 推进系统 – 暂定为提供定值推力的抽象系统
AircraftEngine.h/.cpp – 喷气发动机
class AircraftEngine {
Real bypassRatio; // 涵道比
Real compressionRatio; // 压缩比
ObjectArray<ThrustCurve> thrustCurves; // 推力曲线
Real calculateThrust(Real throttle, Real airspeed) override;
};
4. fixed_wing/ 目录 – 固定翼飞行器
FixedWingAircraft.h/.cpp
class FixedWingAircraft : public AircraftBase {
Ref<Fuselage> mFuselage; // 机身
ObjectArray<Ref<Wing>> mWings; // 机翼
ObjectArray<Ref<ControlSurface>> mControlSurfaces; // 操纵面
ObjectArray<Ref<Propulsion>> mEngines; // 发动机
Ref<FlightControlSystem> mFCS; // 飞控系统
void updateAerodynamics(Real dt, const Ref<Atmosphere>& atmosphere);
void updatePropulsion(Real dt);
void updateFlightControls(Real dt);
};
5. flight_control/ 目录 – 飞行控制系统
FlightControlSystem.h/.cpp
class FlightControlSystem {
PIDController pitchController;
PIDController rollController;
PIDController yawController;
void updateControlInputs(const FlightCommand& command,
const FlightState& currentState);
};
Autopilot.h/.cpp – 自动驾驶
class Autopilot {
enum Mode { MANUAL, ALTITUDE_HOLD, HEADING_HOLD, NAV_MODE };
Mode currentMode;
void updateAutopilot(Real dt, const FlightState& state);
};
实现思路和关键功能
1. 飞机模型建立
机身,主翼,左右副翼,方向舵,升降舵,连接的铰链结构?
2. 气动力计算
- 基于升力线理论计算机翼升力
- 实现操纵面效率和失效模拟
3. 飞行动力学
- 六自由度运动方程
4. 飞行控制
- PID控制器实现基本稳定性
- 模式切换和包线保护
- 故障检测和应急处理
5. 环境建模(较为复杂,初始可以不考虑)
- 标准大气模型
- 风场和湍流模拟
- 地形和障碍物检测
6. 数据管理
- XML格式的飞行器配置文件
- 飞行数据记录和回放
- 实时性能监控
https://zhuanlan.zhihu.com/p/683084005 动力学方程
JSBSim(开源飞行器仿真框架)
FlightGear(真实飞行模拟器,可读取JSBSim模型)
核心问题
- 需要一个飞行器的建模文件 jsbsim? airsim?
✈️ 一、两种建模方式对比
| 建模方式 | 特点 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|---|
| 基础形状堆叠法 | 用立方体、圆柱、翼面等基本体构建机体各部件,再组合 | 模块清晰、计算方便、可动态修改尺寸 | 不够精细,无法捕捉复杂空气动力学细节 | 教学、早期建模、实时仿真、游戏物理 |
| 整体模型法 | 使用整机模型(网格/CAD)、或者根据风洞或仿真数据整体处理 | 真实还原飞行器,适合CFD/气动数据匹配 | 模型复杂、数据准备多、实时性能差 | 高精度仿真、控制器测试、CFD匹配仿真 |
✅ 二、在你的物理引擎中,推荐做法是:
如果目标是:实时飞行仿真(如模拟器、游戏引擎、自研飞控测试平台)
✅ 推荐用基础形状堆叠建模法
做法是:
- 主翼 → 长矩形
- 副翼 → 可以旋转调整的矩形
- 机身 → 圆柱
- 尾翼 → 可以旋转的两个小矩形翅片(竖的方向舵,横的升降舵)
- 引擎简化成定向推力源,不需要实体的建模,可以仅仅设计为一个提供定向推力给整个模型的系统
- 将各部件组合,各自贡献空气动力和力矩
示例:
// 假设你有多个飞行部件
Wing mainWing;
Tail elevator;
Propeller prop;
Vec3 totalForce = mainWing.getForce(state) + elevator.getForce(state) + prop.getThrust(state);
Vec3 totalMoment = mainWing.getMoment(state) + elevator.getMoment(state) + prop.getTorque(state);
这使你可以:
- 快速修改参数(如翼展、位置)
- 清楚控制每个部件的力与贡献
- 易于调试、性能开销小
如果目标是:气动精度优先(如风洞匹配、CFD校验、控制器测试)
✅ 可以考虑整体建模或基于模型数据的集中建模法
你需要提供一套:
- 空气动力数据表(lookup tables):如 CL(α),CD(α)C_L(\alpha), C_D(\alpha)
- 机体惯性参数:Ixx,Iyy,IzzI_{xx}, I_{yy}, I_{zz}
- 整体升力/阻力/力矩的合成点(气动中心)
此时不必处理每个部件,而是:
totalForce = aerodynamicModel.getTotalForce(state);
totalMoment = aerodynamicModel.getTotalMoment(state);
🔍 总结建议:
| 你想要… | 推荐方式 |
|---|---|
| 快速构建可调模型、用于调试和教学 | ✅ 基础形状堆叠法 |
| 实时仿真、接入飞控算法测试 | ✅ 基础形状 + 简化气动模型 |
| 高精度仿真(例如需要匹配风洞或控制律验证) | ✅ 整体模型(或CFD数据驱动) |