Robust Control Toolbox 

This example shows how to use Robust Control Toolbox™ to build uncertain statespace models and analyze the robustness of feedback control systems with uncertain elements.
We will show how to specify uncertain physical parameters and create uncertain statespace models from these parameters. You will see how to evaluate the effects of random and worstcase parameter variations using the functions usample and robuststab.
On this page… 

Uncertain Model of a ClosedLoop System 
In this example, we use the following system consisting of two frictionless carts connected by a spring k:
Figure 1: Twocart and spring system.
The control input is the force u1 applied to the left cart. The output to be controlled is the position y1 of the right cart. The feedback control is of the following form:
In addition, we use a triplelead compensator:
We create this compensator using this code:
s = zpk('s'); % The Laplace 's' variable C = 100*ss((s+1)/(.001*s+1))^3;
The twocart and spring system is modeled by the block diagram shown below.
Figure 2: Block diagram of twocart and spring model.
The problem of controlling the carts is complicated by the fact that the values of the spring constant k and cart masses m1,m2 are known with only 20% accuracy: , , and . To capture this variability, we will create three uncertain real parameters using th ureal function:
k = ureal('k',1,'percent',20); m1 = ureal('m1',1,'percent',20); m2 = ureal('m2',1,'percent',20);
We can represent the carts models as follows:
Given the uncertain parameters m1 and m2, we will construct uncertain statespace models (USS) for G1 and G2 as follows:
G1 = 1/s^2/m1; G2 = 1/s^2/m2;
Uncertain Model of a ClosedLoop System
First we'll construct a plant model P corresponding to the block diagram shown above (P maps u1 to y1):
% Springless inner block F(s)
F = [0;G1]*[1 1]+[1;1]*[0,G2]
F = Uncertain continuoustime statespace model with 2 outputs, 2 inputs, 4 states. The model uncertainty consists of the following blocks: m1: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m2: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences Type "F.NominalValue" to see the nominal value, "get(F)" to see all properties, and "F.Uncertainty" to interact with the uncertain elements.
Connect with the spring k
P = lft(F,k)
P = Uncertain continuoustime statespace model with 1 outputs, 1 inputs, 4 states. The model uncertainty consists of the following blocks: k: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m1: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m2: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences Type "P.NominalValue" to see the nominal value, "get(P)" to see all properties, and "P.Uncertainty" to interact with the uncertain elements.
The feedback control u1 = C*(ry1) operates on the plant P as shown below:
Figure 3: Uncertain model of a closedloop system.
We'll use the feedback function to compute the closedloop transfer from r to y1.
% Uncertain openloop model is
L = P*C
L = Uncertain continuoustime statespace model with 1 outputs, 1 inputs, 7 states. The model uncertainty consists of the following blocks: k: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m1: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m2: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences Type "L.NominalValue" to see the nominal value, "get(L)" to see all properties, and "L.Uncertainty" to interact with the uncertain elements.
Uncertain closedloop transfer from r to y1 is
T = feedback(L,1)
T = Uncertain continuoustime statespace model with 1 outputs, 1 inputs, 7 states. The model uncertainty consists of the following blocks: k: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m1: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences m2: Uncertain real, nominal = 1, variability = [20,20]%, 1 occurrences Type "T.NominalValue" to see the nominal value, "get(T)" to see all properties, and "T.Uncertainty" to interact with the uncertain elements.
Note that since G1 and G2 are uncertain, both P and T are uncertain statespace models.
The nominal transfer function of the plant is
Pnom = zpk(P.nominal)
Pnom = 1  (s^2 + 5.995e16) (s^2 + 2) Continuoustime zero/pole/gain model.
Next, we will evaluate the nominal closedloop transfer function Tnom, and then check that all the poles of the nominal system have negative real parts:
Tnom = zpk(T.nominal); maxrealpole = max(real(pole(Tnom)))
maxrealpole = 0.8232
Stability Margin Analysis (Robustness)
Will the feedback loop remain stable for all possible values of k,m1,m2 in the specified uncertainty range? We can use the robuststab function to answer this question rigorously. The robuststab function computes the stability margins and the smallest destabilizing parameter variations in the variable Udestab (relative to the nominal values):
[StabilityMargin,Udestab,REPORT] = robuststab(T);
REPORT
REPORT = Uncertain system is robustly stable to modeled uncertainty.  It can tolerate up to 301% of the modeled uncertainty.  A destabilizing combination of 500% of the modeled uncertainty was found.  This combination causes an instability at 0.944 rad/seconds.  Sensitivity with respect to the uncertain elements are: 'k' is 20%. Increasing 'k' by 25% leads to a 5% decrease in the margin. 'm1' is 60%. Increasing 'm1' by 25% leads to a 15% decrease in the margin. 'm2' is 58%. Increasing 'm2' by 25% leads to a 14% decrease in the margin.
Udestab
Udestab = k: 2.1221e08 m1: 3.1662e05 m2: 0.1409
The report indicates that the closed loop can tolerate up to three times as much variability in k,m1,m2 before going unstable. It also provides useful information about the sensitivity of stability to each parameter. Note that the smallest destabilizing perturbation Udestab requires varying m2 by 100%, or 5 times the specified uncertainty.
WorstCase Performance Analysis
Note that the peak gain across frequency of the closedloop transfer T is indicative of the level of overshoot in the closedloop step response. The closer this gain is to 1, the smaller the overshoot.
We use wcgain to compute the worstcase gain PeakGain of T over the specified uncertainty range.
[PeakGain,Uwc] = wcgain(T); PeakGain
PeakGain = LowerBound: 1.0475 UpperBound: 1.0477 CriticalFrequency: 7.0502
Substitute the worstcase parameter variation Uwc into T to compute the worstcase closedloop transfer Twc.
Twc = usubs(T,Uwc); % Worstcase closedloop transfer T
Finally, pick from random samples of the uncertain parameters and compare the corresponding closedloop transfers with the worstcase transfer Twc.
Trand = usample(T,4); % 4 random samples of uncertain model T clf subplot(211), bodemag(Trand,'b',Twc,'r',{10 1000}); % plot Bode response subplot(212), step(Trand,'b',Twc,'r',0.2); % plot step response
Figure 4: Bode diagram and step response.
In this analysis, we see that the compensator C performs robustly for the specified uncertainty on k,m1,m2.