JSBSim学习笔记(3)—— 基本概念

2016-06-06  本文已影响1299人  么的聊

虽然用户不需要掌握太多 JSBSim 飞行模拟器的细节,但是了解 JSBSim 的基本工作流程也会对学习帮助很大。本章将介绍 JSBSim 的基本概念。

仿真系统

通过参考坐标系描述不同部件在飞行器模型中的安装位置——都支持英制和国标两种单位制。为了增强 JSBSim 的通用模拟特性,采用属性(properties)作为不同系统之间的参数(parameters / variables)通信接口。飞机和发动机的配置文件都采用属性的形式进行表征。在飞行建模中,数学元素扮演着重要的角色。JSBSim 采用数据表(data tables)存储飞行特性和参数。JSBSim 能够建立任意形式的代数方程,允许在气动力和飞行控制系统中扩展自由度。

坐标系 (Frames of Reference)

在介绍配置文件的语法前,需要首先理解描述飞行器的坐标系统。

单位制

除非特殊说明,JSBSim都采用英制单位进行内部的计算。但是,在配置文件中也可以输入其他单位制的参数。实践中为避免单位制紊乱,建议总是显式定义单位。采用 unit 属性来定义,例如下面定义翼展长度的语句:

<wingspan unit="FT"> 35.8 </wingspan>

上述语句定义了翼展长度为35.8 Feet。下面等效语句则将长度单位定义为国标m(35.8 feet = 10.91 m):

<wingspan unit="M"> 10.91 </wingspan>

两个语句在 JSBSim 中的效果是相同的,只是采用了两种单位制。JSBSim 中的单位及其缩写分类如下:

通过代码模板的形式展示 JSBSim 中飞行器相关的参数如下:

<metrics>
    <wingarea unit="{FT2 | M2}"> {number} </wingarea>
    <wingspan unit="{FT | M}"> {number} </wingspan>
    <chord unit="{FT | M}"> {number} </chord>
    <htailarea unit="{FT2 | M2}"> {number} </htailarea>
    <htailarm unit="{FT | M}"> {number} </htailarm>
    <vtailarea unit="{FT2 | M}"> {number} </vtailarea>
    <vtailarm unit="{FT | M}"> {number} </vtailarm>
    <wing_incidence unit="{RAD | DEG}"> {number} </wing_incidence>
    <pitot_angle unit="{RAD | DEG}"> {number} </pitot_angle>
    <location name="{AERORP | EYEPOINT | VRP}" unit="{IN | M}">
         <x> {number} </x>
         <y> {number} </y>
         <z> {number} </z>
    </location>
    {other location blocks}
</metrics>

代码中除了飞机的几何参数外,还有三个参考位置:

属性(properties)

仿真系统需要管理大量的状态信息。对于大型的程序而言,数据的管理任务可能导致的问题有一下几类:

属性管理系统(Property Manager system, PM)提供了一个单独的接口,接口允许在程序运行过程中动态地选择状态信息,甚至是生成一个新变量。 其中,动态生成新变量的功能对 JSBSim 的飞行控制系统至关重要,因为组成飞控系统的部分组件(例如,PID控制器、开关、加法器、增益等)只在特定的状态文件中出现。运行过程一旦稀疏地定义了这些组件后,组件本身只是瞬时存在的,但属性管理系统会将各组件的输出值按照属性的方式进行存储。

属性本身是一系列能够选择性可视的全局变量,各属性按照继承性、树状进行分类(类似于Unix的文件系统)。 属性树的结构包含一个根节点和一系列子节点以及终端节点。与Unix的文件系统类似,属性能够被当前节点或根节点引用,属性也能够被嫁接到其他节点上(类似于文件系统中的符号化链接和文件目录)。在 JSBSim 和 FlightGear 的程序代码中,属性被特定的参数广泛地引用。属性能够通过命令行、配置文件和脚本进行分配,甚至一个信道也可以分配属性。属性的命名方式如下:position/h-sl-ftaero/qbar-psf

为展示属性和配置文件的功能,以高性能喷气式飞机模型为对象进行描述。假设某一时刻一个新功能开关被添加到飞行控制面板上,例如飞机允许飞行员在飞控系统中进行超量程俯仰。对于 FlightGear 而言,器件面板是由一个配置文件定义的,开关就是在该文件上进行可视化。当进行开关定义时,开关被赋予一个属性名。在 JSBSim 飞行控制的配置部分,器件面板定义文件中一个被赋予该属性名的超量程俯仰开关就能够以通道的形式更新控制率,开关的位置函数能够按照需要的路径进行信息传递。整个功能添加的过程中并不涉及任何的代码编写。

仿真参数的定义既可以在 JSBSim 中,也可以在配置文件中通过属性完成。前文已经提到,属性是用于描述参数的选项,能够通过配置文件、命令行等获取和设置属性。

标准属性指的是那些在任何飞行器中都会出现的属性。但是气动力系数、发动机、推进器、飞控/自动驾驶仪等有时也需要动态定义一些属性。因为在相关的飞机配置文件被完全读入之前,气动力系数、发动机等参数并不是完全知晓的。用户必须知道这些参数对应的属性名,这样才能够对属性进行修改和更新。例如,X-15飞机的飞行控制系统具有以下特性:

<flight_control name="X-15">

    <channel name="Pitch">

        <summer name="fcs/pitch-trim-sum">
            <input>fcs/elevator-cmd-norm</input>
            <input>fcs/pitch-trim-cmd-norm</input>
            <clipto>
                <min>-1</min>
                <max>1</max>
            </clipto>
        </summer>

        <aerosurface_scale name="fcs/pitch-command-scale">
            <input>fcs/pitch-trim-sum</input>
            <range>
                <min>-50</min>
                <max>50</max>
            </range>
        </aerosurface_scale>

        <pure_gain name="fcs/pitch-gain-1">
            <input>fcs/pitch-command-scale</input>
            <gain>-0.36</gain>
        </pure_gain>

上述代码中的第一个组件 "fcs/pitch-trim-sum" 包含两个已知的静态输入,即 fcs/elevator-cmd-normfcs/pitch-trim-cmd-norm。第二个组件将第一个组件的输出作为自身的输入,最后一个增益组件又以上一个输出(fcs/pitch-command-scale)作为自身的输入。

至此,用于已经拥有了一种获取JSBSim参数的方法,也了解了飞控系统是如何嵌入到JSBSim系统中。飞控系统中相同的组件也能够用于构建自动驾驶仪等其他子系统。

上一篇 下一篇

猜你喜欢

热点阅读