Howto:Add thrust reversal

From FlightGear wiki
Revision as of 17:03, 17 May 2009 by Bcoconni (talk | contribs) (→‎reverse-thrust.nas: Reverser angle should be expressed in radians rather than in degrees)
Jump to navigation Jump to search

JSBSim

-set.xml

Add the following codes in the -set.xml file, below the </sim> tag. You've to add such piece for every engine, containing thrust reversal.

<engines>
 <engine n="0">
  <running>true</running>
 </engine>     
 <engine n="1">
  <reverser-position type="double">0.000000</reverser-position>
 </engine>    
</engines>
<input>
 <keyboard>
  <key n="127">
   <name>Delete</name>
   <desc>Toggle Reversers</desc>
   <binding>
    <command>nasal</command>
    <script>reversethrust.togglereverser()</script>
   </binding>
  </key>
 </keyboard>
</input>
<nasal>
 <reversethrust>
  <file>Aircraft/747-400/Nasal/reverse-thrust.nas</file>
 </reversethrust>
</nasal>

reverse-thrust.nas

Create a new file into your data/Aircraft/.../Nasal/ directory named reverse-thrust.nas. The piece of code shown below is designed for a two engine plane. To see how to handle more engined planes, take a look at the Boeing 747-400.

togglereverser = func {
r1 = "/fdm/jsbsim/propulsion/engine";
r2 = "/fdm/jsbsim/propulsion/engine[1]";
r3 = "/controls/engines/engine"; 
r4 = "/controls/engines/engine[1]"; 
r5 = "/sim/input/selected";
rv1 = "/engines/engine/reverser-pos-norm"; 
rv2 = "/engines/engine[1]/reverser-pos-norm"; 

val = getprop(rv1);
if (val == 0 or val == nil) {
interpolate(rv1, 1.0, 1.4); 
interpolate(rv2, 1.0, 1.4);  
setprop(r1,"reverser-angle-rad","3.14159");
setprop(r2,"reverser-angle-rad","3.14159");
setprop(r3,"reverser", "true");
setprop(r4,"reverser", "true");
setprop(r5,"engine", "true");
setprop(r5,"engine[1]", "true");
} else {
if (val == 1.0){
interpolate(rv1, 0.0, 1.4);
interpolate(rv2, 0.0, 1.4);   
setprop(r1,"reverser-angle-rad",0);
setprop(r2,"reverser-angle-rad",0);
setprop(r3,"reverser",0);
setprop(r4,"reverser",0);
setprop(r5,"engine", "true");
setprop(r5,"engine[1]", "true");

  }
 }
}

YASim

-set.xml

Add the following codes in the -set.xml file, below the </sim> tag. You've to add such piece for every engine, containing thrust reversal.

<input>
 <keyboard>
  <key n="127">
   <name>Delete</name>
   <desc>Toggle Reversers</desc>
   <binding>
    <command>property-toggle</command>
    <property>controls/engines/engine[0]/reverser</property>
   </binding>
   <binding>
    <command>property-toggle</command>
    <property>controls/engines/engine[1]/reverser</property>
   </binding>
  </key>
 </keyboard>
</input>

-yasim.xml

Every engine with reversal should contain the following code. The transition-time defines the time that it takes to turn the engines to reversed position.

<jet>
 <control-input axis="/controls/engines/engine[0]/reverser" control="REVERSE_THRUST"/>
 <control-output control="REVERSE_THRUST" prop="/surface-positions/reverser-norm"/>
 <control-speed control="REVERSE_THRUST" transition-time="1.5"/>
</jet>

<jet>
 <control-input axis="/controls/engines/engine[1]/reverser" control="REVERSE_THRUST"/>
 <control-output control="REVERSE_THRUST" prop="/surface-positions/reverser-norm[1]"/>
 <control-speed control="REVERSE_THRUST" transition-time="1.5"/>
</jet>