美文网首页
JSBSim学习笔记(2)——快速入门

JSBSim学习笔记(2)——快速入门

作者: 么的聊 | 来源:发表于2016-06-02 13:21 被阅读2188次

    和大多数开源项目相同,JSBSim 的学习将主要已手册为载体,进一步的深入研究则需要了解代码结构并尝试二次开发。本章以快速入门的形式,帮助读者迅速地对 JSBSim 的工作流程有所了解。内容包含源代码的安装、试运行和综述两部分组成。系列学习笔记的编译和测试平台是 MAC OSX-10.9,JSBSim版本为1.0。

    编译安装 JSBSim

    获取源代码

    JSBSim 的官方网站中提供了源代码和可执行程序两种下载资源,版本的更新属于不定时,当开发者团队觉得代码包稳定并适于发布就进行更新。下载链接如下

    http://sourceforge.net/project/showfiles.php?group_id=19399

    当然,在 GitHub 上也有部分研究人员提供的镜像。

    编译源代码

    JSBSim 的编译采用标准的 GNU 工具,例如 automake、autoconf、g++、make等(网络中也存在使用于 Visual C++或者其他windows平台的发布版)。首先将下载的代码解压,并进入根目录。

    tar xvfz JSBSim-1.0.tar.gz
    cd JSBSim-1.0
    

    源代码编译过程主要参考源代码中的 README 文件,在进行编译前首先确认已经安装上述标准 GNU 工具(其中g++ 和 make 属于常见自带工具,但是automake 和 autoconf 需要安装)。编译过程按照配置和安装两部分,输入一下代码即可:

    ./autogen.sh [--no-configure]
    ./configure
    make
    ./autogen --enable-libraries [--disable-static] [--enable-shared]
    make install
    

    若一切编译顺利,可以在 /src 文件夹下面发现一个名称为 JSBSim 的可执行文件。为便于后续的使用,建议将该可执行文件的目录添加到环境变量中。

    运行案例确认安装

    编译结束后,运行一个案例确认 JSBSim 已经安装成功。在 JSBSim 的根目录下运行自带算例,输入一下代码,演示飞机 C172 的起飞过程。

    src/JSBSim --script=scripts/c1723.xml > JSBSim.log
    

    如果已经将 JSBSim 可执行程序添加到环境变量,则可以简便地输入:

    JSBSim --script=scripts/c1723.xml > JSBSim.log
    

    代码运行结束后,会在目录下面生成两个新文件:

    • JSBSim.log: 运行日志,记录了程序运行过程中命令行窗口的反馈信息,主要用于调试;
    • JSBout172B.csv: 计算得到的飞行结果,记录了飞机的姿态、加速度等运动参量。

    启动代码中,JSBSim 为可执行程序;后续参数 --script 为输入参数,其中定义了飞机及其动作过程,采用 xml 扩展标记语言的格式,也是后续学习和使用的重点内容。直接在命令窗口输入 JSBSim 得到程序运行的参数格式表如下:

    $ JSBSim
    JSBSim version 1.0 Dec  5 2015 17:21:55
    
    Usage: jsbsim <options>
    
    options:
    --help  returns this message
    --version  returns the version number
    --outputlogfile=<filename>  sets (overrides) the name of the data output file
    --logdirectivefile=<filename>  specifies (overrides) the name of the data logging directives file
    --root=<path>  specifies the JSBSim root directory (where aircraft/, engine/, etc. reside)
    --aircraft=<filename>  specifies the name of the aircraft to be modeled
    --script=<filename>  specifies a script to run
    --realtime  specifies to run in actual real world time
    --nice  specifies to run at lower CPU usage
    --suspend  specifies to suspend the simulation after initialization
    --initfile=<filename>  specifies an initilization file
    --catalog specifies that all properties for this aircraft model should be printed
    --property=<property_name=property_value> e.g. --property=aero/qbar-psf=3.4
    --end-time=<time (double)> specifies the sim end time
    
    NOTE: There can be no spaces around the = sign when
        an option is followed by a filename
    

    JSBSim 概览

    从编程的角度而言,JSBSim 是一个大部分采用C++语言编写(当然也存在一些C语言子程序)的程序代码集合。一部分C++类组成了 JSBSim 模型的物理实例,例如大气、飞行控制系统、发动机等;一部分类组成了数学结构或概念,例如运动方程、矩阵、四元素和向量;另一部分类则管理着其他的对象。总而言之,JSBSim程序能够考虑控制输入,计算由控制和环境引起的力和力距,进而在离散的时间步内推进飞行器的状态(速度、方位、位置等)。

    JSBSim已经在多种平台上实现编译和运行,包括windows、Linux、Mac OSX,甚至是来自Silicon Graphics的 IRIX 操作系统。自由软件 GNU g++能够很方便的编译 JSBSim,其他来自Borland和Microsoft的编译器也能够实现代码编译运行。更多详细的编译方法可以参考《编程手册》。

    对于终端用户(例如进行研究的学生)而言,JSBSim 可以被视作一类以XML文件为输入的“黑箱”。输入的XML文件包含飞行器和发动机的描述、脚本等。当JSBSim加载输入文件后,XML文件既可以作为模拟器(例如,FlightGear、OpenEaagles)的一部分,实时地导引JSBSim对飞行器进行建模,也能够以批处理的形式更快地进行模拟。JSBSim每次运行都会得到文件输出,这些结果文件记录了被研究飞行器的性能和动力学参数。

    从软件集成的角度(例如将JSBSim集成到更大的模拟框架内)而言,JSBSim是一个可以被调用的库函数,而且库函数能够捕获输入信息(例如自动驾驶仪的飞控参数),并返回输出结果(任意时刻飞行器的状态)。

    JSBSim的用户和功能

    JSBSim 飞行动力学模型(FDM)库函数旨在做到简单和易于理解,设计的使用人群是高年级的航空工程类学生。由于其配置方法简单,JSBSim在工业届的作用也得到了多方面的印证。JSBSim已经被嵌入到更大级别、全功能的飞行模拟器(例如,FlightGear、Outerra、OpenEaagles等)中,以批处理仿真的形式在工业和学术界被广泛应用。更多JSBSim应用的案例如下:

    • Aerocross Echo Hawk: 一款无人机半实物仿真
    • DuPont Aerospace Company: 与Matlab配合,被用于该公司的半实物仿真系统
    • MITRE Air Traffic: 作为航空管理系统中的6DoF仿真模块
    • US Dept of Transportation: 美国交通部驾驶仪模拟系统的6DoF内核
    • Univ of Naples: 意大利那不勒斯大学飞行研究的工具

    小结

    本节是参考手册中快速入门和概述两章的综合,主要帮助读者快速了解并感受JSBSim的运行,只是学习的开始。后续内容则分为《用户手册》和《编程手册》两大部分,前着侧重于是使用方面的模块分解介绍,后者侧重于源代码的组织形式。

    相关文章

      网友评论

          本文标题:JSBSim学习笔记(2)——快速入门

          本文链接:https://www.haomeiwen.com/subject/zahkdttx.html