This is an old revision of the document!
Table of Contents
Actuators and Servos
The actuators in Aerofly FS 2 can simulate the delay between control input and physical deflections.
servoclassic
The most basic actuator in Aerofly FS 2 is the servoclassic. It can represent an electrical servo motor or a hydraulic actuator and even the human control inputs, e.g. when there is a direct mechanical linkage.
The values P0, P1, P2 and P3 are the factors of a polynomial of third degree:
x = Input(); target = P0 + P1 * x + P2 * x * x + P3 * x * x * x
P0 is the constant offset when the input is zero, P1 is the proportional factor by which the input is scaled.
Most of the times P2 and P3 are zero, then P1 defines the maximum position of the actuator, usually the control deflection is set in radiant with this value. E.g. a value of 0.1745
would be used for 10 degrees of deflection, 0.3491
(or roughly 0.35) for 20 degrees, 0.5236
for 30 degrees and so on.
After computing the target the actuator moves towards it with a given Speed
.
Position
is the initial position of the actuator, most of the times 0.0 but for the landing gear it is typically 1.0 (gear down).
<[servoclassic][ServoElevator][] <[string8][Input][ElevatorTrimmed.Output]> <[float64][Speed][12.0]> <[float64][P0][0.0]> <[float64][P1][0.35]> <[float64][P2][0.0]> <[float64][P3][0.0]> <[float64][Position][0.0]> >
Because the Speed
property is affecting the output speed it can result in strange behavior if the deflections are not symmetric, e.g. like the case for aileron differential. If there is an actuator for each aileron the one with the least output travel will reach the end position first.
In normal general aviation aircraft where the controls are mechanically connected to the control surfaces we typically only simulate one actuator, which is the yoke being actuated by the human. The control position of the yoke is then mapped onto the control surface deflections using a polynomial, which does the same thing as the P0, P1, P2, P3 values in the servoclassic (read it from right to left from P0 to Pn) but the result is instant and not delayed.
This makes it possible to create the aileron differential without any artificial lag by one of the ailerons. They move perfectly in sync, even if one has more distance to travel.
<[servoclassic][YokeAileron][] <[string8][Input][AileronTrimmed.Output]> <[float64][Speed][12.0]> <[float64][P0][0.0]> <[float64][P1][1.0]> <[float64][Position][0.0]> > <[polynomial][LeftAileron][] <[string8][Input][YokeAileron.Output]> <[float64array][Coefficients][ 0.0 0.4 0.0 ]> > <[polynomial][RightAileron][] <[string8][Input][YokeAileron.Output]> <[float64array][Coefficients][ 0.0 -0.4 0.0 ]> >
servolinear
<[servolinear][LandingLight][] <[string8][Input][LandingLightSwitch.Output]> <[float64][OutputSpeed][1.0]> <[float64array][InputPosition] [ 0.0 0.5 1.0 ]> <[float64array][OutputPosition][ 0.0 0.3 1.0 ]> <[float64][Position][0.0]> >
servocyclic
<[servocyclic][Position][] <[string8][Input][Value.Output]> <[float64][Speed][20.0]> <[tmvector2d][Range][ -3.14159 3.14159 ]> >
electrical_actuator
<[electrical_actuator][ServoFlaps][] <[string8][Input][FlapsTargetMapping.Output]> <[string8][InputEnable][BatteryConnector.Output]> <[string8][InputVoltage][MainBus.Output]> <[string8][AddLoad][MainBus.AddLoad]> <[float64][MinimumVoltage][15.0]> <[float64][RatedCurrent][10.0]> <[float64][Speed][ -0.07 0.07 ]> <[float64][Position][1.0]> >