Flight-control system¶
For aircraft with a real AFCS (H-60, H-47 and the like), RFM has a generic flight-control system. You build it out of blocks in one profile (Fcs Profile) on the Flight component, 10E Flight Controls - Control System. Leave the profile empty or disabled and nothing changes: every existing aircraft flies exactly the same.
It runs alongside the older Stability Augmentation (10B, the Mi-8's AP-34B). They don't touch each other.
Where it sits¶
Every control goes through the same stages, in this order:
- Pilot: the controls after force trim and the pedal helper.
- Trim: plus the trim actuators. These are slow and have lots of authority, like the real ones that move the stick.
- Augmented: plus the SAS channels. These are fast and small, in series, and don't move the stick.
- Mixed: the normal mixer (10), then your scheduled crossfeeds.
- Servo: after hydraulics, servo rate/force/position limits and manual reversion.
The four axes are the same ones the topology already routes to your rotors (collective, longitudinal, lateral, yaw), so this works for tandems and coaxials without knowing which rotor is which.
The blocks¶
Everything has an ID. IDs are how blocks find each other, and they have to be unique across the whole profile.
Sources. Sensors (attitude, air data, navigation, radar altimeter), electrical buses and hydraulic systems. A source can need another one (an AHRS needing a DC bus), take time to warm up, and come and go with a condition: a bus that's only live with the engines running or above a rotor speed, hydraulics above a pressure, air data that's only valid above an airspeed, a radar altimeter that stops reading above a height. Any block can list the sources it needs. If you don't author any source of a kind, those signals are treated as perfect and never fail (the checker tells you).
SAS channels. One axis each. A channel is a sum of feedback terms: a signal times a gain, with an optional gain schedule, washout, lag, or "hold reference" (hold the attitude it had when it engaged). Its Authority is the most it can ever put in. Give two channels the same Redundancy Group and they act as two lanes of one system: lose one and the other uses its Solo Gain Scale, but its authority stays the same.
Trim actuators. One axis each, collective included. They move at their Rate and stay inside their offset limits. When the pilot moves the control past the override threshold (or holds the Force Trim Release button), the trim stops and its modes follow the aircraft. Once the pilot lets go, it picks up again from wherever things are.
Modes. One block covers attitude, heading, airspeed, altitude, vertical speed, velocity (TRC), position and navigation hold. A mode holds one signal at a reference with a PI(D) law, and sends its output to a trim actuator, to a SAS channel, or to another mode's reference (an outer loop, like airspeed hold setting the pitch attitude, or position hold setting the velocity). Things you can set:
- Reference: grab the current value when it engages, use a fixed value, take it from the pilot's control (a rate or velocity command), or get it from an outer loop.
- Group and priority: only one mode per group runs, the highest priority one that's allowed to.
- Conditions: signal ranges it needs to engage. It drops out once a value goes past the range plus the hysteresis.
- Capture: if it engages a long way from its target, the reference slides there at the capture rate instead of jumping.
- Auto engage: on by itself whenever its conditions hold, like TRC below 9 kt.
- Dropout: switch off, or wait on standby and come back. It can also hand over to another mode.
- Pilot override: follow the aircraft and recapture afterwards, or just drop.
Engaging is always bumpless: the controller starts from wherever the thing it drives already is.
Crossfeeds. After the mixer, one axis can feed another: gain times (input minus a reference), times a gain schedule, plus a bias schedule. Use it for things like collective-to-yaw that fades out with airspeed.
Surfaces. Moves an airframe surface by name (a stabilator) using schedules and feedback terms, within angle and rate limits. It can replace the surface's incidence or add to it. If its sources go, it freezes or drives to a fail angle, and there's a manual slew mode.
Signals¶
The unit is in every signal's name: IAS_KT, BARO_ALTITUDE_FT, VERTICAL_SPEED_FPM, PITCH_RATE_DEGS, and so on. Pitch, roll and heading are in degrees, nose up, right wing down and nose right positive. Controls are normalized: collective 0 to 1, everything else -1 to 1. An authority of 0.1 is 10 % of full travel.
Radar altitude is the height of the model origin above the ground, worked out from the rotor hub height, so it's close but not exact.
Torque limiting¶
ENGINE_TORQUE_PERCENT is the highest engine torque on the main drivetrain, in percent, the same number the cockpit torque gauge shows. For a CH-47-style torque limiter, add a mode in the same group as your altitude hold with a higher priority, holding ENGINE_TORQUE_PERCENT at a FIXED 96 and driving the collective trim. Give it a condition of ENGINE_TORQUE_PERCENT from 96 up, with a couple of percent of hysteresis. It only takes over while torque is over the limit, then hands back to altitude hold. Altitude hold picks up the height it's at when it takes back over, not the one it had before.
Checking it¶
When the aircraft spawns, RFM checks the profile and prints [RFM-FCS-CHECK] lines. It catches duplicate IDs, links to things that don't exist, dependency loops, schedules that don't go up in order or have mismatched counts, numbers that look like the wrong unit (an airspeed breakpoint of 500 is probably km/h), zero authority or rate, blocks that do nothing, and surfaces the airframe doesn't have.
To see it working, tick Draw Fcs Panel (83 Diagnostics - Controls). In the pilot seat you get every stage per axis and every block with what it asked for, what it actually put in, whether it saturated, and its state. Telemetry Interval in the profile also logs an [RFM-FCS] line.
Fcs Bench Test (82 Diagnostics - Flight) runs isolated checks on built-in test profiles and prints [RFM-FCSTEST] PASS/FAIL lines. It doesn't touch your aircraft.
Not there yet¶
- No lateral-acceleration signal yet.
- Trim actuators move the commanded control, but the cockpit stick animation still only shows the pilot.
- A velocity-command mode adds to the pilot's stick instead of replacing it.
- The tandem longitudinal cyclic trim isn't one of the four axes. It lives on each rotor's control map instead (Control maps).
Small gains. Workbench saves prefab numbers with three decimals, so a gain like 0.0002 comes back as 0 after you save. Pick signals and loop layouts where your gains have three meaningful decimals (an altitude hold straight onto the collective trim at 0.004 per foot, rather than through a vertical-speed loop at 0.0002 per ft/min). The checker warns when a mode's Kp and Ki both end up 0.