Está en la página 1de 7

T.

P Commande LQR

Figure 1 _ Pendule inversé

la représentation d'état du système.


A = [0 1 0 0
0 -(I+m*l^2)*b/p (m^2*g*l^2)/p 0
0 0 0 1
0 -(m*l*b)/p m*g*l*(M+m)/p 0]
B = [ 0;
(I+m*l^2)/p;
0;
m*l/p]
C = [1 0 0 0;
0 0 1 0]
D = [0;
0]

Modélisation

%========================================
% Open-loop model
%=====================
M = 0.5; % masse du chariot
m = 0.2; % masse du pendule
b = 0.1; % coefficient du frottement du chariot
I = 0.006; % moment d'inertie du pendule
g = 9.8; %
l = 0.3; % distance du centre masse du pendule
p = I*(M+m)+M*m*l^2; %denominator for the A and B matrices

A = [0 1 0 0;
0 -(I+m*l^2)*b/p (m^2*g*l^2)/p 0;
T.P Commande LQR

0 0 0 1;
0 -(m*l*b)/p m*g*l*(M+m)/p 0];
B = [ 0;
(I+m*l^2)/p;
0;
m*l/p];
C = [1 0 0 0;
0 0 1 0];
D = [0;
0];
states = {'x' 'x_dot' 'phi' 'phi_dot'};
inputs = {'u'};
outputs = {'x'; 'phi'};
%
sys_ss =
ss(A,B,C,D,'statename',states,'inputname',inputs,'outputname',outputs);

3- Stabilité et controllabilité de sys ;

%========================================
% Stability
poles = eig(A)
%======================
% Controllability
cont = ctrb(sys_ss);
controllability = rank(cont)
% observability
Obser = obsv(sys_ss);
observabily = rank(Obser)

>> poles =

0
-5.6041
-0.1428
5.5651
%%% les sys est instable

>> controllability =

4
>> observabily =

%%% les sys est commandable et observable.


T.P Commande LQR

Commande LQR
Figure 2 _ Système en boucle fermée

% LQR control
%================
Q = C'*C;
R = 1;
K = lqr(A,B,Q,R)

Ac =[(A-B*K)] ;
Bc = [B];
Cc = [C] ;
Dc = [D];

states = {'x' 'x_dot' 'phi' 'phi_dot'};


inputs = {'r'};
outputs = {'x'; 'phi'};

sys_cl =
ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outputs);

t = 0:0.01:5;
r =0.2*ones(size(t));
[y,t,x]=lsim(sys_cl,r,t);
plot(t,y(:,1),t,x(:,2)) %la réponse du système en boucle fermée
grid on

K =

-1.0000 -1.6567 18.6854 3.4594


T.P Commande LQR

0.1

0.05

-0.05

-0.1

-0.15

-0.2

-0.25
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

Figure 3_ la réponse du système en boucle fermée

La courbe en bleu représente l'angle du pendule en radians et la courbe en vert


représente la position du chariot en mètres.
Nous avons remarqué que la position finale du chariot n'était pas proche de
l'emplacement souhaité, mais qu'elle s'était en fait déplacée dans la direction
opposée.

Q(1,1) = 5000;
Q(3,3) = 100
R = 1;
T.P Commande LQR

states = {'x' 'x_dot' 'phi' 'phi_dot'};


inputs = {'r'};
outputs = {'x'; 'phi'};

sys_cl =
ss(Ac,Bc,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outputs);

t = 0:0.01:5;
r =0.2*ones(size(t));
[y,t,x]=lsim(sys_cl,r,t);
[AX,H1,H2] = plotyy(t,y(:,1),t,y(:,2),'plot');
grid on
set(get(AX(1),'Ylabel'),'String','cart position (m)')
set(get(AX(2),'Ylabel'),'String','pendulum angle (radians)')

-3 -3
x 10 x 10
1 3

0 2

pendulum angle (radians)


cart position (m)

-1 1

-2 0

-3 -1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

Figure 4_réponce pas à pas avec commande numerique LQR

nous avons remarqué que si vous augmentiez les valeurs des éléments de Q
encore plus haut, vous amélioriez encore plus la réponse.

%===========================
% Lqr + precompensation
%===========================
T.P Commande LQR

Q(1,1) = 5000;
Q(3,3) = 100
R = 1;
K = lqr(A,B,Q,R)
Nbar = -60.55
Ts=1/10;
%
Ac = [(A-B*K)];
Bc = [B];
Cc = [C];
Dc = [D];

states = {'x' 'x_dot' 'phi' 'phi_dot'};


inputs = {'r'};
outputs = {'x'; 'phi'};
%
sys_cl =
ss(Ac,Bc*Nbar,Cc,Dc,'statename',states,'inputname',inputs,'outputname',outp
uts);

t = 0:0.01:5;
r =0.2*ones(size(t));
[y,t,x]=lsim(sys_cl,r,t);
[AX,H1,H2] = plotyy(t,y(:,1),t,y(:,2),'plot');
set(get(AX(1),'Ylabel'),'String','cart position (m)')
set(get(AX(2),'Ylabel'),'String','pendulum angle (radians)')
grid on

0.2 0.1

0.15 0.05
pendulum angle (radians)
cart position (m)

0.1 0

0.05 -0.05

0 -0.1

-0.05 -0.15
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

Figure 5_Step Response with Digital LQR Control and Precompensation


T.P Commande LQR

Maintenant, les temps de montée et de stabilisation sont respectés et le


dépassement du pendule est dans la plage des critères de conception.

También podría gustarte