You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.8 KiB
91 lines
2.8 KiB
var target_bank_deg = 0;
|
|
var target_speed_kt = 50;
|
|
var target_alt_ft = 500;
|
|
|
|
var time = 0;
|
|
var last_time = 0.0;
|
|
var converge_time = 10000000.0; # a really big number of seconds we'd
|
|
# never make it to in a real run of
|
|
# the sim
|
|
var timer1 = 0.0;
|
|
|
|
var update_state = func( dt ) {
|
|
if ( dt < 0.000001 ) {
|
|
return;
|
|
}
|
|
|
|
var state = getprop("/flight-test/state");
|
|
|
|
var bank_deg = getprop("/orientation/roll-deg");
|
|
var speed_kt = getprop("/velocities/airspeed-kt");
|
|
var alt_ft = getprop("/position/altitude-ft");
|
|
|
|
if ( state == "init" ) {
|
|
# turn on wing leveler
|
|
setprop("/autopilot/locks/heading", "bank-hold");
|
|
setprop("/autopilot/settings/target-bank-deg", target_bank_deg);
|
|
# turn on altitude hold
|
|
setprop("/autopilot/locks/altitude", "altitude-hold");
|
|
# var target_alt_ft = int((alt_ft + 550) / 100) * 100;
|
|
setprop("/autopilot/settings/target-altitude-ft", target_alt_ft );
|
|
# turn on auto-throttle
|
|
setprop("/autopilot/locks/speed", "speed-with-throttle");
|
|
setprop("/autopilot/settings/target-speed-kt", target_speed_kt);
|
|
setprop("/flight-test/state", "converging");
|
|
} elsif ( state == "converging" ) {
|
|
var bank_diff = abs( bank_deg - target_bank_deg );
|
|
var speed_diff = abs( speed_kt - target_speed_kt );
|
|
var alt_diff = abs( alt_ft - target_alt_ft );
|
|
#printf("bank=%.1f spd=%.1f alt=%.1f t=%.1f ct=%.1f\n", bank_diff,
|
|
# speed_diff, alt_diff, time, converge_time);
|
|
if ( (bank_diff < 0.1) and (speed_diff < 0.5) and (alt_diff < 5) and (time >= 20.0) )
|
|
{
|
|
if ( converge_time > time ) {
|
|
converge_time = time;
|
|
}
|
|
} else {
|
|
converge_time = 10000000.0;
|
|
}
|
|
if ( time - converge_time > 10 ) {
|
|
setprop("/flight-test/state", "doublet1");
|
|
setprop("/autopilot/locks/heading", "");
|
|
setprop("/autopilot/locks/altitude", "");
|
|
setprop("/autopilot/locks/speed", "");
|
|
setprop("/controls/flight/aileron", "0.5");
|
|
timer1 = time;
|
|
}
|
|
} elsif ( state == "doublet1" ) {
|
|
if ( time - timer1 > 1 ) {
|
|
setprop("/flight-test/state", "doublet2");
|
|
setprop("/controls/flight/aileron", "-0.5");
|
|
timer1 = time;
|
|
}
|
|
} elsif ( state == "doublet2" ) {
|
|
if ( time - timer1 > 2 ) {
|
|
setprop("/flight-test/state", "done");
|
|
setprop("/autopilot/locks/heading", "bank-hold");
|
|
#setprop("/autopilot/locks/altitude", "altitude-hold");
|
|
#setprop("/autopilot/locks/speed", "speed-with-throttle");
|
|
}
|
|
}
|
|
}
|
|
|
|
var main_loop = func {
|
|
time = getprop("/sim/time/elapsed-sec");
|
|
var dt = time - last_time;
|
|
last_time = time;
|
|
|
|
if ( getprop("/flight-test/master-switch") == 1 ) {
|
|
update_state( dt );
|
|
}
|
|
|
|
settimer(main_loop, 0);
|
|
}
|
|
|
|
setlistener("/sim/signals/fdm-initialized",
|
|
func {
|
|
props.globals.initNode("/flight-test/master-switch", 1,
|
|
"BOOL", 1);
|
|
setprop("/flight-test/state", "init");
|
|
main_loop();
|
|
});
|
|
|