AERO-330 · Lesson 9 of 12 · 23 min
Handling qualities
Eigenvalues tell an engineer whether an aircraft is stable. They do not tell whether a pilot will like flying it. Handling qualities, sometimes called flying qualities, are the qualities of an aircraft that govern the ease and precision with which a pilot can perform a task. They live in the space between the engineer's numbers and the pilot's opinion, and connecting the two has occupied flight test pilots and researchers since the 1940s. Tomasz has booked two days in the engineering simulator, and later a session on the NASA research simulators, so that Sam and two other test pilots can rate the Tern Block 2 on a set of tasks. Arjun's job is to predict those ratings beforehand from the linear models, using published criteria.
Pilot opinion and the Cooper-Harper scale
The standard tool for collecting pilot opinion is the Cooper-Harper rating scale, published by George Cooper and Robert Harper of NASA in 1969. The pilot flies a defined task with defined performance standards, for example tracking a glideslope in light turbulence while keeping within a given deviation, and then answers a short decision tree. Is the aircraft controllable? If not, the rating is 10. Is adequate performance attainable with a tolerable workload? If not, 7 to 9. Is it satisfactory without improvement? If not, 4 to 6. If yes to all three, 1 to 3. Within each band the pilot chooses by describing the workload and the aircraft characteristics in words the scale provides.
The ratings map onto three levels used in requirements. Level 1, ratings 1 to 3, is clearly adequate for the mission. Level 2, ratings 4 to 6, means the mission can be completed but with increased workload or degraded performance. Level 3, ratings 7 to 9, means the aircraft can be controlled safely, but the workload is excessive or the mission cannot be completed. Requirements generally ask for level 1 in normal operation and allow level 2 or 3 only after failures that are unlikely. The ratings are subjective, so tests use several pilots, careful task definitions and repeated runs, and engineers look at the comments as closely as the numbers.
Criteria from flight test databases
Decades of variable-stability aircraft experiments, in which the dynamics of a test aircraft were changed in flight and pilots rated the result, produced quantitative criteria. The best known are the United States military flying qualities specification MIL-F-8785C (1980) and its successor handbook MIL-STD-1797. Civil regulations, including the FAA flight requirements of 14 CFR Part 23, including 23.2135 on controllability and 23.2145 on stability, are written as objectives rather than numbers: the aircraft must be stable, controllable and free of dangerous characteristics, with performance-based means of compliance agreed with the FAA. Civil manufacturers nevertheless use the military criteria as design guides because they are the most complete quantitative summary of what pilots accept. They classify aircraft by size and maneuverability (the Tern is a Class II, medium-weight aircraft of low to medium maneuverability) and flight phases by task: Category A for precise, rapid maneuvering such as air-to-air refueling, Category B for gradual maneuvers such as cruise, and Category C for terminal phases such as approach and landing.
Short-period criteria and the CAP
For the short period, the criteria set bounds on the damping ratio and on the frequency. Frequency on its own is not enough, because what the pilot feels is the initial pitch acceleration produced for a given steady change in load factor. That leads to the control anticipation parameter, or CAP, introduced by Bihrle in the 1960s:
The pilot anticipates the eventual load factor from the initial pitch acceleration. Too low a CAP and the aircraft feels sluggish, with the load factor arriving long after the input; too high and it feels abrupt and invites overcontrol. In MIL-F-8785C the level 1 boundaries for CAP are approximately 0.28 to 3.6 for Category A, 0.085 to 3.6 for Category B and 0.16 to 3.6 for Category C, in units of per second squared per g. The corresponding level 1 short-period damping ratio limits are approximately 0.35 to 1.30 for Categories A and C and 0.30 to 2.0 for Category B.
Other criteria
The phugoid needs only a little damping: about 0.04 for level 1, any positive damping for level 2, and a time to double of at least 55 seconds for level 3. The roll mode time constant should be no more than about 1.4 seconds for a Class II aircraft in Categories B and C at level 1. The spiral may be unstable if its time to double is long, at least about 20 seconds at level 1. For the Dutch roll, level 1 in Category B requires approximately a damping ratio of at least 0.08, a product of damping and frequency of at least 0.15 rad/s and a frequency of at least 0.4 rad/s. Additional criteria cover roll performance (time to bank through 30 degrees), roll-sideslip coupling, stick force per g, and the time delays introduced by digital flight controls, which became important when fly-by-wire aircraft showed that a few tenths of a second of lag can turn a pleasant aircraft into one prone to pilot-induced oscillation.
# Handling-qualities check of the Tern Block 2 against the MIL-F-8785C style levels used as
# a design guide: control anticipation parameter, short period, phugoid and lateral modes,
# in cruise (Category B) and on approach with flaps (Category C).
import math
def charpoly(A):
"""Coefficients of det(sI - A), highest power first (Faddeev-LeVerrier)."""
n = len(A); M = [[0.0] * n for _ in range(n)]; c = [1.0]
I = [[1.0 if i == j else 0.0 for j in range(n)] for i in range(n)]
for k in range(1, n + 1):
AM = [[sum(A[i][l] * M[l][j] for l in range(n)) for j in range(n)] for i in range(n)]
M = [[AM[i][j] + c[-1] * I[i][j] for j in range(n)] for i in range(n)]
AM = [[sum(A[i][l] * M[l][j] for l in range(n)) for j in range(n)] for i in range(n)]
c.append(-sum(AM[i][i] for i in range(n)) / k)
return c
def roots(c, it=500):
"""All roots of a polynomial by the Durand-Kerner iteration."""
n = len(c) - 1; a = [x / c[0] for x in c]
z = [complex(0.4, 0.9) ** k for k in range(n)]
for _ in range(it):
new = []
for i in range(n):
p = sum(a[k] * z[i] ** (n - k) for k in range(n + 1))
d = 1
for j in range(n):
if j != i: d *= (z[i] - z[j])
new.append(z[i] - p / d)
z = new
return sorted(z, key=lambda r: -abs(r))
def describe(s):
import math
if abs(s.imag) < 1e-6:
t = -1 / s.real if s.real < 0 else 1 / s.real
kind = 'time constant' if s.real < 0 else 'doubles every'
val = t if s.real < 0 else math.log(2) / s.real
return f"real root {s.real:+.4f}: {kind} {val:.2f} s"
wn = abs(s); z = -s.real / wn
return f"pair {s.real:+.4f} +/- {abs(s.imag):.4f}j: wn {wn:.3f} rad/s, zeta {z:.3f}, period {2*math.pi/abs(s.imag):.1f} s"
m, Iyy, Ixx, Izz, S, c, b, g = 6500.0, 27000.0, 30000.0, 52000.0, 28.0, 1.73, 17.0, 9.81
cases = {'cruise, 3000 m': dict(rho=0.909, u0=105.0, CLa=5.6, CD0=0.028, cat='B'),
'approach, flaps': dict(rho=1.225, u0=52.0, CLa=5.9, CD0=0.080, cat='C')}
def long_modes(rho, u0, CLa, CD0, Cma=-1.0, Cmq=-20.0, Cmad=-6.0, **_):
QS = 0.5 * rho * u0 ** 2 * S; CL = m * g / QS; CD = CD0 + 0.039 * CL ** 2; CDa = 2 * 0.039 * CL * CLa
Xu = -2 * CD * QS / (m * u0); Xw = (CL - CDa) * QS / (m * u0); Zu = -2 * CL * QS / (m * u0)
Zw = -(CLa + CD) * QS / (m * u0); Mw = Cma * QS * c / (Iyy * u0)
Mwd = Cmad * (c / (2 * u0)) * QS * c / (Iyy * u0); Mq = Cmq * (c / (2 * u0)) * QS * c / Iyy
A = [[Xu, Xw, 0, -g], [Zu, Zw, u0, 0], [Mwd * Zu, Mw + Mwd * Zw, Mq + Mwd * u0, 0], [0, 0, 1, 0]]
r = sorted([s for s in roots(charpoly(A)) if s.imag > 1e-6], key=abs)
return r[-1], r[0], CL, CLa / CL
SP_Z = {'B': [(0.30, 2.0), (0.20, 2.0)], 'C': [(0.35, 1.30), (0.25, 2.0)]}
CAP = {'B': [(0.085, 3.6), (0.038, 10.0)], 'C': [(0.16, 3.6), (0.096, 10.0)]}
def level(x, bands):
for i, (lo, hi) in enumerate(bands):
if lo <= x <= hi: return i + 1
return 3
for name, f in cases.items():
sp, ph, CL, n_a = long_modes(**f)
wsp, zsp = abs(sp), -sp.real / abs(sp); zph = -ph.real / abs(ph)
cap = wsp ** 2 / n_a
print(f"{name} (Category {f['cat']}): CL {CL:.2f}, n/alpha {n_a:.1f} g/rad")
print(f" short period wn {wsp:.2f} rad/s, zeta {zsp:.2f} -> level {level(zsp, SP_Z[f['cat']])}")
print(f" CAP {cap:.2f} 1/(s^2 g) -> level {level(cap, CAP[f['cat']])}")
print(f" phugoid zeta {zph:.3f} -> level {1 if zph >= 0.04 else (2 if zph >= 0 else 3)}")
# lateral modes from Lesson 8 (cruise) against Class II limits
tau_r, dr_wn, dr_z, t2_spiral = 0.30, 2.34, 0.113, 2184.0
print("\nlateral, cruise (Category B, Class II):")
print(f" roll time constant {tau_r:.2f} s (level 1 needs at most 1.4 s) -> level {1 if tau_r <= 1.4 else 2}")
ok = dr_z >= 0.08 and dr_z * dr_wn >= 0.15 and dr_wn >= 0.4
print(f" Dutch roll zeta {dr_z:.3f}, zeta*wn {dr_z*dr_wn:.3f}, wn {dr_wn:.2f} -> level {1 if ok else 2}")
print(f" spiral time to double {t2_spiral:.0f} s (level 1 needs at least 20 s) -> level {1 if t2_spiral >= 20 else 2}")
# Cooper-Harper ratings from the simulator session, mapped to levels
for task, rating in (('cruise heading capture', 2), ('ILS tracking in turbulence', 4), ('crosswind flare', 3)):
lv = 1 if rating <= 3 else (2 if rating <= 6 else 3)
print(f"pilot rating {rating} for '{task}' -> level {lv}")cruise, 3000 m (Category B): CL 0.45, n/alpha 12.3 g/rad short period wn 3.27 rad/s, zeta 0.47 -> level 1 CAP 0.87 1/(s^2 g) -> level 1 phugoid zeta 0.052 -> level 1 approach, flaps (Category C): CL 1.38, n/alpha 4.3 g/rad short period wn 1.95 rad/s, zeta 0.55 -> level 1 CAP 0.89 1/(s^2 g) -> level 1 phugoid zeta 0.056 -> level 1 lateral, cruise (Category B, Class II): roll time constant 0.30 s (level 1 needs at most 1.4 s) -> level 1 Dutch roll zeta 0.113, zeta*wn 0.264, wn 2.34 -> level 1 spiral time to double 2184 s (level 1 needs at least 20 s) -> level 1 pilot rating 2 for 'cruise heading capture' -> level 1 pilot rating 4 for 'ILS tracking in turbulence' -> level 2 pilot rating 3 for 'crosswind flare' -> level 1
In cruise the Tern's short period has a damping ratio of 0.47 and a CAP of 0.87; on the approach, at a lift coefficient of 1.38 where the load factor per unit angle of attack is only 4.3 g per radian, the slower short period still gives a CAP of 0.89 and a damping ratio of 0.55. All the longitudinal criteria are level 1, and so are the roll time constant, the spiral and, just, the Dutch roll. The simulator ratings tell a slightly different story. Heading capture in cruise earned a 2 and the crosswind flare a 3, both level 1, but tracking the instrument landing system in moderate turbulence earned a 4, level 2. Sam's comment: 'The nose wanders in yaw in the bumps and I end up chasing the localizer with rudder.' The Dutch roll meets the minimum numbers but feels underdamped in that task. Requirements are necessary, not sufficient, and this is exactly the kind of finding that justifies the yaw damper of Lesson 10.
| Criterion (Class II, level 1, approximate) | Category B | Category C | Tern |
|---|---|---|---|
| Short-period damping ratio | 0.30 to 2.0 | 0.35 to 1.30 | 0.47 / 0.55 |
| CAP, 1/(s² g) | 0.085 to 3.6 | 0.16 to 3.6 | 0.87 / 0.89 |
| Phugoid damping ratio | ≥ 0.04 | ≥ 0.04 | 0.052 / 0.056 |
| Roll time constant, s | ≤ 1.4 | ≤ 1.4 | 0.30 (cruise) |
| Dutch roll ζ, ζω_n, ω_n | 0.08, 0.15, 0.4 | 0.08, 0.10, 0.4 | 0.113, 0.264, 2.34 |
Worked problem
Computing CAP
An aircraft cruises at \(C_L = 0.50\) with \(C_{L_\alpha} = 5.5\) per radian and a short-period natural frequency of 2.8 rad/s. Find the CAP and its Category B level.
Show solution
- \(n/\alpha = 5.5/0.50 = 11.0\) g per radian.
- \(\text{CAP} = 2.8^2/11.0 = 0.71\) per s² per g.
- 0.71 lies between 0.085 and 3.6, so level 1 for Category B.
Answer: Doubling the static margin would raise the frequency by about √2 and double the CAP to about 1.4, still level 1.
Worked problem
Dutch roll check
A Class II aircraft on approach has a Dutch roll with \(\omega_n = 1.1\) rad/s and \(\zeta = 0.07\). Check it against the approximate Category C level 1 values.
Show solution
- Damping ratio 0.07 is below 0.08: fails.
- \(\zeta\omega_n = 0.077\) is below 0.10: fails.
- Frequency 1.1 rad/s exceeds 0.4: passes.
Answer: The aircraft is level 2 on approach in this respect and would need a yaw damper or more yaw damping.
Common mistakes
MistakeTreating handling-qualities criteria as certification rules for civil aircraft.
InsteadCivil rules state objectives; the military criteria are design guides.
MistakeAssuming a level 1 prediction guarantees good pilot ratings.
InsteadCriteria are necessary, not sufficient; tasks and turbulence can reveal problems.
MistakeUsing short-period frequency alone as a handling measure.
InsteadCAP relates frequency to the load factor response the pilot anticipates.
MistakeAveraging pilot ratings without reading the comments.
InsteadThe comments explain why, and guide the fix.
Summary and key terms
- Handling qualities describe how easily and precisely a pilot can perform a task.
- The Cooper-Harper scale turns pilot opinion into ratings 1 to 10, grouped into levels 1 to 3.
- Quantitative criteria, chiefly from MIL-F-8785C and MIL-STD-1797, bound the short-period damping ratio and CAP, phugoid damping, roll time constant, spiral time to double and Dutch roll damping by aircraft class and flight phase category.
- Civil rules state objectives and use such criteria as guides.
- The Tern meets the criteria but simulator ratings in turbulence reveal a lightly damped Dutch roll worth improving.
- Handling qualities
- The qualities governing the ease and precision of piloting tasks.
- Cooper-Harper scale
- A decision-tree rating scale from 1 (excellent) to 10 (uncontrollable).
- Level 1
- Handling clearly adequate for the mission; ratings 1 to 3.
- CAP
- Control anticipation parameter, ω_sp² divided by n/α.
- Flight phase category
- A, B or C, grouping tasks by precision and maneuvering needed.
- Aircraft class
- A grouping by size and maneuverability used in the criteria.
Practice problems
Work each problem on paper first, then reveal the answer to check.
Which Cooper-Harper ratings form level 2?
Show answer
4 to 6.
What does CAP measure?
Show answer
The initial pitch acceleration per unit of steady load factor change, which the pilot uses to anticipate the response.
Why is n/α smaller on approach than in cruise?
Show answer
The lift coefficient is higher, so n/α = C_Lα/C_L is lower.
In the program, give the ILS tracking task a rating of 3. What level results?
Show answer
Level 1.
Into which category does an approach fall?
Show answer
Category C, terminal flight phases.
Why are digital time delays important for handling?
Show answer
A few tenths of a second can provoke pilot-induced oscillations.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.