Ideal Aircraft Controller vs Real Atmospheric Disturbance
In many early simulations, the aircraft is tested in a clean environment: no gusts, no atmospheric uncertainty, no actuator limits, and no energy constraint. Under those assumptions, a simple controller may appear stable.
But high-altitude flight systems do not operate in perfect conditions. A HAPS aircraft, UAV, or long-endurance platform is continuously exposed to wind shear, gusts, changing density, and slow environmental drift.
This page compares the same controller under two cases:
- No wind: stable altitude and pitch tracking.
- With wind: oscillation, altitude deviation, and possible loss of stability.
States: Velocity, Altitude, and Pitch
The aircraft is represented using a simplified 2D longitudinal model. This is not a full aircraft dynamics model, but it is enough to demonstrate the main control insight.
where:
- \(V\) = forward velocity
- \(h\) = altitude
- \(\theta\) = pitch angle
The controller tries to maintain a target altitude by commanding pitch. The simplified model is:
The terms \(w_V(t)\) and \(w_h(t)\) represent wind disturbance effects. When there is no wind, these terms are zero.
The Controller Looks Stable
In the ideal case, the wind disturbance is removed:
The aircraft responds smoothly. Altitude error decreases, pitch remains bounded, and velocity changes gradually.
But this conclusion is incomplete because the simulation has not tested disturbance rejection.
Step Gusts and Sinusoidal Gusts
Wind can enter the model as a sudden gust or as a repeated oscillatory disturbance. Both are useful for testing controller robustness.
Step Gust
A step gust represents a sudden change in wind condition. This is useful for testing how quickly the controller recovers.
Sinusoidal Gust
A sinusoidal gust represents repeated atmospheric excitation. This is useful for identifying oscillatory behaviour and resonance-like response.
No Wind vs Wind Disturbance
The important comparison is not whether the controller works once. The important comparison is whether it remains stable when the environment changes.
| Behaviour | No Wind | With Wind |
|---|---|---|
| Altitude tracking | Smooth convergence | Deviation and oscillation |
| Pitch response | Bounded and damped | Repeated correction or overshoot |
| Velocity | Nearly steady | Disturbed by gust input |
| Controller confidence | Looks safe | Fragility becomes visible |
Run the Aircraft With and Without Wind
Use the sliders to change controller gain, wind strength, gust frequency, aircraft damping, and simulation time. The simulator plots altitude, pitch, velocity, wind input, and a simple stability indicator.
The Disturbance Was Not in the Design Model
The controller was tuned for the clean model:
But the real system behaves more like:
where \(d(t)\) represents wind, gusts, unmodelled dynamics, and environmental uncertainty.
If the controller is only tested on \(f(x,u)\), then the simulation proves only that the controller works in the ideal world. It does not prove that it will reject disturbance.
Why This Matters for HAPS and High-Altitude Flight
HAPS aircraft and long-endurance platforms operate for long durations in the atmosphere. They are not judged only by short-term stability. They must remain controllable under wind, energy limits, and slow environmental changes.
1. Wind Disturbance Changes the Plant
The aircraft is not only responding to its controller. It is also responding to the surrounding air mass. Wind can change the effective airspeed, flight path, altitude rate, and pitch demand.
2. High Gain Is Not Always Better
Increasing gain can improve response in the ideal case, but it can also amplify oscillations under gusts. A strong controller can become aggressive and fragile.
3. Damping Is Essential
Damping reduces oscillation and helps the aircraft recover from disturbance. Without enough damping, gusts can keep exciting the system.
4. Real Control Must Include Disturbance Rejection
A realistic design should test no-wind, step gust, sinusoidal gust, sensor noise, actuator limits, and energy constraints.
Reproducing the Same Idea in Python
The same model can be reproduced using a simple time-marching simulation.
import numpy as np
import matplotlib.pyplot as plt
dt = 0.05
t_final = 100
t = np.arange(0, t_final, dt)
h_target = 1000
V = np.zeros_like(t)
h = np.zeros_like(t)
theta = np.zeros_like(t)
V[0] = 25
h[0] = 950
theta[0] = 0
K = 0.03
damping = 0.30
wind_strength = 5
gust_frequency = 0.10
def wind_gust(time):
return wind_strength * np.sin(2*np.pi*gust_frequency*time)
for k in range(len(t)-1):
error = h_target - h[k]
wind = wind_gust(t[k])
theta_dot = K*error - damping*theta[k]
V_dot = -0.01*(V[k] - 25) + 0.03*wind
h_dot = V[k]*np.sin(theta[k]) + wind
theta[k+1] = theta[k] + theta_dot*dt
V[k+1] = V[k] + V_dot*dt
h[k+1] = h[k] + h_dot*dt
plt.plot(t, h)
plt.axhline(h_target, linestyle="--")
plt.xlabel("Time (s)")
plt.ylabel("Altitude (m)")
plt.show()
A Controller Is Not Robust Until It Is Tested Against Disturbance
This problem shows why ideal simulations can be misleading. A controller may look stable in a clean model, but fail once wind disturbance is introduced.
Useful for first validation, but incomplete.
Reveals oscillation, altitude error, and controller fragility.
Requires disturbance rejection, damping, and robustness testing.
This page becomes the foundation for the next high-altitude flight problems: solar and battery energy management, long-endurance efficiency, wind-field path correction, and fault-tolerant control under sensor and actuator limits.