[原]JSBSim 自动驾驶(浅出)

Posted 南水之源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原]JSBSim 自动驾驶(浅出)相关的知识,希望对你有一定的参考价值。

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 自动驾驶(浅出)的主要内容,如果未能解决你的问题,请参考以下文章

[原][译]JSBSim官方源码文档翻译(google翻译)

[原][译][osg][osgEarth]飞行模拟软件JSBSim的操作(FGFCS类)

特斯拉自动驾驶造假实锤:总监出马亲自作证,撞车片段被删,所有功能均为预编程...

原 创:|首例自动驾驶致死,商业普及道路还有多远?

[转][JSBSim]使用VS2015编译JSBSim

「游戏引擎 浅入浅出」4.3 片段着色器