0% ont trouvé ce document utile (0 vote)
525 vues7 pages

Commande LQR du Pendule Inversé

Ce document présente la modélisation et la commande LQR d'un pendule inversé sur chariot. Le système est instable en boucle ouverte. La commande LQR le rend commandable et observable en boucle fermée, mais la réponse n'est pas satisfaisante. En augmentant certains éléments de la matrice Q et en ajoutant une précompensation, on améliore la réponse.

Transféré par

Ba Chir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
525 vues7 pages

Commande LQR du Pendule Inversé

Ce document présente la modélisation et la commande LQR d'un pendule inversé sur chariot. Le système est instable en boucle ouverte. La commande LQR le rend commandable et observable en boucle fermée, mais la réponse n'est pas satisfaisante. En augmentant certains éléments de la matrice Q et en ajoutant une précompensation, on améliore la réponse.

Transféré par

Ba Chir
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

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.

Vous aimerez peut-être aussi