全站通知:

气动模型第二部分:物理引擎的开发

阅读

    

2024-09-26更新

    

最新编辑:glamcurrent

阅读:

  

更新日期:2024-09-26

  

最新编辑:glamcurrent

来自falcon bmsWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
glamcurrent



如何构架代码?

从头开始重构一个完整的气动模型代码并嵌入到现有的模拟中是一项极度危险的工程。虽然(动态)战役代码被视为Falcon 4.0的大脑,但气动模型代码明显才是核心所在,修改气动代码会在诸多方面造成灾难性的影响:比如AI的行为,航电设备,自动驾驶与轰炸计算等方面。


同样显而易见的是,新的气动代码同样意味着需要配以全新的数据文件。我在一开始就非常清楚数据文件在之后会变的有多复杂,而且我也完全肯定另一点,那就是现有的所有机型的气动数据都无法套用新的数据格式。


另外一个很明确的问题是:AI代码难以驾驭完整的物理气动模型,因此完整的保留原始的气动代码也非常重要。


我认为直接在现有的代码中插入新的代码是一个错误的路线,因此我打算从零开始。使用一个独立的文件格式。在此阶段,我的想法是开发一个全新的气动代码,它能够完全独立于现有的F4代码。此代码会接收来自F4的数值(大气,地形,武器,燃料等数据),然后将计算好的输出值导入回F4的代码中(全局位置,速度,角度等数值)。


决定了了此路线后,我便能实现让两套完全不同的代码模块共存 - 原来Micro Prose开发的气动模块(我称其为“OFM”(Old Flight Model,旧版气动模块),此模块适用于没有更新数据文件的飞机;而新的模块(我称之为“AFM”(Advanced Flight Model,高级气动模块),此模块适用于人类控制的飞机,并拥有专门的全新的数据文件格式。最终的代码甚至可以在必要时能够从OFM切换到AFM,然后再切换回来,且不存在任何的不连续性(例如:当玩家开启自动驾驶时,AI将会使用OFM代码来操控飞机)

选择什么模型,为什么选择它?

最初的Micro Prose开发者选择的代码模型是只模拟飞机的外在飞行效果,而忽略这些效果的内在原因。对于F-16来说,这种思维方式完全可以理解....既然我们知道FLCS会尽力的让飞机如我们的输入所期望的那样飞行,那还有必要去模拟其内在原因吗?那我们只用模拟FLCS所输出的结果就行了!虽然这个思路看起来颇具吸引力,但是最终效果只会是得出如电影中那样夸张的气动模型,以及一堆的如电影脚本般的气动代码,这便造成了在第一部分所述的各种灾难性缺陷。


我的开发思路与上面提到的思路完全相反,让我们能完美的模拟所有真实的要素,我们便能得出真正的结果。我的想法是开发一个完整的力与扭矩模型,并实时计算6个DOF(degree of freedom,自由度)的运动方程。


基本上,AFM由6个模块所组成

  • 力学相关
  • 空气动力学相关
  • 输入 - 输出
  • 引擎相关
  • 地面运动相关
  • 运动方程

力学模块

力学模块实时计算所有与飞机相关的力学系数。这些是:

  • 飞机总重
  • 重心(CG)随燃料消耗和武器而产生的变化
  • 完整的3x3惯性矩阵随着燃料和武器的变化而产生的变化
  • 来自重力的影响而出现的力和扭矩

空气动力学模块

该模块实时、动态地计算气流作用在飞机结构(机翼、升降舵、方向舵、鸭翼和机身)上所产生的力和力矩。该模块将在稍后的开发人员说明中详细介绍。

输入 - 输出模块

该模块处理飞行员输入与相应控制面的行为之间的联系。该模块将在稍后的开发人员说明中详细介绍。

引擎模块

此模块处理发动机产生的力和扭矩相关数值。为了能够模拟 VTOL 和矢量发动机,我们开发了一个推力矢量模块。

地面模块

它处理与地面间的相互作用(即起落架或机体与地面的直接接触)产生的力和扭矩。该模块将在稍后的开发人员说明中详细介绍。

运动方程模块

运动方程模块是系统的核心。它由6个刚体运动方程由4个姿态四元数方程和3个CG世界坐标(world position)方程组成。


13个耦合非线性微分方程系统通过Runge Kutta RK4算法求解,无需对车身系统进行任何简化。


该算法的输入为:

  • 世界坐标下的初始位置
  • 初始物体速度
  • 初始物体速率
  • 初始物体四元数姿态
  • 来自空气的的力和力矩
  • 来自地面的力和力矩
  • 来自发动机的力和力矩
  • 来自力学模块所获得的力学系数(重心位置、惯性矩阵)


输出数据为:

  • 世界坐标位
  • 物体速度和速率
  • 物体姿态角


由以上输出可得:

  • 攻角(AOA)
  • 侧滑角(BETA)
  • 速度矢量姿态角
  • 攻角和侧滑角的速率

优点与缺点

这种100%的物理建模的优势显而易见:

  • 计算非常的动态,在任何极端情况下都不会出现任何计算问题。它可以准确的模拟出失速,而且不会出现正常飞行状态到失速状态间的过渡不连续的问题。
  • 外力(如硬管加油管、湍流和风)可以直接以真实的力输入到模型中
  • 飞机从地面到空中飞行的状态切换也不会出现不连续性,即使飞机在地面上,气动计算也仍然有效
  • 精确的力学模型能给出精确的飞机运动表现

100%的物理建模的主要问题有:

  • 力和扭矩建模的复杂性;如果时间步长过大,算法分辨率可能出现偏差(已开发出一种自适应 RK4 方案来解决这一问题)
  • 不能直接改变轨迹、速率和速度(即不能使用hack手段),因为这会使物理建模快速产生偏差
  • 意外的力不连续性(例如,当飞机在地面上时,地形LOD会随着视角的变化而变化)会使建模产生偏差。