var last_time = 0.0; var last_speed = 0.0; var speed_sensed = 0.0; var sensor_step = 1.0; var speed_filt = 0.0; var accel_filt = 0.0; var compute_airspeed_accel = func( speed_filt, dt ) { # print ( "computing forward acceleration ", dt ); var delta_speed = speed_filt - last_speed; last_speed = speed_filt; var accel = delta_speed / dt; return accel; } var update_airdata = func( dt ) { # crude model of a noisy electronic pitot tube sensed_speed = getprop("/velocities/airspeed-kt"); var r = rand(); if ( r < 0.3333 ) { sensed_speed = sensed_speed - sensor_step; } elsif ( r > 0.6666 ) { sensed_speed = sensed_speed + sensor_step; } speed_filt = 0.97 * speed_filt + 0.03 * sensed_speed; var sensed_accel = 0.0; if ( dt > 0 ) { sensed_accel = compute_airspeed_accel( speed_filt, dt ); } accel_filt = 0.97 * accel_filt + 0.03 * sensed_accel; setprop("/accelerations/airspeed-ktps", accel_filt); } round10 = func(v) { if (v == nil) return 0; return 0.1*int(v*10); } round100 = func(v) { if (v == nil) return 0; return 0.01*int(v*100); } var update_vars = func( dt ) { asl_ft = getprop("/position/altitude-ft"); ground = getprop("/position/ground-elev-ft"); agl_m = (asl_ft - ground) * 0.3048; setprop("/apm/altitude", round10(agl_m)); setprop("/apm/pitch", round10(getprop("/orientation/pitch-deg"))); setprop("/apm/roll", round10(getprop("/orientation/roll-deg"))); setprop("/apm/heading", round10(getprop("/orientation/heading-deg"))); setprop("/apm/aileron", round100(getprop("/surface-positions/right-aileron-pos-norm"))); setprop("/apm/elevator", round100(getprop("/surface-positions/elevator-pos-norm"))); setprop("/apm/rudder", round100(getprop("/surface-positions/rudder-pos-norm"))); setprop("/apm/throttle", round10(getprop("/engines/engine/rpm"))); setprop("/apm/groundspeed", round10(0.514444444*getprop("/instrumentation/gps/indicated-ground-speed-kt"))); # airspeed-kt is actually in feet per second (FDM NET bug) setprop("/apm/airspeed", round10(0.3048*getprop("/velocities/airspeed-kt"))); }