Response and stability
UAT 206 Fundamentals of Control and Autopilot Systems
Lesson
By the end of this module you will be able to
- Explain step-response metrics such as rise time, overshoot and settling time
- Compute the overshoot and settling time of a second-order system from its damping ratio and natural frequency
- Explain stability from pole locations in the s-plane
- Compute the effect of time delay on phase margin and find the critical delay
Why this matters
When tuning a drone, we check whether a step tilt command is followed quickly, whether it overshoots and how soon it settles. These quantities have names and formulas tied to the model. Knowing them tells us which way to adjust the gains, and what makes a system unstable, oscillating until it can no longer be controlled.
Step-response metrics
Åström and Murray (2021) define the main metrics as:
- Rise time (): the time for the response to go from 10% to 90% of its final value.
- Overshoot (): the maximum amount above the final value, as a fraction.
- Settling time (): the time after which the response stays within ±2% of its final value.
For the standard second-order system, and . The book notes that gives 16% overshoot and gives 4%.
Example 1 Simulation versus formula
A second-order system with a natural frequency of 4 rad/s, simulated with 1 ms steps.
import math
W0, DT, T_END = 4.0, 0.001, 6.0
def simulate(zeta):
y = v = 0.0
out = []
for _ in range(int(T_END / DT)):
a = W0 ** 2 * (1 - y) - 2 * zeta * W0 * v
v += a * DT
y += v * DT
out.append(y)
return out
for zeta in (0.3, 0.5, 0.707, 1.0):
ys = simulate(zeta)
over = max(ys) - 1
formula = math.exp(-math.pi * zeta / math.sqrt(1 - zeta ** 2)) if zeta < 1 else 0.0
ts = next(i * DT for i in range(len(ys)) if all(abs(v - 1) <= 0.02 for v in ys[i:]))
print(f"zeta {zeta:<5}: overshoot {max(over, 0):6.1%} (formula {formula:5.1%}), "
f"settling {ts:.2f} s (4/(zeta*w0) = {4 / (zeta * W0):.2f} s)")
zeta 0.3 : overshoot 37.2% (formula 37.2%), settling 2.81 s (4/(zeta*w0) = 3.33 s)
zeta 0.5 : overshoot 16.3% (formula 16.3%), settling 2.02 s (4/(zeta*w0) = 2.00 s)
zeta 0.707: overshoot 4.3% (formula 4.3%), settling 1.49 s (4/(zeta*w0) = 1.41 s)
zeta 1.0 : overshoot 0.0% (formula 0.0%), settling 1.46 s (4/(zeta*w0) = 1.00 s)
Simulated overshoot matches the formula. The settling-time formula is an approximation, close for around 0.5–0.7 but clearly off at and 1.0. Drones usually want around 0.6–0.8: a small overshoot with a fast response.
Stability and poles
Poles are the roots of a transfer function’s denominator. A second-order system has poles at . A system is stable when every pole lies in the left half of the s-plane. Poles far from the imaginary axis respond and settle quickly, while poles with a large imaginary part relative to the real part oscillate a lot. If a pole crosses into the right half, the response grows without bound.
Time delay eats phase
Real systems have time delay from sensor filters, computation and motors. Åström and Murray show that a delay does not change signal magnitude but adds phase lag at frequency , reducing the phase margin. The book suggests a reasonable phase margin of about 30–60°; at zero the system oscillates indefinitely.
Example 2 Delay in a rate loop
A simple rate-loop model with rad/s. The crossover frequency equals , so the phase margin is (in degrees).
import math
K, DT = 20.0, 0.0005
def run(delay):
n = int(round(delay / DT))
buf = [0.0] * n
y, out = 0.0, []
for _ in range(int(3 / DT)):
seen = buf[0] if n else y
y += DT * K * (1 - seen)
if n:
buf = buf[1:] + [y]
out.append(y)
return out
print(f"critical delay (phase margin 0) = {math.pi / (2 * K) * 1000:.1f} ms")
for delay in (0.0, 0.02, 0.05, 0.075, 0.09):
ys = run(delay)
pm = 90 - K * delay * 180 / math.pi
tail = max(abs(1 - v) for v in ys[-1000:])
print(f"delay {delay * 1000:>4.0f} ms: phase margin {pm:5.1f} deg, peak {max(ys):6.2f}, "
f"error in last 0.5 s {tail:.3f}")
critical delay (phase margin 0) = 78.5 ms
delay 0 ms: phase margin 90.0 deg, peak 1.00, error in last 0.5 s 0.000
delay 20 ms: phase margin 67.1 deg, peak 1.00, error in last 0.5 s 0.000
delay 50 ms: phase margin 32.7 deg, peak 1.50, error in last 0.5 s 0.000
delay 75 ms: phase margin 4.1 deg, peak 2.00, error in last 0.5 s 0.319
delay 90 ms: phase margin -13.1 deg, peak 25.51, error in last 0.5 s 24.513
A delay of only 50 ms makes a system that never overshot overshoot by half. Near 78.5 ms it oscillates without settling, and beyond that the oscillation grows without bound. This is why an overly delaying gyro filter can make a drone oscillate even though the PID gains are unchanged.
Module lab
Lab: response metrics and delay
- Use the code from Example 1 with three values of and see how overshoot and settling time change.
- Plot the poles for each case on graph paper and compare with Figure 2.
- Use the code from Example 2, change and find the new critical delay, comparing with .
- In SITL, gradually add delay or lower the gyro filter frequency and watch the oscillation in the log.
- Record your conclusion on the and phase margin to aim for on the lab drone.
Common mistakes
Watch out
- Demanding zero overshoot, making the system too slow.
- Always using the settling-time formula instead of measuring.
- Ignoring delay from filters and computation.
- Looking at one response only, missing a small continuous oscillation.
- Changing several values at once, so the cause of a change is unclear.
Summary
- The main metrics are (10–90%), and (±2%).
- For second-order systems and .
- A system is stable when all poles are in the left half of the s-plane.
- Time delay eats phase , reducing phase margin until the system can oscillate.
Check your understanding
- About what overshoot does give?
- With and rad/s, what is the approximate settling time?
- What do poles at say about the system?
- A loop with a 20 rad/s crossover has a 10 ms delay. How many degrees of phase are lost?
- From question 4, if the original phase margin was 90°, what remains?
Answers
- About 16%.
- s
- It is unstable: the positive real part makes the oscillation grow.
- rad
- About 78.5°.
Key formulas
| Second-order overshoot | |
| Settling time (2%) | |
| Phase taken by a time delay |
Key references
Further reading
Study the assigned knowledge units in advance, review media and take the module quiz
In class / field
Lab or field practice from worksheets with a safety checklist
Learning evidence: Checked worksheets and quiz results