To see how the `loopsyn`

command
works in practice to address robustness and performance tradeoffs,
consider again the NASA HiMAT aircraft model taken from the paper
of Safonov, Laub, and Hartmann [8]. The longitudinal dynamics
of the HiMAT aircraft trimmed at 25000 ft and 0.9 Mach are unstable
and have two right-half-plane phugoid modes. The linear model has
state-space realization *G*(*s*) = *C*(*Is* – *A*)^{–1}*B* with
six states, with the first four states representing angle of attack
(*α*) and attitude angle (*θ*)
and their rates of change, and the last two representing elevon and
canard control actuator dynamics — see Aircraft Configuration and Vertical Plane Geometry.

ag = [ -2.2567e-02 -3.6617e+01 -1.8897e+01 -3.2090e+01 3.2509e+00 -7.6257e-01; 9.2572e-05 -1.8997e+00 9.8312e-01 -7.2562e-04 -1.7080e-01 -4.9652e-03; 1.2338e-02 1.1720e+01 -2.6316e+00 8.7582e-04 -3.1604e+01 2.2396e+01; 0 0 1.0000e+00 0 0 0; 0 0 0 0 -3.0000e+01 0; 0 0 0 0 0 -3.0000e+01]; bg = [0 0; 0 0; 0 0; 0 0; 30 0; 0 30]; cg = [0 1 0 0 0 0; 0 0 0 1 0 0]; dg = [0 0; 0 0]; G = ss(ag,bg,cg,dg);

The control variables are elevon and canard actuators (δ_{e} and
δ_{c}). The output variables are angle of
attack (α) and attitude angle (θ).

**Aircraft Configuration and Vertical Plane Geometry**

This model is good at frequencies below 100 rad/s with less than 30% variation between the true aircraft and the model in this frequency range. However as noted in [8], it does not reliably capture very high-frequency behaviors, because it was derived by treating the aircraft as a rigid body and neglecting lightly damped fuselage bending modes that occur at somewhere between 100 and 300 rad/s. These unmodeled bending modes might cause as much as 20 dB deviation (i.e., 1000%) between the frequency response of the model and the actual aircraft for frequency ω > 100 rad/s. Other effects like control actuator time delays and fuel sloshing also contribute to model inaccuracy at even higher frequencies, but the dominant unmodeled effects are the fuselage bending modes. You can think of these unmodeled bending modes as multiplicative uncertainty of size 20 dB, and design your controller using loopsyn, by making sure that the loop has gain less than –20 dB at, and beyond, the frequency ω > 100 rad/s.

The singular value design specifications are

**Robustness Spec.**: –20 dB/decade roll-off slope and –20 dB loop gain at 100 rad/s**Performance Spec.**: Minimize the sensitivity function as much as possible.

Both specs can be accommodated by taking as the desired loop shape

*G*_{d}(*s*)=8/*s*

s = zpk('s'); % Laplace variable s Gd = 8/s; % desired loop shape % Compute the optimal loop shaping controller K [K,CL,GAM] = loopsyn(G,Gd); % Compute the loop L, sensitivity S and complementary sensitivity T: L = G*K; I = eye(size(L)); S = feedback(I,L); % S=inv(I+L); T = I-S; % Plot the results: % step response plots step(T);title('\alpha and \theta command step responses'); % frequency response plots figure; sigma(L,'r--',Gd,'k-.',Gd/GAM,'k:',Gd*GAM,'k:',{.1,100}) legend('\sigma(L) loopshape',... '\sigma(Gd) desired loop',... '\sigma(Gd) \pm GAM, dB'); figure; sigma(T,I+L,'r--',{.1,100}) legend('\sigma(T) robustness','1/\sigma(S) performance')

The number ±GAM, dB (i.e., 20log10(GAM)) tells you the
accuracy with which your `loopsyn`

control
design matches the target desired loop:

$$\begin{array}{l}\overline{\sigma}\left(GK\right),\text{db}\ge \left|{\text{G}}_{\text{d}}\right|,\text{db}-\text{GAM},\text{db}\text{\hspace{1em}}(\omega {\omega}_{c})\\ \overline{\sigma}\left(GK\right),\text{db}\ge \left|{\text{G}}_{\text{d}}\right|,\text{db}+\text{GAM},\text{db}\text{\hspace{1em}}(\omega {\omega}_{c}).\end{array}$$

Was this topic helpful?