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>