1. 程式人生 > >[原]JSBSim 自動駕駛(淺出)

[原]JSBSim 自動駕駛(淺出)

過程 light 變量 都是 summer spa 功能模塊 start star

jsbsim的腳本文件分為幾大類:

系統腳本:

systems 包含通用飛機各部分功能模塊組件以及自動飛行控件:Autopilot.xml 和 自動飛行的算法控件:GNCUtilities.xml

引擎腳本:

engine:包含各個飛機的發動機控件

飛機腳本:

aircraft:包含各個飛機的控件、輸入輸出、初始化參數

控制腳本:

scripts:一次飛行模擬的全過程

下面我來分析一次自動飛行使用的部分腳本,以及腳本中的參數意義。

C172

腳本文件scripts中找到c1722.xml文件

 1   <use aircraft="c172x" initialize="reset01"
/> 2 <run start="0.0" end="200" dt="0.00833333"> 3 4 <event name="Engine start"> 5 <condition>simulation/sim-time-sec ge 0.25</condition> 6 <set name="fcs/throttle-cmd-norm" value="0.65"/> 7 <set name="fcs/mixture-cmd-norm" value="0.87"/> 8
<set name="propulsion/magneto_cmd" value="3"/> 9 <set name="propulsion/starter_cmd" value="1"/> 10 <set name="ap/heading_hold" value="0"/> 11 <notify> 12 <property>velocities/vc-kts</property> 13 <property>position/h-agl-ft</
property> 14 </notify> 15 </event> 16 17 <event name="Trim"> 18 <condition>simulation/sim-time-sec ge 0.50</condition> 19 <set name="simulation/do_simple_trim" value="0"/> 20 <notify> 21 <property>velocities/vc-kts</property> 22 <property>position/h-agl-ft</property> 23 </notify> 24 </event> 25 26 <event name="Set roll autopilot"> 27 <condition>simulation/sim-time-sec ge 5.0</condition> 28 <set name="ap/attitude_hold" value="1"/> 29 <notify> 30 <property>velocities/vc-kts</property> 31 <property>position/h-agl-ft</property> 32 </notify> 33 </event> 34 35 </run>

第一行:可以看到飛機文件用的是c172x.xml 初始化文件用的是:reset01.xml

第二行:表示執行的過程,0到200秒,間隔幀數是0.008秒

第四行:event代表事件處理:

    遇到condition的條件成立就執行後面的set步驟

以上是整體框架。

下面開啟我們的疑問列表:

  1.飛機文件c172x.xml是幹什麽的?初始化文件又初始化哪些東西?

  2.第五行中的 sim-time-sec是什麽意思?表達式是完成什麽條件?

  3.哪些和自動飛行控制有關?

   。。。。。。

1.飛機文件c172x.xml是幹什麽的?初始化文件又初始化哪些東西?

答1:飛機文件c172x.xml是在“飛機腳本aircraft”文件夾下的c172x文件夾中,

初始化文件reset01.xml也在這個文件夾中。

初始化文件很簡單:

<initialize name="reset00">
  <vt unit="KTS">        100.0  </vt>
  <latitude unit="DEG">   28.0  </latitude>
  <longitude unit="DEG"> -90.0  </longitude>
  <psi unit="DEG">       200.0  </psi>
  <altitude unit="FT">   4000.0  </altitude>
  <running>                0    </running>
</initialize>

初始化了飛機的位置,姿態等信息

飛機定義文件c172x.xml包含了很多東西,我們只關心部分代碼:

。。。
   <system file="GNCUtilities"/>

    <system file="Autopilot">
      <property value="0.523"> guidance/roll-angle-limit </property>
      <property value="0.174"> guidance/roll-rate-limit </property>
    </system>
    
    <autopilot file="c172ap"/>

    <flight_control name="c172">
        <channel name="Pitch">
            <summer name="fcs/pitch-trim-sum">
                <input>ap/elevator_cmd</input>
                <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/elevator-control">
                <input>fcs/pitch-trim-sum</input>
                <range>
                    <min>-28</min>
                    <max> 23</max>
                </range>
                <gain>0.01745</gain>
            </aerosurface_scale>

            <actuator name="fcs/elevator-actuator">
              <input> fcs/elevator-control </input>
              <lag> 60 </lag>
              <bias> 0.002 </bias>
              <hysteresis_width> 0.05 </hysteresis_width>
              <clipto>
                <!-- +/- 20 degrees -->
                <min> -0.34 </min>
                <max>  0.34 </max>
              </clipto>
              <output>fcs/elevator-pos-rad</output>
            </actuator>

        </channel>
。。。

這裏我們看到:飛機文件引用了兩個和自動飛行相關的系統文件:GNCUtilities和 Autopilot

這個兩個文件提供通用的自動飛行算法和組件

接著我們又看到這個c172飛機自定義了一個自動飛行的文件:c172ap

我們的問題列表又多了一個問題:4.自定義自動飛行文件c172ap做了哪些事情?

問題保留,我們接著看這個飛機文件:

它提供了自己的飛行控制組件

<flight_control name="c172">

這個裏面又分成很多部分,我們只看一個通道:Pitch

裏面有一個加法器定義一個屬性值 <summer name="fcs/pitch-trim-sum">

這個值由三方輸入參數構成:

1.ap/elevator_cmd

2.fcs/elevator-cmd-norm

3.fcs/pitch-trim-cmd-norm

其中的2和3都是在jsbsim中有明確綁定的 “成員變量”

只有1我們沒見過

我們的問題列表又多了一個問題:5.輸入參數ap/elevator_cmd在哪裏定義?由什麽提供輸入?

似乎問題總在加多,但其實都在抽絲剝繭中變少變得更加具體,繼續把Pitch通道看完:

我們看到這個加法器屬性值fcs/pitch-trim-sum又作為輸入參數被下一個算法使用,得到值fcs/elevator-control

這個值fcs/elevator-control又被fcs/elevator-actuator繼續輸入使用算出最終的輸出fcs/elevator-pos-rad

這個通道Pitch就此結束。

這個通道是幹什麽的?為了計算飛機一個姿態參數的!(此文僅討論自動駕駛部分)

先跳過其他問題,我們看4.自定義自動飛行文件c172ap做了哪些事情?

答4 這個是一個自定義的c172自動駕駛腳本

打開c172ap.xml文件發現自定義輸出輸出的地方:答5

<!-- INTERFACE PROPERTIES -->

  <property>ap/attitude_hold</property>
  <property>ap/altitude_hold</property>
  <property>ap/heading_hold</property>
  <property>ap/altitude_setpoint</property>
  <property>ap/heading_setpoint</property>
  <property>ap/aileron_cmd</property>
  <property>ap/elevator_cmd</property>
  <property>ap/airspeed_setpoint</property>
  <property>ap/airspeed_hold</property>
  <property>ap/throttle-cmd-norm</property>

<!-- INITIAL GAIN VALUES -->
  
  <property value="0.5"> ap/hdg-roll-err-c1 </property>
  <property value="50.0"> ap/roll-pid-kp </property>
  <property value="5.0"> ap/roll-pid-ki </property>
  <property value="17.0"> ap/roll-pid-kd </property>

  <!--  <property>attitude/sensor/phi-rad</property> -->

[原]JSBSim 自動駕駛(淺出)