General robust controller synthesis with unstable weights for an oscillator problem

The file Demo_009.m is found in IQClab’s folder demos; it performs a robust controller synthesis with the function fRobsyn. This demo consists of the 2DoF control design for a plant with parametric uncertainty. The plant, G, is a simple oscillator model, which is interconnected as shown in the following figure.

Feedback interconnection with the oscillator system

Here G is defined by the transfer function


where k is the time-constant and d the damping factor. Here d=0.1 is a fixed constant, while k is assumed to be an uncertain parameter k=1+r\delta with r=0.4 and \delta\in[-1,1]. The bode diagram for various samples of G is shown in the following figure.

Bode diagram of the oscillator model (nominal: solid red line, perturbed: dashed-dotted line)

The goal is to design a 2DoF controller, u=K\mathrm{col}(r,y), which stabilizes the plant G for all \delta\in[−1,1], and which renders the induced L_2-gain on the weighted performance channels r\rightarrow\mathrm{col}(z_1,z_2) satisfied. Here the aim is to enforce good tracking at low frequencies, while penalizing control at high frequencies.

This is accomplished with the performance weights

    \[W_e=\dfrac{(0.5s+0.866)}{(s+0.000866)},\ \ \  W_u=\dfrac{10(s+1)}{(s+100)}.\]

The generalized plant can be constructed as usual (see code in Demo_009.m). Subsequently, you can perform a nominal and robust controller synthesis by means of hinfsyn/fHinfsyn and fRobsyn respectively. The corresponding code is given next.

  • Length of the basis function: 3
  • Solution check: ‘on’
  • Enforce strictness of the LMIs: \epsilon=1e-8
% Define the uncertain plant model
k0     = 1;
d      = 0.1;
delta  = ureal('delta',0,'Range',[-1,1],'AutoSimplify','full');
k      = k0*(1+0.4*delta);
G      = tf(1,[k^2,2*d*k,1]);
[H,De] = lftdata(G);
H      = ssbal(H);

% Define the open-loop generalized plant
systemnames  = 'H';
inputvar     = '[p{2};r;u]';
outputvar    = '[H(1:2);r-H(3);u;r;H(3)]';
input_to_H   = '[p(1:2);u]';
cleanupsysic = 'yes';
olic         = sysic;

% Define weights
Wperf = 1/makeweight(1e-3,1,2);
Wcmd  = makeweight(1e-1,10,10);
Wout  = blkdiag(1,1,Wperf,Wcmd,1,1);
wolic = Wout*olic;

% Perform a nominal controller synthesis
[Knom,~,ga_nom] = fHinfsyn(wolic(3:end,3:end),2,1,'method','lmi');

% Define iqc uncertainty block
de = iqcdelta('de','InputChannel',1:2, 'OutputChannel',1:2,'Bounds',[-1,1]);
de = iqcassign(de,'ultis','Length',2);

% perform a robust controller synthesis
options.maxiter   = 5;
options.subopt    = 1.01;
options.constants = 1e-6*ones(1,3);
options.Pi11const = 1e-5;
options.FeasbRad  = 1e5;

[K,ga] = fRobsyn(wolic,de,[2,2,2],[2,1,1],options);

For the nominal controller, K_\mathrm{nom}, we obtain an H_\infty-norm of approximately 1. However, when performing an IQC-analysis, the worst-case performance is in fact about 10 times larger. The robust controller, K_\mathrm{rob}, on the other hand, guarantees that the worst-case performance is not larger than 1.37, which is much closer to nominal performance level. This is illustrated in the following two figures. As can be seen in the first figure, the function fRobsyn quickly converges after four iterations to a worst-case performance of 1.37. This is confirmed by the second figure, where the sigma plots of the weighted closed loop system are shown for various samples of \delta\in[−1,1] for both the nominal controller, K_\mathrm{nom} as well as the robust controller K_\mathrm{rob}.

Worst-case performance levels obtained during the robust controller synthesis with fRobsyn.
Sigma plots of 20 samples of the weighted closed-loop system for K_\mathrm{nom} and K_\mathrm{rob}.

To continue, the following figure shows the singular value plots of the sensitivity and control sensitivity function S and KS respectively, for various samples of \delta\in[−1,1] versus the inverse weighting functions that were used in the controller synthesis. Again, we conclude that the robust controller, K_\mathrm{rob} is better capable of guaranteeing performance in the presence of the uncertainty. This is confirmed by the time domain simulation shown in the last figure.

Singular value plots of the sensitivity and control sensitivity function versus the inverse weighting functinos.
Time-domain simulations (step response) for various values of \delta\in[-1,1] – left: nominal controller, K_\mathrm{nom} – right: robust controller, K_\mathrm{rob}.

Previous page