MAE 280 B
Linear Control Design

LMI Stabilizing Control

Mauricio de Oliveira & Chris Nelson

<<NC` 
<<NCAlgebra`

<<NCSDP`
<<SDPSylvester`

LMI Stabilizing Control

Satellite problem data

mm = 100 (* 100 kg *);
r = 300*10^3 (* 300 km *);
R0 = 6.37*10^6 (* 6.37 10^3 km *);
G = 6.673*10^(-11) (* 6.673 N m^2/kg^2 *);
M = 5.98*10^(24) (* 5.98 10^24 kg *);
k = G*M;
w = Sqrt[k/((R0+r)^3)];
v = w*(R0+r);

Linearlized system matrices

A = {{0,0,1,0},{0,0,0,1},{3*w^2,0,0,2*(r+R0)*w},{0,0,-2*w/(r+R0),0}};
Bu = {{0,0},{0,0},{1/mm,0},{0,1/(mm*r)}};

Scale

T = DiagonalMatrix[{1,r,1,r}]

Apply similarity transformation

At = T.A.Inverse[T]
But = T.Bu

Dimensions

n=Length[At];
m=1;

Stabilizing state feedback control (using u2 only)

SNC[a,b,q,x,l];
F={a**x+b**l+x**tp[a]+tp[b**l]+q,-x};
vars={x,l};
obj={0,0};

NCSDPForm[F,vars,obj]

data={a->At,b->But[[All,{2}]],q->IdentityMatrix[4]}

{abc,rules}=NCSDP[F,vars,obj,data,UserRules->{tp[q]->q}];

{Y,X,S,iters}=SDPSolve[abc,rules];

Check the eigenvalues to show that this is a feasible soultion.

X=Y[[1]];
L=Y[[2]];

LMI1=At.X+But[[;;,2;;2]].L;
LMI1=.5*(LMI1+Transpose[LMI1]);
Eigenvalues[LMI1]

LMI2=X;
Eigenvalues[LMI2]

Construct K and check closed loop stability

K = L.Inverse[X]
Acl=At+But[[;;,2;;2]].K;
Eigenvalues[Acl]

Stabilizing state feedback control (using u1 and u2)

data={a->At,b->But,q->IdentityMatrix[4]};

{abc,rules}=NCSDP[F,vars,obj,data,UserRules->{tp[q]->q}];

{Y,X,S,iters}=SDPSolve[abc,rules];

Problem has too many variables and not enough constraints!

Restate with additional size constraint

SNC[a,b,q,x,l];
F={a**x+b**l+x**tp[a]+tp[b**l]+q,-{{10^2,l},{tp[l],10^2}},-x};
vars={x,l};
obj={};

NCSDPForm[F,vars,obj]

data={a->At,b->But,q->IdentityMatrix[4]};

{abc,rules}=NCSDP[F,vars,obj,data,UserRules->{tp[q]->q}];

{Y,X,S,iters}=SDPSolve[abc,rules];

Check the eigenvalues to show that this is a feasible soultion.

X=Y[[1]];
L=Y[[2]];

LMI1=At.X+But.L;
LMI1=.5*(LMI1+Transpose[LMI1]);
Eigenvalues[LMI1]

LMI2=X;
Eigenvalues[LMI2]

Construct K and check closed loop stability

K = L.Inverse[X];
MatrixForm[K]

Acl=At+But.K;
Eigenvalues[Acl]