Observer-based controller

A streamlined fashion to define an observer-based controller and solve for it with hinfstruct. We consider the example of the Active Suspension Control from the Robust Control Toolbox, Control Design 1.

Contents

Define augmented plant:

nx = 6; ny = 1; nu = 1; nw = 2; nz = 2;
A =   [0   1.0000e+00            0            0            0            0 ;
  -5.5800e+01  -3.4483e+00   5.5800e+01   3.4483e+00            0            0;
            0            0            0   1.0000e+00            0            0;
   2.7427e+02   1.6949e+01  -3.4946e+03  -1.6949e+01            0            0;
            0            0            0            0  -5.0000e+02            0;
   1.6000e+01            0            0            0            0  -3.1416e+01];

B = [0            0            0;
     0            0   3.4483e+01;
                  0            0            0;
    2.2542e+02    0  -1.6949e+02;
            0     0   6.4000e+01;
            0     0            0];

C = [ 0            0            0            0  -5.4087e+01            0;
      0            0            0            0            0   1.5708e+01;
   1.0000e+00            0  -1.0000e+00      0            0            0];

D = [0      0   7.6923e+00;
     0            0            0;
     0   1.0000e-02            0];

P = ss(A,B,C,D);

Define observer-based controller.

P22 = P(nz+(1:ny),nw+(1:nu)) ;
[A,B,C,D] = ssdata(P22) ;          % u to y plant
K = realp('K',zeros(nu,nx));       % state feedback
L = realp('L',eye(nx,ny));         % observer gain
OBC = ss(A-B*K-L*(C-D*K),L,-K,0) ; % observer-based controller in state-space format

Define closed-loop interconnection

CL0 = lft(P,OBC);

Solve $H_\infty$ problem with hinfstruct

[CL,gam1] = hinfstruct(CL0);  % CL is tuned version of CL0
Final: Peak gain = 0.609, Iterations = 80

Get state feedback and observer gains

CL.BLocks.K.Value,  CL.BLocks.L.Value,
ans =

   44.5934   15.6852 -114.5391    0.3011   -2.2210  -54.6811


ans =

   1.0e+03 *

    0.0206
    0.1825
   -0.0066
    0.5587
   -2.2661
    0.0270

Compare with hinfsyn (full-order black-box controller).

[K,clp,gam2] = hinfsyn(P,ny,nu) ;
% Output achieved objective.
fprintf(1,' Achieved H-infinity norms  HINFSTRUCT:%6.2f  HINFSYN:%6.2f \n\n', gam1,gam2);
 Achieved H-infinity norms  HINFSTRUCT:  0.61  HINFSYN:  0.61