<?xml version="1.0"?>
 
<!-- Tornado Autopilot -->

<PropertyList>

 <predict-simple>
  <name>predicted altitude 5 seconds ahead</name>
  <debug>false</debug>
  <input>/position/altitude-ft</input>
  <output>/autopilot/internal/altitude-5-sec-ahead</output>
  <seconds>2.0</seconds>
  <filter-gain>0.1</filter-gain>
 </predict-simple>
 
 <filter>
  <name>Bank Angle Limiter</name>
  <type>gain</type>
  <debug>false</debug>
  <input>
   <property>/velocities/airspeed-kt</property>
  </input>
  <output>
   <property>/autopilot/internal/bank-angle-limit-deg</property>
  </output>
  <gain>0.15</gain>
  <u_min>20.0</u_min>
  <u_max>45.0</u_max>
 </filter>
 
 <filter>
  <name>Aileron Command Limiter</name>
  <type>gain</type>
  <debug>false</debug>
  <input>
   <property>/controls/flight/wing-sweep</property>
  </input>
  <output>
   <property>/autopilot/internal/aileron-limit-norm</property>
  </output>
  <gain>0.15</gain>
  <u_min>20.0</u_min>
  <u_max>45.0</u_max>
 </filter>

<filter>
  <name>Pitch Hold</name>
  <type>gain</type>
  <debug>false</debug>
  <enable>
   <condition>
	<equals>        
	 <property>/autopilot/locks/altitude</property>
	 <value>pitch-hold</value>
	</equals>
   </condition>
  </enable>
  <input>
   <property>/autopilot/settings/target-pitch-deg</property>
   <value>0</value>
  </input>
  <output>
   <property>/autopilot/internal/target-pitch-deg</property>
  </output>
  <gain>1.0</gain>
  <u_min>-70.0</u_min>
  <u_max>70.0</u_max>
 </filter>
 
 <pid-controller>
 <name>Altitude Hold Computer</name>
 <debug>false</debug>
 <enable>
   <condition>
	<equals>        
	 <property>/autopilot/locks/altitude</property>
	 <value>altitude-hold</value>
	</equals>
   </condition>
  </enable>
  <input>
   <property>/position/altitude-ft</property>
  </input>
  <reference>
   <property>/autopilot/settings/target-altitude-ft</property>
  </reference>
  <output>
   <property>/autopilot/internal/target-pitch-deg</property>
  </output>
   <config>
     <Kp>0.075</Kp>        <!-- proportional gain -0.01 -->
    <beta>1.0</beta>       <!-- input value weighing factor -->
    <alpha>0.5</alpha>     <!-- low pass filter weighing factor -->
    <gamma>0.0</gamma>     <!-- input value weighing factor for -->
                           <!-- unfiltered derivative error -->
    <Ti>7.5</Ti>          <!-- integrator time  10.0 -->
    <Td>0.0001</Td>       <!-- derivator time -->
    <u_min>-6.0</u_min>  <!-- minimum output clamp -->
    <u_max>6.0</u_max>   <!-- maximum output clamp -->
   </config>
  </pid-controller>
  
  <pid-controller>
 <name>Altitude TFR Computer</name>
 <debug>false</debug>
 <enable>
   <condition>
	<equals>        
	 <property>/autopilot/locks/altitude</property>
	 <value>agl-hold</value>
	</equals>
   </condition>
  </enable>
  <input>
   <property>/position/altitude-agl-ft</property>
  </input>
  <reference>
   <property>/autopilot/settings/target-agl-ft</property>
  </reference>
  <output>
   <property>/autopilot/internal/target-pitch-deg</property>
  </output>
   <config>
     <Kp>0.075</Kp>        <!-- proportional gain -0.01 -->
    <beta>1.0</beta>       <!-- input value weighing factor -->
    <alpha>0.5</alpha>     <!-- low pass filter weighing factor -->
    <gamma>0.0</gamma>     <!-- input value weighing factor for -->
                           <!-- unfiltered derivative error -->
    <Ti>7.5</Ti>          <!-- integrator time  10.0 -->
    <Td>0.0001</Td>       <!-- derivator time -->
    <u_min>-10.0</u_min>  <!-- minimum output clamp -->
    <u_max>15.0</u_max>   <!-- maximum output clamp -->
   </config>
  </pid-controller>
  
  <filter>
    <name>Target Roll Computer</name>
    <debug>false</debug>
    <type>gain</type>
    <enable>
	<condition>
	 <or>
	 <equals>
	  <property>/autopilot/locks/heading</property>
	  <value>dg-heading-hold</value>
	 </equals>
	 <equals>
	  <property>/autopilot/locks/heading</property>
	  <value>true-heading-hold</value>
	 </equals>
	</or>
	</condition>
	</enable>
	<input>
	<condition>
	 <equals>
	  <property>/autopilot/locks/heading</property>
	  <value>dg-heading-hold</value>
	 </equals>
	</condition>
	<property>/autopilot/internal/heading-bug-error-deg</property>
	</input>
	<input>
	<condition>
	 <equals>
	  <property>/autopilot/locks/heading</property>
	  <value>true-heading-hold</value>
	 </equals>
	</condition>
	<property>/autopilot/internal/true-heading-error-deg</property>
	</input>
    <output>
	<property>/autopilot/internal/target-roll-deg</property>
	</output>
    <gain>5</gain>
    <u_min>
	<property>/autopilot/internal/bank-angle-limit-deg</property>
	<scale>-1.0</scale>
	</u_min>
    <u_max>
	<property>/autopilot/internal/bank-angle-limit-deg</property>
	</u_max>
  </filter>
  
  <pid-controller>
  <name>System Command: Roll</name>
  <debug>false</debug>
  <enable>
   <condition>
    <not-equals>
	<property>/autopilot/locks/heading</property>
	<value />
	</not-equals>
   </condition>
  </enable>
  <input>
   <property>/orientation/roll-deg</property>
  </input>
  <reference>
   <condition>
    <not-equals> 
	<property>/autopilot/locks/heading</property>
	<value>wing-leveler</value>
	</not-equals>
   </condition>
   <property>/autopilot/internal/target-roll-deg</property>
  </reference>
  <reference>
   <condition>
    <equals> 
	<property>/autopilot/locks/heading</property>
	<value>wing-leveler</value>
	</equals>
   </condition>
   <value>0</value>
  </reference>
    <output>
	<property>/controls/flight/aileron-trim</property>
	</output>
    <config>
      <Kp>0.0025</Kp>        <!-- proportional gain -->
      <beta>1.0</beta>     <!-- input value weighing factor -->
      <alpha>0.1</alpha>   <!-- low pass filter weighing factor -->
      <gamma>0.0</gamma>   <!-- input value weighing factor for -->
                           <!-- unfiltered derivative error -->
      <Ti>5.0</Ti>        <!-- integrator time -->
      <Td>0.00001</Td>     <!-- derivator time -->
      <u_min>-0.35</u_min> <!-- minimum output clamp -->
      <u_max>0.35</u_max>  <!-- maximum output clamp -->
    </config>
  </pid-controller>
  
  <pid-controller>
  <name>System Command: Pitch</name>
  <debug>false</debug>
  <enable>
   <condition>
    <not-equals>
	<property>/autopilot/locks/altitude</property>
	<value />
	</not-equals>
   </condition>
  </enable>
  <input>
   <property>/orientation/pitch-deg</property>
  </input>
  <reference>
   <property>/autopilot/internal/target-pitch-deg</property>
  </reference>
  <output>
   <property>/controls/flight/elevator</property>
  </output>
  <config>
   <Kp>-0.05</Kp>      
   <beta>1.0</beta>    <!-- input value weighing factor -->
   <alpha>0.1</alpha>  <!-- low pass filter weighing factor -->
   <gamma>0.0</gamma>  <!-- input value weighing factor for -->
   <Ti>20.0</Ti>       <!-- integrator time  10.0 -->
   <Td>0.00001</Td>    <!-- derivator time -->
   <u_min>-0.35</u_min> <!-- minimum output clamp -->
   <u_max>0.35</u_max>
  </config>
 </pid-controller>
 
 <pid-controller>
    <name>Auto Throttle</name>
    <debug>false</debug>
    <enable>
	<condition>
	  <equals>
	   <property>/autopilot/locks/speed</property>
        <value>speed-with-throttle</value>
	  </equals>
	</condition>
    </enable>
    <input>
      <prop>/velocities/airspeed-kt</prop>
    </input>
    <reference>
      <prop>/autopilot/settings/target-speed-kt</prop>
    </reference>
    <output>
      <prop>/controls/engines/engine[0]/throttle</prop>
    </output>
    <config>
      <Kp>0.01</Kp>        <!-- proportional gain -->
      <beta>1.0</beta>    <!-- input value weighing factor -->
      <alpha>0.1</alpha>  <!-- low pass filter weighing factor -->
      <gamma>0.0</gamma>  <!-- input value weighing factor for -->
                          <!-- unfiltered derivative error -->
      <Ti>10.0</Ti>       <!-- integrator time -->
      <Td>0.00001</Td>    <!-- derivator time -->
      <u_min>0.0</u_min>  <!-- minimum output clamp -->
      <u_max>0.84</u_max>  <!-- maximum output clamp -->
    </config>
  </pid-controller>

</PropertyList>

