Guidance, Navigation and Control · Theory · M10
M10-T4 — Approach and Automatic Landing
A beam of angle is not a beam of distance. Near the runway a fixed angular gain becomes an enormous distance gain, and the loop goes unstable exactly where the margin is least.
An automatic landing is a sequence of three guidance problems: track the localizer laterally, track the glide slope vertically, and flare to a controlled touchdown. The first two are measured as angles from the runway, and the second hides a hazard: the loop gain in metres rises as one over the range, so a gain that is stable at 500 m is unstable at 15 m. This lesson derives the range-dependent gain that fixes it, designs the exponential flare law, and finds that a small aircraft needs a flare time constant of 4 s to touch down at 0.37 m/s, and that a downdraft of only 0.5 m/s adds 0.8 m/s to the sink rate.
Learning objectives
After this lesson, you should be able to:
- Derive the loop gain of an angular glide-slope loop in metres and its dependence on range.
- Schedule the gain on range and verify the damping stays constant.
- Write the exponential flare law, choose its start height and time constant from the sink-rate requirement, and find the touchdown point.
- Estimate the effect of a downdraft or a lag on the touchdown sink rate.
The intuition
UAV M6-T6: Flight modes lists an automatic landing as one of the modes a stack offers, and M10-T2: The Autopilot by Successive Loop Closure built the altitude loop that this lesson commands. Hopper's own touchdown has the same shape: a path that converges to a point, a final phase that reduces the sink rate and a requirement on the speed at contact, and the terminal law of M8-T3: Explicit Guidance to a Terminal State has the same ingredients in a different form.
A beam in angle
An instrument landing system gives the aircraft the angle between the line to the antenna and the glide slope (3° here), as an error . The autopilot wants to reduce the distance from the beam. If the commanded flight path angle is proportional to , the flight path responds to a distance error with a gain per second: it grows as the range shrinks. With two lags of 1 s and 0.5 s between command and flight path (the autopilot and the aircraft), the third-order loop is stable only while per second. With a gain of 2 rad/rad at 25 m/s that fails at 16.7 m of range: the damping ratio of the dominant pair is 0.85 at 200 m, 0.51 at 100 m, 0.27 at 50 m, zero at 17 m and negative at 12 m.
Schedule the gain on range
The cure follows from the same arithmetic: make the angular gain proportional to the range, . The loop gain in metres is then constant, , and the poles do not move with range: the damping stays at 0.51 everywhere. In practice the schedule is capped at the far end (the gain cannot grow without bound) and the gain is reduced further in the last few seconds.
The flare
The glide slope would bring the aircraft to the ground at its sink rate, 1.31 m/s for 3° at 25 m/s, which is more than a landing gear or a small aircraft's structure wants. The flare reduces it: command a sink rate proportional to height, . The height decays exponentially, and since the law aims at a point below the ground, the aircraft reaches the ground with a sink rate instead of zero. The flare starts when the commanded sink rate equals the glide sink rate, at .
For this aircraft with the two lags, a flare time constant of 1 s touches down at 1.26 m/s (the lags prevent it flaring in time), 2 s at 0.97 m/s, 3 s at 0.63 m/s and 4 s at 0.37 m/s, with flare starts at 0.71, 2.0, 3.3 and 4.6 m and ground runs of 14, 42, 78 and 128 m. A longer time constant gives a softer touchdown and a longer float.
Schedule angular gains on range so that the loop gain in metres is constant. Design the flare as an exponential in height with a time constant long enough for the response lags, and check the sink rate with a downdraft.
Definitions
- Localizer and glide slope
- Radio beams that give the lateral and vertical angular deviation from the approach path to the runway.
- Beam error and distance
- is the angle between the aircraft's bearing from the antenna and the beam; the corresponding distance at range .
- Range-scheduled gain
- A gain proportional to the range from the antenna.
- Flare
- The pitch-up manoeuvre that reduces the sink rate to a touchdown value; an exponential flare commands .
- Sink rate
- The vertical speed at the ground contact.
Derivation: the stability limit of the angular loop, and the flare
From the geometry of the beam to the stability boundary of the loop.
The deviation in metres is the range times the beam error in radians (small angles).
The distance from the beam changes with the vertical speed relative to the beam: the speed times the flight path error .
The proportional guidance command on the beam error, in angle.
The path response lags the command through the autopilot and the aircraft.
Close the loop: and the lags give a third-order characteristic polynomial with the gain g.
The Routh condition for a cubic : , i.e. . For , the limit is 3 per second, reached at = 16.7 m for K = 2 and V = 25.
Scheduling the gain on range makes the metre-gain constant: the poles do not move.
The flare
The solution of the first-order equation: height decays exponentially toward the aim point below the ground.
Touchdown when the height reaches zero; the sink rate there is the aim offset over the time constant, independent of the start height.
Continuity of sink rate at the flare start: the commanded sink rate equals the glide sink rate there.
The angular glide-slope loop has a gain in metres of K V / r, which rises without bound toward the runway and eventually breaks the Routh condition. Scheduling the angular gain on range holds the loop gain, and the damping, constant. The flare sets the touchdown sink rate by the aim offset over the time constant.
A worked example
An aircraft at 25 m/s on a 3° slope (glide sink rate 1.31 m/s) with two lags of 1.0 s and 0.5 s between command and flight path.
- Stability limit. The loop is stable while per second. With K = 2: = 0.08, 0.25, 0.50, 1.00, 2.50 and 5.00 at 600, 200, 100, 50, 20 and 10 m. The limit is passed at 16.7 m.
- Poles, fixed gain. The dominant pair has damping 0.85 at 200 m, 0.51 at 100 m, 0.27 at 50 m, 0.00 at 17 m and −0.06 at 12 m (real part +0.10 1/s). At 600 m the roots are real (−2.07, −0.83, −0.10): slow convergence.
- Poles, scheduled gain. With the poles are −0.34 ± 0.56j (damping 0.51) at every range.
- Simulation. From a 30 m offset at 900 m with a 1.5 m/s downdraft crossing 80 m to 60 m: the fixed-gain loop has a deviation of 5.7 m at 400 m (slow far out) against 0.5 m for the scheduled loop; after the gust both settle within 1.2 m at 60 m.
- Flare. For = 1, 2, 3, 4 s the flare starts at 0.71, 2.02, 3.33, 4.63 m, touches down at 1.26, 0.97, 0.63, 0.37 m/s after a ground run of 13.7, 42.0, 78.3, 127.9 m (0.6, 1.7, 3.1, 5.1 s).
- Downdraft. With a 0.5 m/s downdraft from the flare start the touchdown sink rates are 1.78, 1.60, 1.36, 1.15 m/s for the four time constants: the downdraft adds 0.5 to 0.8 m/s.
import math
import gnckit as g
V, GS = 25.0, math.radians(3.0)
T1, T2 = 1.0, 0.5 # two lags between the commanded and the achieved flight path angle: autopilot and aircraft response
def stability_limit():
return (T1 + T2) / (T1 * T2)
print(f'glide slope tracking: with an angular deviation ε = d / r and a gain K (rad of flight path angle per rad of beam error), the loop gain in metres is K V / r')
print(f' two lags {T1} s and {T2} s: the third-order loop is stable while K V / r < (T1 + T2) / (T1 T2) = {stability_limit():.2f} per second')
K0 = 2.0
for r in (600.0, 200.0, 100.0, 50.0, 20.0, 10.0):
gain = K0 * V / r
print(f' range {r:5.0f} m: fixed angular gain {K0} gives K V / r = {gain:5.2f}' + (' UNSTABLE' if gain > stability_limit() else '') + f'; scheduled gain (K proportional to r) holds {K0 * V / 100.0:.2f}')
print('poles of T1 T2 s^3 + (T1 + T2) s^2 + s + K V / r = 0, dominant pair, for the fixed gain and the scheduled gain:')
for r in (600.0, 200.0, 100.0, 50.0, 17.0, 12.0):
row = []
for gain in (K0 * V / r, K0 * V / 100.0):
roots = [complex(z) for z in g.poly_roots([T1 * T2, T1 + T2, 1.0, gain])]
pair = [z for z in roots if z.imag > 1e-9]
slow = min(roots, key=lambda z: abs(z))
if pair:
z0 = pair[0]; row.append(f'pair {z0.real:+.2f} +- {z0.imag:.2f}j (damping {-z0.real / abs(z0):.2f}), slow root {slow.real:+.2f}')
else:
row.append('real roots ' + ', '.join(f'{z.real:+.2f}' for z in roots))
print(f' range {r:5.0f} m: fixed: {row[0]:62s} | scheduled: {row[1]}')
def approach(scheduled, d0=30.0, r0=900.0, dt=0.02, Kref=2.0, Rref=100.0):
r = r0
h = r * math.tan(GS) + d0
g1 = g2 = -GS # achieved flight path angle through two lags
log = []
while r > 8.0:
eps = math.atan2(h, r) - GS
K = Kref * (r / Rref) if scheduled else Kref
K = min(K, 4.0) if scheduled else K
gc = -GS - K * eps
g1 += (gc - g1) / T1 * dt
g2 += (g1 - g2) / T2 * dt
gust = -1.5 if 60.0 < r < 80.0 else 0.0 # a downdraft of 1.5 m/s while crossing 80 m to 60 m of range
h += (V * g2 + gust) * dt
r -= V * math.cos(g2) * dt
log.append((r, h - r * math.tan(GS)))
return log
for scheduled in (False, True):
log = approach(scheduled)
def at(rq): return min(log, key=lambda p: abs(p[0] - rq))[1]
peak_late = max(abs(d) for r, d in log if r < 60)
print(f' {"range-scheduled gain" if scheduled else "fixed gain "}: deviation from the beam {at(400):+6.2f} m at 400 m, {at(60):+6.2f} m at 60 m (after the gust), {at(40):+6.2f} m at 40 m, {at(25):+6.2f} m at 25 m, {at(12):+6.2f} m at 12 m; largest inside 40 m: {max(abs(d) for r, d in log if r < 40):.2f} m')
print('flare: exponential law h_dot_c = -(h + h_off) / tau_f, started when it equals the glide sink rate; same two lags; touchdown at h = 0')
sink0 = V * math.sin(GS)
print(f' glide sink rate {sink0:.2f} m/s at {V:.0f} m/s on a {math.degrees(GS):.0f} degree slope')
def flare(tau_f, h_off=0.6, wind_down=0.0, dt=0.005):
hs = tau_f * sink0 - h_off
h = hs; x = 0.0
g1 = g2 = -GS
t = 0.0
while h > 0.0 and t < 60:
hdot_c = -(h + h_off) / tau_f
gc = math.asin(max(-1.0, min(1.0, hdot_c / V)))
g1 += (gc - g1) / T1 * dt
g2 += (g1 - g2) / T2 * dt
hd = V * g2 - wind_down
h += hd * dt
x += V * math.cos(g2) * dt
t += dt
return hs, hd, x, t
print(' tau_f flare start height touchdown sink rate ground run from the flare start time')
for tau_f in (1.0, 2.0, 3.0, 4.0):
hs, hd, x, t = flare(tau_f)
print(f' {tau_f:4.1f} s {hs:8.2f} m {-hd:8.2f} m/s {x:8.1f} m {t:5.1f} s')
print(' the same flares in a 0.5 m/s downdraft that begins at the flare start:')
for tau_f in (1.0, 2.0, 3.0, 4.0):
hs, hd, x, t = flare(tau_f, wind_down=0.5)
print(f' tau_f = {tau_f:3.1f} s: touchdown sink rate {-hd:.2f} m/s, ground run {x:6.1f} m')glide slope tracking: with an angular deviation ε = d / r and a gain K (rad of flight path angle per rad of beam error), the loop gain in metres is K V / r two lags 1.0 s and 0.5 s: the third-order loop is stable while K V / r < (T1 + T2) / (T1 T2) = 3.00 per second range 600 m: fixed angular gain 2.0 gives K V / r = 0.08; scheduled gain (K proportional to r) holds 0.50 range 200 m: fixed angular gain 2.0 gives K V / r = 0.25; scheduled gain (K proportional to r) holds 0.50 range 100 m: fixed angular gain 2.0 gives K V / r = 0.50; scheduled gain (K proportional to r) holds 0.50 range 50 m: fixed angular gain 2.0 gives K V / r = 1.00; scheduled gain (K proportional to r) holds 0.50 range 20 m: fixed angular gain 2.0 gives K V / r = 2.50; scheduled gain (K proportional to r) holds 0.50 range 10 m: fixed angular gain 2.0 gives K V / r = 5.00 UNSTABLE; scheduled gain (K proportional to r) holds 0.50 poles of T1 T2 s^3 + (T1 + T2) s^2 + s + K V / r = 0, dominant pair, for the fixed gain and the scheduled gain: range 600 m: fixed: real roots -2.07, -0.83, -0.10 | scheduled: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 range 200 m: fixed: pair -0.40 +- 0.25j (damping 0.85), slow root -0.40 | scheduled: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 range 100 m: fixed: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 | scheduled: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 range 50 m: fixed: pair -0.24 +- 0.86j (damping 0.27), slow root -0.24 | scheduled: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 range 17 m: fixed: pair -0.01 +- 1.40j (damping 0.00), slow root -0.01 | scheduled: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 range 12 m: fixed: pair +0.10 +- 1.61j (damping -0.06), slow root +0.10 | scheduled: pair -0.34 +- 0.56j (damping 0.51), slow root -0.34 fixed gain : deviation from the beam +5.74 m at 400 m, -1.21 m at 60 m (after the gust), -1.00 m at 40 m, -0.61 m at 25 m, -0.15 m at 12 m; largest inside 40 m: 1.00 m range-scheduled gain: deviation from the beam +0.50 m at 400 m, -1.18 m at 60 m (after the gust), -1.04 m at 40 m, -0.83 m at 25 m, -0.63 m at 12 m; largest inside 40 m: 1.04 m flare: exponential law h_dot_c = -(h + h_off) / tau_f, started when it equals the glide sink rate; same two lags; touchdown at h = 0 glide sink rate 1.31 m/s at 25 m/s on a 3 degree slope tau_f flare start height touchdown sink rate ground run from the flare start time 1.0 s 0.71 m 1.26 m/s 13.7 m 0.6 s 2.0 s 2.02 m 0.97 m/s 42.0 m 1.7 s 3.0 s 3.33 m 0.63 m/s 78.3 m 3.1 s 4.0 s 4.63 m 0.37 m/s 127.9 m 5.1 s the same flares in a 0.5 m/s downdraft that begins at the flare start: tau_f = 1.0 s: touchdown sink rate 1.78 m/s, ground run 9.9 m tau_f = 2.0 s: touchdown sink rate 1.60 m/s, ground run 28.8 m tau_f = 3.0 s: touchdown sink rate 1.36 m/s, ground run 49.9 m tau_f = 4.0 s: touchdown sink rate 1.15 m/s, ground run 73.4 m
In robotics
Automatic landing systems are among the most scrutinized pieces of flight control.
- Gain scheduling on range or height. Every glide-slope coupler schedules its gain on radio altitude or range, and lowers the gain toward the threshold; the lateral localizer loop is scheduled in the same way as the lateral deviation is also an angle.
- Flare design. The flare time constant and offset are set by the sink-rate limit (landing gear strength), the dispersion of touchdown point (a longer flare floats farther) and the response lags. A sink-rate requirement of 0.4 m/s at touchdown with this aircraft needs a 4 s time constant and a 128 m float: a short runway rules it out.
- Disturbances. A downdraft or shear in the last seconds (a microburst or a ground-effect change) adds to the sink rate as shown. Autoland certification includes dispersions of wind, shear, sensor error and lag, with probabilities of landing outside the box, as in the Monte Carlo of module 12.
- Radar altimeter. The flare uses height from a radar altimeter, not the barometer, because the barometric error (tens of metres, from the aiding-sensors lesson) is far larger than the flare height of 5 m.
- Hopper. The same structure carries over to the rocket: a converging descent whose guidance depends on range, a final phase with a touchdown speed limit (the 0.3 m/s hold in the explicit-guidance lesson), and a measure of height from a radar altimeter.
The lab M10-L2: Close the Loops in Order builds the loops and lands the survey aircraft in turbulence. The requirements an autoland is judged against are the subject of M10-T5: Handling Qualities, Margins and Envelope Protection.
Common misconceptions
“A glide-slope loop with a good gain at 500 m is good everywhere.”
The loop gain in metres is K V / r, so it is 50 times higher at 10 m than at 500 m. A fixed gain tuned far out is unstable near the threshold (inside 17 m in the example).
“The flare is a pitch-up at a fixed height.”
It is a closed-loop law on height and sink rate: the start height depends on the time constant (0.7 to 4.6 m here), and the sink rate at touchdown on the offset over the time constant.
“A shorter flare time constant gives a firmer, safer landing.”
It gives a harder one: 1.26 m/s against 0.37 m/s, because the response lags prevent a short flare from following the command. Softer touchdowns need longer, higher flares.
“A small downdraft is negligible near the ground.”
It adds directly to the sink rate (0.5 m/s of downdraft adds 0.5 to 0.8 m/s), which is more than the whole touchdown requirement of 0.4 m/s.
“Barometric height is good enough for the flare.”
A pressure change of 1 hPa is 8 m of height, bigger than the flare itself. The flare uses the radar altimeter.
Key takeaways
- An angular glide-slope loop has loop gain K V / r in metres, which rises as the range falls and breaks the Routh limit (K V / r < (T₁ + T₂)/(T₁T₂)) near the runway.
- With K = 2, V = 25 m/s and lags of 1 and 0.5 s the loop is unstable inside 16.7 m; damping 0.85, 0.51, 0.27, 0.00 at 200, 100, 50, 17 m.
- Scheduling K in proportion to range holds the damping at 0.51 at every range.
- The exponential flare gives a touchdown sink rate ideally; with lags, 1.26, 0.97, 0.63 and 0.37 m/s for time constants 1 to 4 s.
- Softer touchdown costs ground run: 14 m at 1 s and 128 m at 4 s.
- A downdraft of 0.5 m/s adds 0.5 to 0.8 m/s to the touchdown sink rate.
References and further reading
Each source is marked free or paid. Free to read does not mean free to reuse: the course resources page lists every source with its licence.
- B. L. Stevens, F. L. Lewis and E. N. Johnson, Aircraft Control and Simulation, 3rd edition, Wiley, 2015, the sections on approach and landing and the glide-slope coupler. Paid.
- D. McRuer, I. Ashkenas and D. Graham, Aircraft Dynamics and Automatic Control, Princeton University Press, 1973, the classic text on autoland. Paid.
- FAA Advisory Circular 120-28D, Criteria for Approval of Category III Weather Minima for Takeoff, Landing, and Rollout, the performance requirements for automatic landing. Free to read from the FAA; US government work.
- MIT 16.333 Aircraft Stability and Control (OpenCourseWare) , the lectures on autopilots and landing. Free; licence CC BY-NC-SA 4.0.
Knowledge check
Three questions. Write an answer, then reveal the explanation. Your answers stay in your browser.
Question 1
A glide-slope loop with K = 2.5 at 30 m/s and lags of 1 s and 0.4 s: at what range does it lose stability?
Explanation
The limit is gmax = (T₁ + T₂)/(T₁T₂) = 1.4/0.4 = 3.5 per second. The loop gain is K V / r = 2.5 × 30 / r = 75/r, so it reaches 3.5 at r = 21.4 m. Inside 21 m the loop is unstable; a scheduled gain K(r) proportional to r keeps K V / r constant at its design value, so the stability limit is never reached.
Question 2
With a flare time constant of 3 s and an offset of 0.6 m, an aircraft sinks at 1.31 m/s on the slope. Estimate the ideal touchdown sink rate and the flare start height.
Explanation
The ideal touchdown sink rate is hoff/τf = 0.6/3 = 0.20 m/s and the flare starts at hs = τf V sinγ − hoff = 3 × 1.31 − 0.6 = 3.33 m. The simulated value with the lags is 0.63 m/s, three times the ideal, because the lags prevent the aircraft from following the command and the sink rate at touchdown is higher; with the longer τf of 4 s it falls to 0.37 m/s.
Question 3
Why does the touchdown sink rate in a 0.5 m/s downdraft increase by more than 0.5 m/s?
Explanation
The downdraft adds directly 0.5 m/s to the vertical speed relative to the ground. But the flare law reduces the commanded sink only after it measures the height, and the aircraft lags the command, so the downdraft that begins at the flare start also delays the response: the vertical speed is higher over the whole flare. For a time constant of 1 s the touchdown sink rate went from 1.26 to 1.78 m/s (+0.52); for 4 s from 0.37 to 1.15 m/s (+0.78), since the longer flare is exposed to the downdraft for longer.
What’s next
Related content
Nothing below is required to finish this lesson.
- BeforeM10-T3: Air Data, Angle of Attack and Wind
Compute airspeed, altitude, angle of attack and sideslip from air-data measurements, and estimate the wind from air data and inertial velocity.
- LabM10-L2: Close the Loops in Order
Build the longitudinal autopilot of the survey aircraft from pitch rate to glide slope, one loop at a time, and land within the sink-rate limit in turbulence.
Other courses on this site treat neighbouring topics from their own angle:
- UAV M1-T2: Multirotor, fixed-wing and VTOL architectures
- UAV M5-T1: UAV equations of motion (wind triangle)
- UAV M6-T6: Flight modes
- UAV M6-T3: PX4 architecture
- Navigation M9-T5: Other Platforms: Legged, Aerial, Marine and Off-Road
This course leaves the following to the pages that already teach them:
Get notified when the next lesson and new labs are released.
One email per new lesson or lab.