1
0
Fork 0

Autopilot overhaul.

This commit is contained in:
curt 2004-01-31 19:55:13 +00:00
parent a67c4113e8
commit 76a08b6467
6 changed files with 605 additions and 163 deletions

View file

@ -39,6 +39,8 @@
<!-- Avionics outputs tied directly to bus, note that this is a -->
<!-- simple way to provide electrical outputs if you don't need -->
<!-- to put a circuit breaker or switch in front of the output. -->
<!-- *AND* if you don't care about back propogating the output -->
<!-- current. -->
<prop>/systems/electrical/outputs/avionics-fan</prop>
<prop>/systems/electrical/outputs/gps-mfd</prop>
<prop>/systems/electrical/outputs/hsi</prop>

View file

@ -176,6 +176,111 @@ adjEngControl = func {
}
}
##
# arg[0] is the throttle increment
# arg[1] is the auto-throttle target speed increment
incThrottle = func {
auto = props.globals.getNode("/autopilot/locks/speed", 1);
if ( !auto.getValue() or auto.getValue() == 0 ) {
engs = props.globals.getNode("/controls/engines").getChildren("engine");
foreach(e; engs) {
node = e.getNode("throttle", 1);
node.setValue(node.getValue() + arg[0]);
if ( node.getValue() < -1.0 ) {
node.setValue( -1.0 );
}
if ( node.getValue() > 1.0 ) {
node.setValue( 1.0 );
}
}
} else {
node = props.globals.getNode("/autopilot/settings/target-speed-kt", 1);
if ( node.getValue() == nil ) {
node.setValue( 0.0 );
}
node.setValue(node.getValue() + arg[1]);
if ( node.getValue() < 0.0 ) {
node.setValue( 0.0 );
}
}
}
##
# arg[0] is the aileron increment
# arg[1] is the autopilot target heading increment
incAileron = func {
auto = props.globals.getNode("/autopilot/locks/heading", 1);
if ( !auto.getValue() or auto.getValue() == 0 ) {
aileron = props.globals.getNode("/controls/flight/aileron");
if ( aileron.getValue() == nil ) {
aileron.setValue( 0.0 );
}
aileron.setValue(aileron.getValue() + arg[0]);
if ( aileron.getValue() < -1.0 ) {
aileron.setValue( -1.0 );
}
if ( aileron.getValue() > 1.0 ) {
aileron.setValue( 1.0 );
}
}
if ( auto.getValue() == "dg-heading-hold" ) {
node = props.globals.getNode("/autopilot/settings/heading-bug-deg", 1);
if ( node.getValue() == nil ) {
node.setValue( 0.0 );
}
node.setValue(node.getValue() + arg[1]);
if ( node.getValue() < 0.0 ) {
node.setValue( node.getValue() + 360.0 );
}
if ( node.getValue() > 360.0 ) {
node.setValue( node.getValue() - 360.0 );
}
}
if ( auto.getValue() == "true-heading-hold" ) {
node = props.globals.getNode("/autopilot/settings/true-heading-deg", 1);
if ( node.getValue() == nil ) {
node.setValue( 0.0 );
}
node.setValue(node.getValue() + arg[1]);
if ( node.getValue() < 0.0 ) {
node.setValue( node.getValue() + 360.0 );
}
if ( node.getValue() > 360.0 ) {
node.setValue( node.getValue() - 360.0 );
}
}
}
##
# arg[0] is the elevator increment
# arg[1] is the autopilot target alitude increment
incElevator = func {
auto = props.globals.getNode("/autopilot/locks/altitude", 1);
if ( !auto.getValue() or auto.getValue() == 0 ) {
elevator = props.globals.getNode("/controls/flight/elevator");
if ( elevator.getValue() == nil ) {
elevator.setValue( 0.0 );
}
elevator.setValue(elevator.getValue() + arg[0]);
if ( elevator.getValue() < -1.0 ) {
elevator.setValue( -1.0 );
}
if ( elevator.getValue() > 1.0 ) {
elevator.setValue( 1.0 );
}
}
if ( auto.getValue() == "altitude-hold" ) {
node = props.globals.getNode("/autopilot/settings/target-altitude-ft", 1);
if ( node.getValue() == nil ) {
node.setValue( 0.0 );
}
node.setValue(node.getValue() + arg[1]);
if ( node.getValue() < 0.0 ) {
node.setValue( 0.0 );
}
}
}
##
# Joystick axis handlers. Don't call from other contexts.
#

View file

@ -4,167 +4,409 @@
<name>autopilot</name>
<width>500</width>
<height>330</height>
<height>550</height>
<modal>false</modal>
<text>
<x>10</x>
<y>300</y>
<y>520</y>
<label>AutoPilot Settings</label>
</text>
<!-- Headings -->
<!-- Heading Modes -->
<text>
<x>10</x>
<y>260</y>
<label>Function</label>
<y>480</y>
<label>Heading Modes:</label>
</text>
<text>
<!--
<input>
<name>heading-modes</name>
<x>150</x>
<y>260</y>
<label>Activated</label>
</text>
<text>
<x>250</x>
<y>260</y>
<label>Setting</label>
</text>
<!-- Data Rows -->
<text>
<x>10</x>
<y>230</y>
<label>Heading</label>
</text>
<checkbox>
<x>150</x>
<y>230</y>
<width>12</width>
<height>12</height>
<y>480</y>
<width>150</width>
<height>25</height>
<property>/autopilot/locks/heading</property>
</checkbox>
</input>
-->
<button>
<x>310</x>
<y>480</y>
<legend>Deactivate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
node.setValue( "" );
</script>
</binding>
</button>
<text>
<x>10</x>
<y>450</y>
<label>Wing Leveler:</label>
</text>
<button>
<x>310</x>
<y>450</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
node.setValue( "wing-leveler" );
</script>
</binding>
</button>
<text>
<x>10</x>
<y>420</y>
<label>Heading Bug:</label>
</text>
<input>
<x>250</x>
<y>230</y>
<name>heading-bug</name>
<x>150</x>
<y>420</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/heading-bug-deg</property>
</input>
<button>
<x>310</x>
<y>420</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
node.setValue( "dg-heading-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>390</y>
<label>True Heading:</label>
</text>
<input>
<name>true-heading</name>
<x>150</x>
<y>390</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/true-heading-deg</property>
</input>
<button>
<x>310</x>
<y>390</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
node.setValue( "true-heading-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>360</y>
<label>NAV1 CDI Hold:</label>
</text>
<button>
<x>310</x>
<y>360</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
node.setValue( "nav1-hold" );
</script>
</binding>
</button>
<!-- Pitch/Alt Modes -->
<text>
<x>10</x>
<y>320</y>
<label>Pitch/Altitude Modes:</label>
</text>
<!--
<input>
<name>pitch-modes</name>
<x>150</x>
<y>320</y>
<width>150</width>
<height>25</height>
<property>/autopilot/locks/heading</property>
</input>
-->
<button>
<x>310</x>
<y>320</y>
<legend>Deactivate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
node.setValue( "" );
</script>
</binding>
</button>
<text>
<x>10</x>
<y>290</y>
<label>Pitch Hold:</label>
</text>
<input>
<name>pitch-deg</name>
<x>150</x>
<y>290</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/target-pitch-deg</property>
</input>
<button>
<x>310</x>
<y>290</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
node.setValue( "pitch-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>260</y>
<label>AOA Hold:</label>
</text>
<input>
<name>aoa-deg</name>
<x>150</x>
<y>260</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/target-aoa-deg</property>
</input>
<button>
<x>310</x>
<y>260</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
node.setValue( "aoa-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>230</y>
<label>Altitude Hold:</label>
</text>
<input>
<name>altitude</name>
<x>150</x>
<y>230</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/target-altitude-ft</property>
</input>
<button>
<x>310</x>
<y>230</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
node.setValue( "altitude-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>200</y>
<label>Altitude</label>
<label>AGL Hold:</label>
</text>
<checkbox>
<x>150</x>
<y>200</y>
<width>12</width>
<height>12</height>
<property>/autopilot/locks/altitude</property>
</checkbox>
<input>
<x>250</x>
<name>agl</name>
<x>150</x>
<y>200</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/altitude-ft</property>
<property>/autopilot/settings/target-agl-ft</property>
</input>
<button>
<x>310</x>
<y>200</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
node.setValue( "agl-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>170</y>
<label>VOR 1</label>
<label>NAV1 GS Hold:</label>
</text>
<checkbox>
<x>150</x>
<button>
<x>310</x>
<y>170</y>
<width>12</width>
<height>12</height>
<property>/autopilot/locks/nav</property>
</checkbox>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
node.setValue( "gs1-hold" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<!-- Velocity Modes -->
<text>
<x>10</x>
<y>140</y>
<label>Glideslope</label>
<y>130</y>
<label>Velocity Hold:</label>
</text>
<checkbox>
<x>150</x>
<y>140</y>
<width>12</width>
<height>12</height>
<property>/autopilot/locks/glide-slope</property>
</checkbox>
<text>
<x>10</x>
<y>110</y>
<label>Autothrottle</label>
</text>
<checkbox>
<x>150</x>
<y>110</y>
<width>12</width>
<height>12</height>
<property>/autopilot/locks/auto-throttle</property>
</checkbox>
<!--
<input>
<x>250</x>
<y>110</y>
<name>velocity-modes</name>
<x>150</x>
<y>130</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/speed-kt</property>
<property>/autopilot/locks/heading</property>
</input>
<text>
<x>10</x>
<y>80</y>
<label>Terrain Follow</label>
</text>
<checkbox>
<x>150</x>
<y>80</y>
<width>12</width>
<height>12</height>
<property>/autopilot/locks/terrain</property>
</checkbox>
<text>
<x>10</x>
<y>50</y>
<label>Vertical Speed</label>
</text>
<checkbox>
<x>150</x>
<y>50</y>
<width>12</width>
<height>12</height>
<property>/autopilot/locks/vert-speed</property>
</checkbox>
-->
<input>
<x>250</x>
<y>50</y>
<name>autospeed-w-pitch</name>
<x>150</x>
<y>130</y>
<width>150</width>
<height>25</height>
<property>/autopilot/settings/vertical-speed-fpm</property>
<property>/autopilot/settings/target-speed-kt</property>
</input>
<button>
<x>310</x>
<y>130</y>
<legend>Deactivate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/speed", 1);
node.setValue( "" );
</script>
</binding>
</button>
<text>
<x>10</x>
<y>100</y>
<label>Speed w/ Throttle:</label>
</text>
<button>
<x>310</x>
<y>100</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/speed", 1);
node.setValue( "speed-with-throttle" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<text>
<x>10</x>
<y>70</y>
<label>Speed w/ Pitch:</label>
</text>
<button>
<x>310</x>
<y>70</y>
<legend>Activate</legend>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/speed", 1);
node.setValue( "speed-with-pitch" );
</script>
</binding>
<binding>
<command>dialog-apply</command>
</binding>
</button>
<!-- Button Group -->

View file

@ -233,6 +233,14 @@
</binding>
</item>
<item>
<label>Reconfig Autopilot</label>
<binding>
<command>reinit</command>
<subsystem>xml-autopilot</subsystem>
</binding>
</item>
</menu>
<menu>

View file

@ -19,8 +19,15 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-A</name>
<desc>Toggle autopilot altitude lock.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/altitude</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
if ( node.getValue() == "altitude-hold" ) {
node.setValue( "" );
} else {
node.setValue( "altitude-hold" );
}
</script>
</binding>
</key>
@ -46,8 +53,15 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-G</name>
<desc>Toggle autopilot glide slope lock.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/glide-slope</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
if ( node.getValue() == "gs1-hold" ) {
node.setValue( "" );
} else {
node.setValue( "gs1-hold" );
}
</script>
</binding>
</key>
@ -55,17 +69,24 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-H</name>
<desc>Toggle autopilot heading lock.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/heading</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
if ( node.getValue() == "dg-heading-hold" ) {
node.setValue( "" );
} else {
node.setValue( "dg-heading-hold" );
}
</script>
</binding>
</key>
<key n="13">
<name>Enter</name>
<desc>Move rudder right or increase autopilot heading.</desc>
<desc>Move rudder right.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/rudder</property>
<property>/controls/flight/rudder</property>
<step type="double">0.05</step>
</binding>
</key>
@ -74,8 +95,33 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-N</name>
<desc>Toggle autopilot nav1 lock.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/nav[0]</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
if ( node.getValue() == "nav1-hold" ) {
node.setValue( "" );
} else {
node.setValue( "nav1-hold" );
}
</script>
</binding>
</key>
<key n="16">
<name>Ctrl-P</name>
<desc>Toggle pitch hold.</desc>
<binding>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
if ( node.getValue() == "pitch-hold" ) {
node.setValue( "" );
} else {
node.setValue( "pitch-hold" );
pitch = props.globals.getNode("/autopilot/settings/target-pitch-deg", 1);
pitch.setValue( getprop("/orientation/pitch-deg") );
}
</script>
</binding>
</key>
@ -83,8 +129,15 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-S</name>
<desc>Toggle auto-throttle lock.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/auto-throttle</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/speed", 1);
if ( node.getValue() == "speed-with-throttle" ) {
node.setValue( "" );
} else {
node.setValue( "speed-with-throttle" );
}
</script>
</binding>
</key>
@ -92,8 +145,17 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-T</name>
<desc>Toggle autopilot terrain lock.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/terrain</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/altitude", 1);
if ( node.getValue() == "terrain-follow" ) {
node.setValue( "" );
} else {
node.setValue( "terrain-follow" );
agl = props.globals.getNode("/autopilot/settings/target-agl-ft", 1);
agl.setValue( getprop("/position/altitude-agl-ft") );
}
</script>
</binding>
</key>
@ -126,8 +188,15 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Ctrl-W</name>
<desc>Toggle autopilot wing leveler.</desc>
<binding>
<command>property-toggle</command>
<property>/autopilot/locks/wing-leveler</property>
<command>nasal</command>
<script>
node = props.globals.getNode("/autopilot/locks/heading", 1);
if ( node.getValue() == "wing-leveler" ) {
node.setValue( "" );
} else {
node.setValue( "wing-leveler" );
}
</script>
</binding>
</key>
@ -242,10 +311,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="48">
<name>0</name>
<desc>Move rudder left or increase autopilot heading.</desc>
<desc>Move rudder left.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/rudder</property>
<property>/controls/flight/rudder</property>
<step type="double">-0.05</step>
</binding>
</key>
@ -272,9 +341,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>2</name>
<desc>Increase elevator or autopilot altitude.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/elevator</property>
<step type="double">-0.01</step>
<command>nasal</command>
<script>
controls.incElevator(-0.05, 100)
</script>
</binding>
<mod-shift>
<desc>Look back.</desc>
@ -306,11 +376,12 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="52">
<name>4</name>
<desc>Move aileron left.</desc>
<desc>Move aileron left (or adjust AP heading.)</desc>
<binding>
<command>property-adjust</command>
<property>/controls/flight/aileron</property>
<step type="double">-0.05</step>
<command>nasal</command>
<script>
controls.incAileron(-0.05, -1.0)
</script>
</binding>
<mod-shift>
<desc>Look left.</desc>
@ -333,11 +404,12 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="54">
<name>6</name>
<desc>Move aileron right.</desc>
<desc>Move aileron right (or adjust AP heading.)</desc>
<binding>
<command>property-adjust</command>
<property>/controls/flight/aileron</property>
<step type="double">0.05</step>
<command>nasal</command>
<script>
controls.incAileron(0.05, 1.0)
</script>
</binding>
<mod-shift>
<desc>Look right.</desc>
@ -371,9 +443,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>8</name>
<desc>Decrease elevator or autopilot altitude.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/elevator</property>
<step type="double">0.01</step>
<command>nasal</command>
<script>
controls.incElevator(0.05, -100)
</script>
</binding>
<mod-shift>
<desc>Look forward.</desc>
@ -888,10 +961,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="269">
<name>Enter</name>
<desc>Move rudder right or increase autopilot heading.</desc>
<desc>Move rudder right.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/rudder</property>
<property>/controls/flight/rudder</property>
<step type="double">0.05</step>
</binding>
</key>
@ -907,11 +980,12 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="356">
<name>Left</name>
<desc>Move aileron left.</desc>
<desc>Move aileron left (or adjust AP heading.)</desc>
<binding>
<command>property-adjust</command>
<property>/controls/flight/aileron</property>
<step type="double">-0.05</step>
<command>nasal</command>
<script>
controls.incAileron(-0.05, -1.0)
</script>
</binding>
<mod-shift>
<desc>Look left.</desc>
@ -927,9 +1001,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Up</name>
<desc>Increase elevator or autopilot altitude.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/elevator</property>
<step type="double">0.05</step>
<command>nasal</command>
<script>
controls.incElevator(0.05, -100)
</script>
</binding>
<mod-shift>
<desc>Look forward.</desc>
@ -943,10 +1018,12 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="358">
<name>Right</name>
<desc>Move aileron right.</desc>
<desc>Move aileron right (or adjust AP heading.)</desc>
<binding>
<command>property-adjust</command>
<property>/controls/flight/aileron</property>
<command>nasal</command>
<script>
controls.incAileron(0.05, 1.0)
</script>
<step type="double">0.05</step>
</binding>
<mod-shift>
@ -963,9 +1040,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>Down</name>
<desc>Decrease elevator or autopilot altitude.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/elevator</property>
<step type="double">-0.05</step>
<command>nasal</command>
<script>
controls.incElevator(-0.05, 100)
</script>
</binding>
<mod-shift>
<desc>Look backwards.</desc>
@ -981,9 +1059,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>PageUp</name>
<desc>Increase throttle or autopilot autothrottle.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/throttle</property>
<step type="double">0.01</step>
<command>nasal</command>
<script>
controls.incThrottle(0.01, 1.0)
</script>
</binding>
<mod-shift>
<desc>Look front right.</desc>
@ -999,9 +1078,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<name>PageDown</name>
<desc>Decrease throttle or autopilot autothrottle.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/throttle</property>
<step type="double">-0.01</step>
<command>nasal</command>
<script>
controls.incThrottle(-0.01, -1.0)
</script>
</binding>
<mod-shift>
<desc>Look back right.</desc>
@ -1051,10 +1131,10 @@ calculated by adding 256 to the GLUT key value in glut.h.
<key n="364">
<name>Insert</name>
<desc>Move rudder left or decrease autopilot heading.</desc>
<desc>Move rudder left.</desc>
<binding>
<command>property-adjust</command>
<property>/autopilot/control-overrides/rudder</property>
<property>/controls/flight/rudder</property>
<step type="double">-0.05</step>
</binding>
</key>

View file

@ -62,6 +62,11 @@ Started September 2000 by David Megginson, david@megginson.com
<path>Huds/Default/default.xml</path>
<visibility type="bool">false</visibility>
</hud>
<systems>
<autopilot>
<path>Aircraft/Generic/generic-autopilot.xml</path>
</autopilot>
</systems>
<instrument-options>
<nav n="0">
<has-gs-needle type="bool">true</has-gs-needle>