JSBSim 是一个开源的飞行动力学模型 ( flight dynamics model ,FDM),可以在许多操作系统下编译和运行,包括 Microsoft Windows、Apple Macintosh、Linux、IRIX、Cygwin(Windows 上的 Unix)等。 FDM 本质上是物理/数学模型定义了飞机、火箭等在使用各种控制机制和自然力施加于其上的力和力矩下的运动。JSBSim 没有原生图形。它可以作为独立程序自行运行,从脚本文件和各种配置文件中获取输入。它也可以合并到包括视觉系统的更大的飞行模拟器实现中。
功能包括:
- 通过基于 XML 的文本文件格式完全可配置的飞行控制系统、空气动力学、推进、起落架布置等。
- 地球自转对运动方程的影响(模拟科里奥利和离心加速度)。
- 可配置的数据输出格式为屏幕、文件、套接字或这些的任意组合。
在VS中配置完JSBSim之后,我们就可以编写脚本了。下面以C172x飞机为例(它的模型数据,包括质量属性、空气动力学属性、推进力属性已经包含在 aircraft/c172x.xml中)。那么我们如何使飞机在飞行期间保持机翼的水平姿态呢?即使没开过飞机我们也知道,要想保持机翼水平姿态(zero Wings-level),我们要给飞机的副翼(ailerons)一个滚转的指令,消除非零的滚转角。我们可以把自动驾驶的相关代码放在<autopilot>的element中,也可以单独放到xml文件里,方便代码复用。
滚转通道的输入来自:1)滚转配平,飞机配平就是利用装置对操作面(副翼、升降舵、方向舵)进行微调,来达到稳定飞机的姿态及航向的目的;2)飞行员操控杆的滚转命令;3)自动驾驶反馈的滚转命令。这些命令会发送到“normal roll flight control”通道中,将信号处理,然后输出对副翼的控制。在这里使用PID控制器来处理滚转角误差。
PID控制部分的代码如下,这是一个集成积分保护(wind-up protection)的PID控制器,在<pid>里如果有<triger>所定义的变量,只有这个变量为0时PID才会正常工作
<switch name="fcs/wing-leveler-ap-on-off"> <default value="-1"/> <test value="0"> ap/attitude_hold == 1 <!--当开关输入信号为1时,switch定义变量为零,使能PID--> </test> </switch> <pid name="fcs/roll-ap-error-pid"> <input>attitude/phi-rad</input> <kp> 50.0 </kp> <ki> 5.0 </ki> <kd> 17.0 </kd> <trigger> fcs/wing-leveler-ap-on-off </trigger> </pid> <switch name="fcs/roll-ap-autoswitch"> <default value="0.0"/> <test value="-fcs/roll-ap-error-pid"> ap/attitude_hold == 1<!--当开关输入信号为1时,pid输出量取相反数再反馈-->
</test>
</switch>