Beruflich Dokumente
Kultur Dokumente
Ilha Solteira
Autores:
Emerson R. P. da Silva
e.ravazzi@bol.com.br
luiz.buzachero@yahoo.com.br
Ilha Solteira - SP
Maio / 2011
Sumrio
1 Introduo
1.1
Pr-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2
1.3
Objetivo do curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Instalao
3 Introduo ao Yalmip
3.1
11
3.2
13
15
3.3
17
3.4
19
4 Controle Robusto
22
4.1
22
4.2
28
4.3
35
Referncias Bibliogrficas
42
Introduo
1.1
Pr-requisitos
1.2
Yalmip: Esse pacote (toolbox) permite que problemas envolvendo programao matemtica sejam representados de maneira mais natural no MATLAB. Ele pode ser usado em diversas
situaes. Por exemplo: em problemas de programao linear, programao inteira e mista,
problemas de programao semi-definida e em desigualdades matriciais bilineares. Uma das
grandes vantagens desse pacote que ele apresenta suporte para vrios solvers (resolvedores).
Por exemplo, esse pacote pode resolver LMIs com o LMILab (solver do LMI control toolbox)
ou com o Sedumi. Uma lista completa com todos os solvers que esse pacote suporta pode ser
encontrada no arquivo yalmip.htm que est dentro da pasta yalmip.
LMILab: O LMIlab o solver de LMIs padro do Matlab. Este solver diferentemente do
Sedumi resolve apenas LMIs, assim, para os alunos que esto iniciando o estudos de LMIs
prefervel utilizar este solver a princpio atravs da opo opts=sdpsettings(solver,lmilab)
que ser detalhada mais a frente. O LMILab vem com o pacote Robust Control Toolbox do
MATLAB 2009.
Sedumi: Esse pacote um solver para problemas de programao semi-definida. Nesse trabalho ele ser usado exclusivamente para a soluo de LMIs. Atualmente os dois solvers mais
usados na literatura especializada so o LMILab e o Sedumi. E o Yalmip funciona mais rpido com o Sedumi. Da a motivao para usar esse pacote. O LMILab possui um algoritmo
baseado no mtodo de pontos interiores, e a sua complexidade dada por: K 3 L. J o Sedumi
usa uma tcnica de otimizao sobre cones homogneos duais, e a sua complexidade dada
por: K 2 L2,5 + L3,5 , sendo K o nmero de variveis escalares e L o nmero de linhas usadas nas
LMIs. Assim, dependendo do problema um solver ser mais rpido que o outro. Atualmente
comum encontrar na literatura especializada, trabalhos em que o autor compara as solues
obtidas por esses dois solvers.
1.3
Objetivo do curso
Esse texto apresenta os comandos bsicos do pacote Yalmip, necessrios para a soluo de
LMIs no MATLAB.
Instalao
O CD de instalao do MATLAB no vem com esses pacotes. Dessa forma eles precisam
ser instalados manualmente. Os pacotes podem ser baixados pela internet nas seguintes URLs:
Sedumi 1.1R3 (verifique a verso compatvel com seu MATLAB)
http://sedumi.ie.lehigh.edu/
Yalmip
http://users.isy.liu.se/johanl/yalmip/
Depois do download o usurio ter baixado dois arquivos compactados (ZIP ou RAR). Use
um descompactador e extraia o contedo dos arquivos em uma pasta.
2 Instalao
Os arquivos necessrios para a instalao dos pacotes j esto prontos, agora s falta mapear
essas pastas no MATLAB.
SUGESTO: Para evitar ficar com arquivos espalhados pelo computador, interessante
mover as pastas yalmip e SeDuMi_1_1 para dentro da pasta toolbox do MATLAB.
2 Instalao
Para fazer o mapeamento (ou instalao) dos pacotes no MATLAB deve-se ir em: Menu
Files Set Path...
Aperte no boto Add with Subfolders e navegue at o local onde est a pasta yalmip,
selecione-a e aperte o boto OK.
2 Instalao
Observao 2.1. Se o usurio seguiu a sugesto da pg. 5, ento a pasta yalmip est dentro
da pasta toolbox do MATLAB.
Repita esse procedimento com a pasta SeDuMi_1_1. No final do procedimento o MATLAB ter adicionado o contedo dessas pastas no MATLAB search path.
Agora aperte no boto SAVE e depois CLOSE.
Para testar se os pacotes foram instalados corretamente basta o usurio digitar yalmiptest
na linha de comando do MATLAB
Se os pacotes foram instalados corretamente o yalmip far um teste completo para verificar quais solvers esto disponveis no MATLAB. ATENO, se o sedumi foi instalado corretamente, ento o resultado do yalmip ser igual ao da figura abaixo:
2 Instalao
Uma vez que os pacotes foram instalados, ento agora vamos comear a ilustrar o uso do
yalmip para a soluo de LMIs no MATLAB.
Introduo ao Yalmip
3 Introduo ao Yalmip
10
(3.1)
Parametro
Valor
A1
15,518
A2
15,518
a1
0,178
a2
0,178
L10
15
L20
15
km
4,6
981
3.1
11
Primeiramente vamos comear com o critrio de estabilidade segundo Lyapunov. Para tanto
considere um sistema linear autnomo dado por:
.
x(t) = Ax(t).
(3.2)
Da teoria de estabilidade de Lyapunov, sabe-se que o sistema (3.2) assintoticamente estvel se e somente se, existir uma matriz simtrica P satisfazendo as seguintes LMIs:
A P + PA < 0
(3.3)
P>0
(3.4)
Agora ns vamos apresentar alguns comandos do pacote yalmip, necessrios para a soluo
de LMIs do sistema apresentado acima. Substituindo os parmetros da tabela (3.1) na equao
(3.1), teremos:
". #
L1
.
L2
"
#" #
L1
0, 0656
0, 0656
0, 0656
L2
(3.5)
Este sistema necessita de uma entrada de controle para o seu funcionamento. Assim, vamos
analisar apenas se a natureza do mesmo estvel ou instvel.
A verificao de estabilidade do sistema (3.1) realizada no MATLAB da seguinte maneira:
Programa 1: Estabilidade segundo Lyapunov
1)A = [-0.0656 0; 0.0656 -0.0656];
2)P = sdpvar(2,2);
3)Restr = set(P > 0) + set(A*P+P*A < 0);
4)opts=sdpsettings(solver,lmilab);
5)solvesdp(Restr,[],opt);
6)[r,d] = checkset(Restr);
7) if sum(r < 0) == 0
8)
disp(Sistema estvel)
9)
P_feasible = double(P);
10) else
11)
disp(Sistema instvel)
12) end
12
Nesse caso a nica varivel do problema a matriz P, que dever ser encontrada pelo
solver. Para definir uma varivel no yalmip usa-se o comando sdpvar (linha 2). Assim teremos
os seguintes argumentos para o comando sdpvar(n,m,field,type).
n = no de linhas da matriz;
m = no de colunas da matriz;
field = real,complex, diz se a matriz varivel real ou se assume nmeros complexos;
type = symmetric,full,hermitian,toeplitz,hankel, skew,diz se a matriz varivel simtrica, completa, ...
Observe na linha 2) do programa que os argumentos field e type foram omitidos. Na verdade esses argumentos so muito pouco usados. Por exemplo, se a matriz varivel quadrada,
ento o yalmip entende que sdpvar(2,2) equivalente : sdpvar(2,2,real,symmetric) . A
linha 3) mostra como devemos armazenar as restries do problema. Todas as restries (LMIs)
do problema devem ser escritas dentro do comando set() e armazenadas dentro de uma varivel,
nesse caso Restr. Essa varivel usada na linha 5) para resolver as LMIs. A funo solvesdp da
linha 5) o comando que diz para o yalmip resolver as LMIs. O solvesdp usado para resolver
qualquer problema de otimizao. Assim teremos os seguintes argumentos para o comando:
sol = solvesdp(Restr,obj,opts).
sol = estrutura contendo as principais informaes sobre o processo de resoluo das LMIs.
Por exemplo, a estrutura mostra se o solver teve algum problema numrico durante os clculos,
se o solver encontrou uma soluo factvel, tempo gasto pelo yalmip para montar as LMIs e
tempo gasto pelo solver para resolv-las.
Restr = Essa varivel contm as LMIs do problema (veja linha 3).
obj = Essa varivel representa a funo objetivo do problema.
Por default o yalmip entende que a varivel obj uma funo de minimizao, quando existir a
necessidade maximizao, o usurio dever multiplicar a varivel obj pelo sinal negativo (-obj)
. Esse argumento tambm pode ser vazio ([ ]) , veja por exemplo na linha 4) do Programa 1,
como ns queramos apenas uma soluo factvel, ento a varivel obj vazia (obj=[ ]) .
opts = essa varivel contm uma estrutura do tipo sdpsettings .
13
Com ela podemos alterar o solver usado pelo solvesdp , para resolver o problema. Esse parmetro discutido com mais detalhes mais a frente. A prinpio o aluno dever setar o solver LMIlab
atravs da opo opts=sdpsettings(solver,lmilab) na linha 4), que soluciona apenas LMIs
evitando assim gerar resultados quando houver erro de programao.
Ao longo do texto a funo solvesdp discutida com mais detalhes! A funo checkset
(linha 6) obtm os resduos das restries do problema de otimizao Primal e Dual. Esses
detalhes podem ser ignorados pelo usurio agora no incio, sendo necessrio apenas saber como
verificar se a soluo obtida pelo solvesdp realmente satisfaz as restries LMI.
Isso feito na linha 7) com o lao if. A funo double da linha 9) converte a estrutura P
(matriz varivel do yalmip) em uma matriz numrica.
Resolvendo o Programa 1 no MATLAB se obtm os seguintes valores:
#
"
1, 2013 0, 0491
P=
, sendo os autovalores de P: 1, 1470 e 1, 2456.
0, 0491 1, 1912
Observe que os autovalores matriz P so positivos, logo a matriz definida positiva, alm
disso, os autovalores da matriz A P + PA so negativos (0, 2448 e 0, 0755). Ento, existe
uma matriz P satisfazendo as condies de Lyapunov (3.3) e (3.4) e, portanto o sistema (3.5)
assintoticamente estvel.
Um detalhe importante a ser mencionado, que nem sempre a resposta obtida pelo solvesdp
satisfatria e por isso a funo checkset tem sempre que ser usada para verificar as restries
LMI.
Deste ponto em diante usaremos o yalmip para resolver diversos problemas de teoria de
controle. Sempre que algum recurso novo for usado, ele ser devidamente comentado.
3.2
(3.6)
14
x(t) = (A BK)x(t),
(3.7)
(3.8)
X >0
(3.9)
"
.
L1
.
L2
g
a1
A1
2L10
q
g
a1
A2
2L10
a2
A2
0
q
g
2L20
"
L1
L2
"
Km
A1
(3.10)
(3.11)
Os autovalores desse sistema so: 0, 0656 e 0, 0656, logo o sistema estvel. O nosso
objetivo projetar um controlador K considerando como entrada de controle a tenso aplicada
na bomba, de modo que o sistema (3.11) tenha o desempenho adequado.
Programa 2: Projeto da realimentao dos estados
13) A = [-0.0656 0; 0.0656 -0.0656];
14) B = [0.2075; 0];
15) X = sdpvar(2,2);
16) G = sdpvar(1,2);
17) Restr = set(X > 0) + set(A*X+X*A-B*G-G*B < 0);
18)opts=sdpsettings(solver,lmilab);
19) solvesdp(Restr,[],opt);
20) [r,d] = checkset(Restr);
15
23)
X = double(X);
24)
G = double(G);
25)
K = G*inv(X)
26)
Autovalor = eig(A-B*K)
27) else
28)
29) end
Observe as linhas 15) e 16), como j foi comentado antes, quando a matriz quadrada o
yalmip automaticamente entende que a matriz simtrica, na linha 15) o comando equivalente
:
X = sdpvar(2,2,real,symmetric) ;
J na linha 16) a matriz possui o nmero de linhas diferente do nmero de colunas, dessa
forma o comando equivalente :
G = sdpvar(1,2,real,full);
Um ponto importante a ser mencionado que o parmetro field ainda no foi usado, e
provavelmente nunca ser. Quando o parmetro field omitido o spdvar entende que a varivel
real. Essa definio j o suficiente para resolver a maioria dos problemas envolvendo o
projeto de LMIs.
Resolvendo o Programa 2 no MATLAB obtm-se os seguintes valores:
X=
"
1, 2415
#
0, 0690
,
0, 0690 1, 3795
i
h
G = 2, 5991 0, 4361 ,
h
i
K = GX 1 = 2, 1169 0, 4220 .
Sendo os autovalores da matrix A BK: 0, 4914 e 0, 0791.
No modelo para suspenso ativa de assento de carro da Figura (3.3) Mc a massa do carro
e ms a massa do assento juntamente com a massa do motorista. O sistema de amortecimento
16
do carro composto pela mola km e pelo amortecedor b1 . O sistema de suspenso ativa composto pela mola k2 e pelo amortecedor b2 . Este modelo foi retirado de trabalhos j publicados
(ASSUNO; FARIA; TEIXEIRA, 2008; PASCOAL; ASSUNO; TEIXEIRA, 2009) e foi
utilizado para comparao entre os mtodos de projeto com otimizao.
O problema consiste em atenuar as vibraes indesejveis que possam ocorrer no assento
do motorista devido a pistas de rodagem irregulares. Dessa forma, pode-se aumentar o amortecimento da vibrao da massa atravs do projeto de um controlador que atue sobre u1 (t) e
u2 (t).
x2 (t)
ms
Motorista + Assento
u2 (t)
k2
b2
x1 (t)
Mc
Carro
u1 (t)
km
b1
Sistema de suspenso ativa do carro
Pneu
Os estados x1 (t) e x2 (t) esto disponveis para realimentao. Sendo x3 (t) = x1 (t) e x4 (t) =
.
x2 (t), o sistema cujas sadas so y1 (t) = x1 (t) e y2 (t) = x2 (t) tm a representao em espao de
17
.
0
x(t) = k
2
ms
k2
Mc
y(t) =
"
k2
ms
km k2
Mc #
mb2s
b2
ms
b1 b2
Mc
1 0 0 0
0 1 0 0
b2
Mc
x(t)
x(t) + 1
ms
0
0
u(t) + w(t)
0
0
Mc
1
Mc
(3.12)
3.3
(3.13)
y = Cx
Sendo w uma entrada exgena (rudo) no sistema. O nosso objetivo projetar um controlador L Rmn tal que o rudo w tenha a menor influncia possvel no comportamento dinmico
do sistema (3.13) realimentado com a entrada u = Lx. Esse projeto pode ser feito minimizando a norma H2 entre a entrada w e a sada y. Que equivalente ao seguinte problema de
otimizao:
min
s.a.
"
B1
B1
> 0,
"
#
AX + XA B2Y Y B2 XC
CX
(3.14)
< 0,
> Tr(Z).
18
0
0
1
0
0
0
A=
50
50
5
3, 3333 30 0, 3333
B1 =
26, 66
0
0
0
0
1
, B2 =
0, 01
0
5
0, 0007 0, 0007
3
0
e C=
"
1 0 0 0
0 1 0 0
50)
L = Y*inv(X)
41)
Autovalor_AN = eig(A-B2*L)
19
52) else
53)
54) end
Nesse programa comeamos a usar comandos para automatizar o processo da criao das
LMIs. Os comandos das linhas 34) 37) so usados para armazenar o nmero de linhas (ou
colunas) das matrizes A, B1 , B2 e C. Esse tipo de operao interessante porque permite que as
LMIs sejam facilmente reaproveitadas para a soluo de outros exemplos numricos. A linha
38) cria uma matriz identidade de dimenso 3x3 (nmero de linhas da matriz C) que ser usada
na LMI da linha 43.2). A grande novidade nesse programa que ele representa um problema de
otimizao. Para resolver um problema desse tipo, basta carregar a funo objetivo no segundo
argumento do comando solvesdp (linha 44). O trao de uma matriz pode ser calculado com o
comando trace . Como foi mencionado anteriormente, o solvesdp entende que para minimizar
o escalar , se fosse um problema de maximizao, ento teramos que multiplicar a funo
objetivo pelo sinal negativo. Dessa forma, o comando da linha 44) seria reescrito como: max =
solvesd p(Restr, ). O yalmip NO consegue calcular a dimenso de matrizes escalares em
LMIs, por exemplo, se na linha 43.2) colocssemos -1 ao invs de IdC = eye(3) , o programa
iria gerar um erro de dimensionamento. Esse detalhe muito importante, j que o pacote LMI
control toolbox faz isso automaticamente. Ao implementar LMIs no yalmip deve-se ter muita
ateno no dimensionamento das matrizes escalares (identidades ou matrizes nulas). A partir
desse ponto no exibiremos as solues encontradas pelo MATLAB. O leitor poder ver os
resultados executando os respectivos arquivos do MATLAB que acompanham o material.
3.4
Da mesma forma como realizou-se o projeto timo H2 , podemor realizar o projeto timo
H . Considere o sistema dinmico dado por (3.13). Sendo w uma entrada exgena (rudo) no
sistema. O nosso objetivo projetar um controlador L Rmn tal que seja atenuada a influencia
do rudo w na sada do sistema (3.13) realimentado com a entrada u = Lx. Esse projeto pode
ser feito minimizando o a norma H entre a entrada w e a sada y. Que equivalente ao seguinte
problema de otimizao:
20
min
B Y Y B XC +Y D
AX
+
XA
B
2
1
2
< 0,
CX
+
DY
I
0
I
B
0
X > 0.
Dadas as matrizes
1
2 1
1
1
0
3
0
0
2
,
B
=
A1 =
1 0 2 3 1 1
2 1 2 1
0
0 0
0
1
0 0
,
B
=
2
0
0 0
0 1
0
1
0
1
0
.
eC=
0
0
0
0
0 0 0 0
1
X*C+Y*D
-IdC
(3.15)
B1;
zeros(mC,m1);
zeros(m1,mC) -mu*IdB]<0);
21
74)
X = double(X)
75)
Y = double(Y)
76)
L = Y*inv(X)
77)
Autovalor_AN = eig(A-B2*L)
78) else
79)
80) end
Nesta aplicao houve a necessidade de se criar uma matriz de transmisso direta nula
(D = 0) de ordem adequada para a composio da LMI. Isto pode ser visto na linha 63) em que
o nmero de linhas igual ao da matriz C e o mero de colunas igual ao da matriz B2 .
A linha 64) cria uma matriz identidade de dimenso 3x3 (nmero de linhas da matriz C)
que ser usada na LMI da linha 69.2), e a linha 65) cria uma matriz identidade de dimenso 2x2
(nmero de culunas da matriz B1) que ser usada tambm na LMI da linha 69.3). A novidade
nesse programa que ele utiliza matrizes nulas para ajuste de dimensionameto da LMI. Note
que na LMI (3.4), existem blocos de zeros nas posies (2,3) e (3,2) da LMI, assim, a dimenso
dests blocos devem se adequar a suas respectivas posies: zeros(mC,m1) na posio (2,3) e
zeros(m1, mC) na posio (3,2), conforme linha linha 69.2) e 69.3).
22
Controle Robusto
4.1
(4.1)
Sabe-se que uma condio suficiente para que seja garantida a estabilidade do sistema incerto (4.1) a existncia de matrizes X = X nn e G mn , tais que
A j X B j G + XAj G Bj < 0
(4.2)
X >0
(4.3)
com j = 1, ..., r.
Quando as LMIs (4.2) e (4.3) so factveis, uma matriz de realimentao de estados que
estabiliza o sistema pode ser dada por
K = GX 1
(4.4)
Como exemplo inicial de sistema incerto, considere o sistema de controle de nvel de tanques apresentado no Exemplo 3.0.1.
Para este sistema teremos dois parmetros incertos. O primeiro ser a constante km da
bomba podendo variar entre entre 30% e +10% de seu valor. O segundo parmetro incerto
ser a rea do orifcio de sada do sistema de tanques a2 , podendo variar entre seu valor total de
rea e uma queda de 20% desta rea, simulando um acumulo de resduos neste orifcio, o que
uma situao real para sistemas tanques.
23
A1 =
g
a1
A1
2L10
q
g
a1
A2
2L10
0
q
a2 0,2a2
A2
g
2L20
"
Km 0,3Km
A1
"
Km +0,1Km
A1
e B1 =
A2 =
g
a1
A1
2L10
q
g
a1
A2
2L10
0
q
a2 0,2a2
A2
g
2L20
e B2 =
A3 =
g
a1
A1
2L10
q
g
a1
A2
2L10
a2
A2
0
q
g
2L20
"
Km 0,3Km
A1
"
Km +0,1Km
A1
e B3 =
A4 =
g
a1
A1
2L10
q
g
a1
A2
2L10
a2
A2
0
q
g
2L20
e B4 =
"
0, 0656
0, 0656
0, 0525
A1 =
"
0, 0656
0, 0656
0, 0525
A1 =
"
0, 0656
0, 0656
0, 0656
A1 =
"
0, 0656
0, 0656
0, 0656
e B1 =
"
0, 2075
e B1 =
"
0, 3261
e B1 =
"
0, 2075
e B1 =
"
0, 3261
Vrtice 2:
#
Vrtice 3:
#
Vrtice 4:
#
24
min beta
%
%
X > 0
%
% As LMIs so programadas com o YALMIP
B2 a B4
%
% sadas : saida.V
saida.L
saida.X
saida.K
saida.norma
%
%Modelo do sistema incerto em espao de estados para o Tanque Quanser:
Area1=15.518;
%cm2
Area2=15.518;
%cm2
a1=0.178;
%cm2
a2=0.178;
%cm2
a21=a2-0.2*a2;
L10=15;
%cm
L20=15;
%cm
Km=4.6;
%cm3/sV
Km1=Km-0.3*Km;
Km2=Km+0.1*Km;
g=981;
%cm/s2
25
0;
-(a2/Area2)*sqrt(g/(2*L20))];
B1=[(Km1/Area1); 0];
A2=[-(a1/Area1)*sqrt(g/(2*L10))
(a1/Area2)*sqrt(g/(2*L10))
0;
-(a21/Area2)*sqrt(g/(2*L20))];
B2=[(Km1/Area1); 0];
A3=[-(a1/Area1)*sqrt(g/(2*L10))
(a1/Area2)*sqrt(g/(2*L10))
0;
-(a2/Area2)*sqrt(g/(2*L20))];
B3=[(Km2/Area1); 0];
A4=[-(a1/Area1)*sqrt(g/(2*L10))
(a1/Area2)*sqrt(g/(2*L10))
0;
-(a21/Area2)*sqrt(g/(2*L20))];
B4=[(Km2/Area1); 0];
C=[0 1];
% Determina as dimenses do problema.
ordem
= size(A1,1);
entradas_c = size(B1,2);
% Inicializa a varivel que armazenar as LMIs do problema.
LMIs = set([]);
% Cria as variveis do problema.
X = sdpvar(ordem,ordem,symmetric);
G = sdpvar(entradas_c,ordem,full);
% Entra com as LMIs do problema
LMIs = set(A1*X + X*A1+ B1*G + G*B1
< 0) + ...
< 0) + ...
< 0) + ...
< 0) + ...
26
opts=sdpsettings(solver,lmilab);
% Finalmente, o problema de otimizao resolvido.
solucao = solvesdp(LMIs,[],opts);
% Acessa o menor resduo primal.
p=min(checkset(LMIs));
saida.delta = p;
saida.norma = inf;
% Capturando a soluo (se existir).
if p > -1e-7
saida.X
= double(X);
saida.K = double(G)*inv(saida.X);
saida.norma = norm(saida.K);
end
%Simulao para uma incerteza fixa (a21=-0.1*a2)
Area1=15.518;
%cm2
Area2=15.518;
%cm2
a1=0.178;
%cm2
a2=0.178;
%cm2
a21=a2-0.1*a2;
L10=15;
%cm
L20=15;
%cm
Km=4.6;
%cm3/sV
Km1=Km-0.3*Km;
Km2=Km+0.1*Km;
g=981;
%cm/s2
0;
-(a21/Area2)*sqrt(g/(2*L20))];
Bf=[(Km1/Area1); 0];
Aq=[-(a1/Area1)*sqrt(g/(2*L10))
(a1/Area2)*sqrt(g/(2*L10))
0;
-(a21/Area2)*sqrt(g/(2*L20))];
Bq=[(Km2/Area1); 0];
C=[0 1];
%Resposta condio inicial X0=[0.1 0.3] parmetro incerto Km -30%
AA1=[Af+Bf*saida.K];
BB1=Bf;
CC1=C;
DD1=[0];
X0=[1 2];
t=0:0.01:60;
[p,q]=size(t);
u=zeros(1,q);
[y,x]=lsim(AA1,BB1,CC1,DD1,u,t,X0);
y11=[0 1]*x;
%Resposta condio inicial X0=[0.1 0.3] parmetro incerto Km +10%
AA2=[Aq+Bq*saida.K];
BB2=Bq;
CC2=C;
27
28
DD2=[0];
X0=[1 2];
t=0:0.01:60;
[p,q]=size(t);
u=zeros(1,q);
[y,x]=lsim(AA2,BB2,CC2,DD2,u,t,X0);
y21=[0 1]*x;
% Plotando as respostas
subplot(2,1,1); plot(t,y11); hold on; grid
ylabel(estado x2 e Km -30%)
xlabel(t(s))
subplot(2,1,2); plot(t,y21); hold on; grid
ylabel(estado x2 e Km +10%)
xlabel(t(s))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Este programa j est bem estruturado e comentado. A novidade aqui a plotagem para
uma certa condio inicial de dois pontos de operao dentro do politopo de incertezas, ou seja,
um ponto com os parmetros incertos fixos em 30% de Km e 20% de a2 e o outro ponto com
os parmetros incertos fixos em +10% de Km e 20% de a2 . A resposta do sistema acaba sendo
um pouco lenta, podendo este problema ser resolvido com a insero de taxa de decaimento no
projeto do sistema.
4.2
(4.5)
Sabe-se que uma condio suficiente para o custo gatantido H2 do sistema incerto (4.5) a
29
min
"
#
Z
B
1j
s.a.
> 0,
B1 j X
"
#
A
X
+
XA
B
Y
Y
XC
j
j
2j
2j
< 0,
CX
I
> Tr(Z).
(4.6)
com j = 1, ..., r.
Quando as LMIs (4.2) so factveis, uma matriz de realimentao de estados que estabiliza
o sistema pode ser dada por
L = Y X 1
(4.7)
Pode-se tomar como exemplo de sistema incerto o sistema para suspenso ativa para assento de carro apresentado no Exemplo 3.2.1, especificando Mc = 1500 kg para a massa do
carro e 70 ms 120 kg para a massa do assento (20 kg) somada massa do motorista, que
se supe variar de 50 a 100 kg. Desta forma ms ser um parmetro incerto para o problema.
Adotaram-se os parmetros restantes como km = 4 104 N/m, b1 = 4 103 Ns/m, k2 = 5 103
N/m e b2 = 5 102 Ns/m. Constituir-se-, portanto, um politopo possuindo dois vrtices com
um parmetro incerto apenas nas matrizes A e B2 , ou seja, a matriz B1 permanece inalterada
para todos os vrtices. Os vrtices so descritos abaixo:
Vrtice 1 (ms = 70 kg e b2 = 5 102 Ns/m):
0
0
1
0
A1 =
e B21 =
71, 43 71, 43 7, 14 7, 14
0, 0143
3, 33
30
0, 33
0
0
0
0, 0007 0, 0007
0
0
0
0
1
e
B
=
A2 =
22
0, 0083
41, 67 41, 67 4, 17 4, 17
3, 33
30
0, 33
0
0
0
0, 0007 0, 0007
30
para um
min Tr(rho)
s.a [AiW+WAi+B2iZ+ZB2i
[CW+DZ
WC+ZD]
-I
] < 0,
%
%
[X
B1]
[B1
] > 0,
%
%
B1
D2
%
% sadas : saida.norma
saida.V
saida.L
saida.W
saida.K
%
%Modelo do sistema incerto em espao de estados para a Suspenso Ativa:
Mc=1500;
ms=[70 120];
k1=40000;
k2=5000;
b1=4000;
b2=500;
31
gamma=26.66;
for i=1:2
A{i}=[0
0
-k2/ms(i)
k2/Mc
0;
1;
k2/ms(i)
(-k1-k2)/Mc
-b2/ms(i)
b2/Mc
b2/ms(i);
( -b1-b2)/Mc];
= size(A{1},1);
vertices = size(A,2);
entradas_c = size(B2{1},2);
entradas_r = size(B1,2);
saidas
= size(C,1);
32
< 0);
T11 = X;
T12 = B1;
T22 = W;
LMIs = LMIs + set([T11 T12; T12 T22]
> 0);
end
LMIs = LMIs + set(W > 0) + set(rho >= trace(X));
% Determina o nmero de linhas de LMIs
saida.L = 0;
for i=1:size(LMIs,1)
saida.L = saida.L + size(LMIs{i},1);
end
% Determina o nmero de variveis escalares.
saida.V = size(getvariables(LMIs),2);
% Configurando o Solver.
%opts=sdpsettings(solver,sedumi);
opts=sdpsettings(solver,lmilab);
% Finalmente, o problema de otimizao resolvido.
solucao = solvesdp(LMIs,obj,opts);
% Acessa o menor resduo primal.
p=min(checkset(LMIs));
saida.delta = p;
33
saida.norma = inf;
% Capturando a soluo (se existir).
if p > -1e-7
saida.W
= double(W);
saida.norma = sqrt(double(rho));
saida.K = double(Z)*inv(saida.W);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
A novidade neste programa apenas a criao de matrizes celulares (A{i} por exemplo)
que se torna muito til quando comea a crescer muito o nmero de incertezas, podendo ocorrer erros tanto para a montagem dos vrtices como para a declarao das LMIs, sendo assim
recomendado o uso desta estrutura.
Para este programa pode-se encontrar o mximo valor atingido pelo diagrama de valores
singulares (funo sigma da MATLAB), verificando assim a eficincia do projeto. Assim, foi
criado o seguinte programa:
%%%%%%%%%%%%%%%%% RESPOSTA EM FREQUNCIA %%%%%%%%%%%%%%%%%%%%%%
hold on
% SYS1=ss(A{1},B1,C,0);
% sigma(SYS1);
SYS2=ss(A{2},B1,C,0);
% sigma(SYS2,g--);
% SYS3=SS((A{1}+B2{1}*saida.K),B1,C,0);
% sigma(SYS3);
SYS4=SS((A{2}+B2{2}*saida.K),B1,C,0);
sigma(SYS2,SYS4,g--);
grid;
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34
Aplicando a funo sigma para o vrtice A2 (pior caso) tanto para o sistema sem realimentao dos estados, como para o sistema realimentado obteremos o grfico a seguir:
Singular Values
20
A2 s/ realimentao
A2 realimentado
System: Vrtice A2 sem realimentao
Frequency (rad/sec): 4.57
Singular Value (dB): 11.5
20
40
60
80
100
120
140
1
10
10
10
10
10
10
Frequency (rad/sec)
Figura 4.1: Resposta em frequncia para o sistema sem realimentao e com realimentao do
controlador robusto H2 .
35
A2 s/ realimentao
A2 realimentado
5
4
To: Out(1)
3
2
1
0
1
2
Amplitude
3
4
4
A2 s/ realimentao
A2 realimentado
3
To: Out(2)
3
Time (sec)
Figura 4.2: Resposta em impulsiva para o sistema sem realimentao e com realimentao do
controlador robusto H2 .
4.3
Da mesma forma como foi feito para o custo garantido H2 , podemos estender a anlise
realizada anteriormente para sistemas incertos, encontrando o custo garantido H , ou seja,
garantiremos que todos os vrtices do politopo de incertezas tero a norma H menor que este
custo garantido.
Considere o sistema incerto dado em (4.5), sabe-se que uma condio suficiente para o
custo gatantido H deste sistema incerto a existncia de matrizes X = X nn e Y mn
36
tais que
com j = 1, ..., r.
min
B
+Y D B
A
X
+
XA
B
Y
Y
XC
j
2j
1j
2j
j
< 0,
CX
+
DY
I
0
B1 j
0
I
X > 0.
(4.8)
Quando as LMIs (4.3) so factveis, uma matriz de realimentao de estados que estabiliza
o sistema pode ser dada por
L = Y X 1
(4.9)
Pode-se tomar como exemplo de sistema incerto o sistema para suspenso ativa para assento
de carro apresentado no Exemplo 3.2.1, especificando os mesmos parmetros apresentados para
o exemplo H2 , constituir-se-, portanto, um politopo possuindo dois vrtices com um parmetro
incerto apenas nas matrizes A e B2 , ou seja, a matriz B1 permanece inalterada para todos os
vrtices. Os vrtices so os mesmos descritos anteriormente.
Programa 7: Custo gatantido H
% Calcula um controlador H-infinito por realimentaao de estados
usando o
min mu
WC+ZD
[CW + DZ
- I
[B1
WC+ZD
[CW + DZ
[B1
B1
] < 0,
- muI ]
%
- I
0
B1
] < 0,
- muI ]
%
%
W > 0
%
% As LMIs so programadas com o YALMIP
37
A2
B1
%
% sadas : saida.norma
saida.V
saida.L
saida.W
saida.K
0;
1;
k2/ms(i)
(-k1-k2)/Mc
-b2/ms(i)
b2/Mc
b2/ms(i);
( -b1-b2)/Mc];
= size(A{1},1);
vertices
= size(A,2);
entradas_c = size(B2{1},2);
38
entradas_r = size(B1,2);
saidas
= size(C,1);
39
end
% Determina o nmero de variveis escalares.
saida.V = size(getvariables(LMIs),2);
% Configurando o Solver.
%opts=sdpsettings(solver,sedumi);
opts=sdpsettings(solver,lmilab);
% Finalmente, o problema de otimizao resolvido.
solucao = solvesdp(LMIs,obj,opts);
% Acessa o menor resduo primal.
p=min(checkset(LMIs));
saida.delta = p;
saida.norma = inf;
% Capturando a soluo (se existir).
if p > -1e-7
saida.W
= double(W);
saida.norma = sqrt(double(mu));
saida.K = double(Z)*inv(saida.W);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Pode-se para este programa encontrar tambm o mximo valor atingido pelo diagrama de
valores singulares (funo sigma da MATLAB), verificando assim a eficincia do projeto com
os mesmos comandos anteriormente apresentados.
Aplicando a funo sigma para o vrtice A2 (pior caso) tanto para o sistema sem realimentao dos estados, como para o sistema realimentado obteremos o grfico a seguir:
40
Singular Values
20
A2 s/ realimentao
A2 realimentado
System: Vrtice A2 sem realimentao
Frequency (rad/sec): 4.52
Singular Value (dB): 11.5
20
40
60
80
100
120
140
1
10
10
10
10
10
10
Frequency (rad/sec)
Figura 4.3: Resposta em frequncia para o sistema sem realimentao e com realimentao do
controlador robusto H .
Analisando a resposta ao degrau de amplitude 0,1m do sistema atravs do seguinte programa:
%%%%%%%%%%%%%%%%% RESPOSTA AO DEGRAU %%%%%%%%%%%%%%%%%%%%%%%
t=0:0.01:10;
SYS2=ss(A{2},B1,C,0);
step(SYS2)
hold on
SYS4=SS((A{2}+B2{2}*saida.K),B1,C,0);
step(SYS4)
title(Resposta ao degrau de amplitude 0.1m)
grid on
hold off
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
41
A2 s/ realimentao
A2 realimentado
To: Out(1)
1.5
0.5
Amplitude
0.5
1.5
A2 s/ realimentao
A2 realimentado
To: Out(2)
0.5
3
Time (sec)
Figura 4.4: Resposta ao degrau para o sistema sem realimentao e com realimentao do
controlador robusto H .
Pode-se verificar que o sistema agora rejeita a influencia do degrau que praticamente se
torna imperceptvel ao assento do motorista (primeira sada analisada) e ao distrbio sentido
pelo carro (segunda sada analisada).
42
Referncias Bibliogrficas
ASSUNO, E.; FARIA, F. A.; TEIXEIRA, M. C. M. Controle robusto de sistemas lineares
sujeitos falhas estruturais usando realimentao derivativa. In: PROCEEDINGS OF THE
BRAZILIAN CONFERENCE ON DYNAMICS, CONTROL AND APPLICATIONS, 7., 2008,
Presidente Prudente. Proceedings of the... Presidente Prudente: [s.n.], 2008. 6p.
PASCOAL, R. M.; ASSUNO, E.; TEIXEIRA, M. C. M. Restrio da taxa de decaimento
e otimizao no projeto de controladores robustos para sistemas sujeitos a falhas. Brazilian
Conference On Dynamics, Control And Applications, n. 8, 2009.