JSBSim是一款开源的飞行动力学(FDM)软件库,能够用于飞行器的飞行力学建模和模拟。JSBSim 函数库已经被嵌入到 FlightGear 和 OpenEaagles 这些飞行模拟的软件包中,也能够以独立运行的方式被批处理工具调用。1996年,JSBSim开始被开发和使用,目前已经能够在大多数平台上运行,包括Linux、 Mac和 Windows。JSBSim由C++编写,采用XML进行文件配置。
1996年,JSBSim被构想成为一个轻量级、数据驱动、非线性、六自由度(6DoF)的批处理模拟程序,旨在为飞机的飞行与控制提供建模方法。从最早的版本开始,JSBSim就得益与开源的开发环境,它的成长伴随着大量用户的建言献策,也被其他大型、全功能的飞行模拟软件所采用。现今在工业和学术界,JSBSim成为一个采用批处理方式的模拟工具,被广泛研究和应用。
下面一个简单的例子说明JSBSim的应用,代码展示了JSBSim是如何被一个小程序调用的。
#include <FGFDMExec.h>
int main(int argc, char **argv)
{
JSBSim::FGFDMExec FDMExec;
bool result = true;
FDMExec.LoadScript(argv[1]);
while (result) result = FDMExec.Run();
}
把上面代码与JSBSim库一起进行编译侯,程序就能够调用运行JSBSim了,输入条件只有飞机的配置文件、初始化文件和配置文件。这些文件都是由 XML(eXtensible Markup Language)语言定义,JSBSim可能是第一个采用 XML 来描述飞机的飞行动力模拟系统。以下是一个关于气动力定义的例子:
<function name="aero/coefficient/CDDf">
<product>
<property>aero/qbar-area</property>
<table>
<independentVar>fcs/flap-pos-deg</independentVar>
<tableData>
0.0 0.0
10.0 0.007
20.0 0.012
30.0 0.018
</tableData>
</table>
</product>
</function>
当JSBSim独立运行的时候,只需要提供一个脚本文件即可,提供该脚本向JSBSim提供控制输入等信息。
当飞机配置文件含有输入接口时,用户可以通过网络与JSBSim通信。通过网络接口,JSBSim内部的参数可以被读取和设置,仿真系统也可以被暂停和恢复。网络通信的特征在实时仿真方面是最重要的功能。JSBSim源代码中自带的独立运行例程都是支持运行软实时功能的。
JSBSim也可以直接向窗口、文件或插口输出格式化的数据组。JSBSim能够同时向多个通道进行输出,每个通道都可以包含数组组或者是特定的参数,能够以任意频率向文件和插口进行数据输出。JSBSim自带了绘图工具 gnuplot,能够将输出的数据绘制成 PDF 格式的图片。
飞行控制系统或者自动驾驶仪能够作为独立的模块被JSBSim调用。飞行控制套件包含:滤波器、条件转换器、求和、传感器、增益(变化或静态)等。另外,还有一个可以用户自定义的函数模块。
为实现飞行模拟,JSBSim还需要其他一些常用的模块,列举如下:
作为下一步工作的主要内容,飞行模拟的学习终究还是要开展的。同样,学习笔记起到了督导的作用,希望能够尽快入门飞行力学,并逐步开展研究性的工作吧。在翻阅网络资料时有一个惊人的发现——JSBSim Commander的作者居然是笔者的老师兼朋友(Matthew Gong)。第一次与开发者团队距离这么近,就当是激励啦!