Howto:Implement a Fly-By-Wire System for Airliners: Difference between revisions

m
→‎/Nasal/fbw.nas: move yaw damping to separate method
m (→‎/Nasal/fbw.nas: move elevator processing to separate method)
m (→‎/Nasal/fbw.nas: move yaw damping to separate method)
Line 135: Line 135:
var aileronin = getprop(fcs~"aileron-cmd-norm");
var aileronin = getprop(fcs~"aileron-cmd-norm");
me.elevatorin =  getprop(fcs~"elevator-cmd-norm");
me.elevatorin =  getprop(fcs~"elevator-cmd-norm");
var rudderin = getprop(fcs~"rudder-cmd-norm");
me.rudderin = getprop(fcs~"rudder-cmd-norm");


## FBW Output (actual surface positions)
## FBW Output (actual surface positions)
Line 141: Line 141:
var aileronout = getprop(fcs~"aileron-fbw-output");
var aileronout = getprop(fcs~"aileron-fbw-output");
me.elevatorout =  getprop(fcs~"elevator-fbw-output");
me.elevatorout =  getprop(fcs~"elevator-fbw-output");
var rudderout = getprop(fcs~"rudder-fbw-output");
me.rudderout = getprop(fcs~"rudder-fbw-output");


## Engine Throttle Positions
## Engine Throttle Positions
Line 312: Line 312:
me.targetrudder = aileronout / 2;
me.targetrudder = aileronout / 2;


if (me.targetrudder < rudderout) rudderout -= 0.015;
if (me.targetrudder < me.rudderout) me.rudderout -= 0.015;
if (me.targetrudder > rudderout) rudderout += 0.015;
if (me.targetrudder > me.rudderout) me.rudderout += 0.015;


} }
} }


## YAW DAMPER
me.update_yaw_damper();
 
if (getprop("/controls/fbw/yaw-damper")) {
 
if (rudderin > rudderout) rudderout += 0.05 * me.fpsfix;
 
if (rudderin < rudderout) rudderout -= 0.05 * me.fpsfix;
 
} else {
 
rudderout = rudderin;
 
}


# Transmit output signals to surfaces
# Transmit output signals to surfaces
Line 335: Line 323:
setprop(fcs~"aileron-fbw-output", aileronout);
setprop(fcs~"aileron-fbw-output", aileronout);
setprop(fcs~"elevator-fbw-output", me.elevatorout);
setprop(fcs~"elevator-fbw-output", me.elevatorout);
setprop(fcs~"rudder-fbw-output", rudderout);
setprop(fcs~"rudder-fbw-output", me.rudderout);


setprop("controls/engines/engine[0]/throttle", throttles[0]);
setprop("controls/engines/engine[0]/throttle", throttles[0]);
Line 348: Line 336:
setprop(fcs~"aileron-fbw-output", aileronin);
setprop(fcs~"aileron-fbw-output", aileronin);
setprop(fcs~"elevator-fbw-output", me.elevatorin);
setprop(fcs~"elevator-fbw-output", me.elevatorin);
setprop(fcs~"rudder-fbw-output", rudderin);
setprop(fcs~"rudder-fbw-output", me.rudderin);


}
}
Line 359: Line 347:
     if ((me.elevatorin - me.elevatorout < 0.05) and (me.elevatorin - me.elevatorout > 0)) me.elevatorout += 0.01;  
     if ((me.elevatorin - me.elevatorout < 0.05) and (me.elevatorin - me.elevatorout > 0)) me.elevatorout += 0.01;  
     if ((me.elevatorout - me.elevatorin < 0.05) and (me.elevatorin - me.elevatorout < 0)) me.elevatorout -= 0.01;  
     if ((me.elevatorout - me.elevatorin < 0.05) and (me.elevatorin - me.elevatorout < 0)) me.elevatorout -= 0.01;  
},
    update_yaw_damper: func {
    ## YAW DAMPER
    if (getprop("/controls/fbw/yaw-damper")) {
    if (me.rudderin > me.rudderout) me.rudderout += 0.05 * me.fpsfix;
    if (me.rudderin < me.rudderout) me.rudderout -= 0.05 * me.fpsfix;
    } else {
    me.rudderout = me.rudderin;
    }
},
},
     reset : func {
     reset : func {