JSBSim编程实践之入门

JSBSim是一个开源跨平台的飞行动力学模型(FDM)软件库,用于模拟航空航天飞行器的飞行动力学。 该库已被纳入飞行模拟软件包FlightGear和OpenEaagles。JSBSim可以独立运行,通过命令行参数指定飞行器和初始状态,进行简单情境下的飞行动力学仿真,也可以将JSBSim作为代码库,编程实现飞行器模型加载,设置输入,获得输出。下面即介绍在Linux平台编程调用JSBSim库的方法和步骤。

基础知识

gcc与g++

GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU项目的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。

通常gcc用于编译链接c代码文件,而g++用于编译链接c++代码文件,但它们的使用方法很类似。下面介绍gcc和g++的常用选项。

  • 添加头文件搜索路径
1
gcc foo.c -I /home/xiaowp/include -o foo
  • 添加动态库搜索路径
1
gcc foo.c -L /home/xiaowp/lib -lfoo -o foo
  • 添加静态库搜索路径
1
gcc foo.c -L /home/xiaowp/lib -static -lfoo -o foo

编程实践

最简仿真

下面是JSBSim参考手册中的最简单实例,因JSBSim的不断开发,JSBSim参考手册中该编程实例有点过时,因此进行了少量修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <FGFDMExec.h>
#include <sg_path.hxx>

using namespace std;

int main(int argc, char **argv)
{
JSBSim::FGFDMExec FDMExec;
bool result = true;

FDMExec.LoadScript(SGPath::fromUtf8(argv[1]));

while (result) result = FDMExec.Run();
}

从上述代码可知,调用JSBSim的主要方法是利用FGFDMExec类,通过实例化一个FGFDMExec类,就相当于获得了一个运行JSBSim仿真的工具箱,通过这个工具箱就可以调用JSBSim的大部分功能,实现我们要的仿真目标。

接下来对该实例进行编译链接,使用如下命令:

1
2
# jsbsim_script.cpp是上述实例的代码文件
g++ jsbsim_script.cpp -I ../jsbsim/src/ -I../jsbsim/src/simgear/misc -L ../jsbsim/build/src/ -static -l JSBSim -o jsbsim_script

测试该实例,使用如下命令:

1
2
3
4
# jsbsim是JSBSim项目文件夹
# JSBSimTest是JSBSim测试实例所在文件夹
cd jsbsim
../JSBSimTest/jsbsim_script ./scripts/c1723.xml

参考链接

  1. JSBSim编程实践,by 32768.
  2. 战斗机与引擎速查,by 么的聊.
  3. JSBSim学习笔记(3)—— 基本概念,by 么的聊.
  4. JSBSim学习笔记(6)——飞行控制系统,by 么的聊.
  5. Linux平台编译安装测试JSBSim,by jack huang.
  6. JSBSim Reference Manual ,by jsbsim.
  7. gcc和g++头文件和库路径的寻找和添加,by 周学伟.
  8. GCC,by wikipedia.
  9. WHAT IS THE DIFFERENCE BETWEEN GCC AND G++,by KITTY GUPTA.