孙潜 发表于 2024-11-15 23:03:50

在虚幻引擎里进行飞行仿真模拟-JSBSim

在前面的文章中,我们探讨了当前在虚幻引擎(Unreal Engine)里进行飞行仿真模拟的行业现状,在深入飞行仿真实践之前,有必要掌握一些技术背景知识。本文将详细介绍JSBSim模型的关键技术要点。


JSBSim介绍

飞行动力学是研究飞行器在空中运动规律的科学,它涉及到飞行器在空中飞行时的受力、运动状态以及控制等多方面。飞行动力学是航空航天工程中的一个重要分支,它与空气动力学、结构力学、控制理论等多个学科紧密相关。要实现精确的飞行仿真模拟,必定是需要结合真实物理环境、真实的飞行器参数来进行的,这样就离不开飞行动力模型的支持。

JSBSim 是一个飞行动力学模型 FDM(Flight Dynamics Model),其定义了飞行器(例如:飞机、火箭等等)在各种控制力(例如:发动机引擎、机翼等)和自然力(例如:风力、重力等)作用下运动的物理和数学模型。

JSBSim 模型是用C++编写的,支持跨平台调用。作为一个控制台应用程序,它没有图形化界面,但是可以和UE、FlightGear等其他可视化引擎进行结合使用。更多详细信息可以查看 Github 仓库:https://github.com/JSBSim-Team/jsbsim。


JSBSim 具有如下特性


非线性6自由度控制:提供了更精确的飞行动力学模拟和控制;

XML 文件参数配置:可以通过 XML 文件详细配置飞行器的操控系统、空气动力学、推进、起落架布置等;

内置了精确的地球模型:



考虑了地球自转对运动方程的影响,采用了科里奥利和离心加速度模型;

使用了 WGS84 坐标系来构建了地球椭球模型;

根据国际大气标准(1976)建立的大气模型;



模拟结果输出多样:结果数据支持多种形式输出,包括输出到文件存储、屏幕显示或者 Scoket 消息等。


支持其它语言的 SDK

JSBSim 官方提供了支持 Python、Matlab、UE 三个平台的 SDK 库:


Python SDK,允许在 Python 中调用模型功能,和 C++ 完全一致;

Matlab SDK,提供在在 Matlab 里调用模型的接口;

UE SDK,一个虚幻引擎插件,能够把 UE 的虚拟环境和飞行动力学模型结合起来;


由于模型支持的输入和输出都很灵活,所以用 SDK 可以很方便地与各种可视化平台、软件进行集成。
JSBSim 现有的应用


虚幻引擎的 Antoinette 项目:创建下一代飞行模拟器的工具;

各种飞行模拟软件:FlightGear, OutTerra, Skybolt Engine;

SITL 无人机自动驾驶测试:ArduPilot, PX4 Autopilot, Paparazzi;

机器学习飞机控制:gym-jsbsim;

DARPA虚拟空战比赛:有一个AI在与空军战斗机的五轮空战模拟中都胜利了 (参见 YouTube 视频);





如何使用 JSBSim

在虚幻引擎里面使用 JSBSim,可以参考官方的案例,使用其提供的 UE 插件。可以从其 GitHub 官方仓库中的 UnrealEngine 文件夹里获取 UE 插件,编译之后直接预览UE项目。本系列后续文章将围绕这个插件进行详细介绍。

当然,也可以直接在 C++项目中使用 JSBSim,通过 C++ API 的方式调用,如果使用 UE 平台进行开发,也是可以直接调用其 C++ API 的。

想立即体验飞行的读者,也可以下载 FlightGear 这个免费的模拟器,安装之后就可以直接体验翱翔天空的感觉。

如果要在其它平台、开发环境中使用 JSBSim,可以下载或者自己编译其二进制安装包来使用。在 Windos 环境下,可以下载官方打包好的 exe 程序,这是一个控制台程序,没有图形界面。安装后,可以使用 JSBSim.exe 运行模拟,也可以使用 aeromatic.exe 交互式地创建自己的飞机模型。Ubuntu 环境下也有对应的 Debian 包来使用。

安装好之后,在根目录的 Data 文件夹中可以看到自带的飞行器数据包(如果没有,也可以自行下载),里面存放了各类飞行器的XML配置文件。由于JSBSim是飞行动力学模型,调整这些参数时必须符合物理定律,否则飞行器将无法正常飞行。

页: [1]
查看完整版本: 在虚幻引擎里进行飞行仿真模拟-JSBSim