Comment choisir le signal de référence dans un modèle d'espace d'état?

0

Je suis un peu confus quant au choix du signal de référence afin de contrôler les modèles d'espace d'états.

J'ai lu (cependant sans explication mathématique approfondie) qu'il faut redimensionner son signal de référence pour que le système puisse suivre le signal d'entrée. Il existe également une fonction qui donne un coefficient de mise à l'échelle Nbar. Je dois donc multiplier mon signal de référence par celui-ci:

s = size(A,1);
Z = [zeros([1,s]) 1];
N = inv([A,B;C,D])*Z';
Nx = N(1:s);
Nu = N(1+s);
Nbar=Nu + K*Nx;

Dans mon cas particulier, il y a le modèle d'un pendule sur un chariot unidimensionnel avec des pôles choisis arbitrairement. Mes variables d'état sont .x=[x x˙ θ θ˙]T

Ci-dessous, le code matlab:

clear all;

M = 1;
m = 1;
l = 1.5;
g = 9.8;
I = m*l^2;
b = 0.05;

denom = M*(m*l^2) + I*(m + m);

a22 = -(b*I + b*m*l^2)/denom;
a23 = (g*(l^2)*(m^2))/denom;
a42 = -(b*l*m)/denom;
a43 = (g*(M+m)*l*m)/denom;

b21 = (I + m*l^2) / denom;
b41 = l*m / denom;

A = [0 1 0 0; 0 a22 a23 0; 0 0 0 1; 0 a42 a43 0];
B = [0; b21; 0; b41];
C = [1 0 0 0];
D = 0;

% Check for controllability
co = ctrb(A, B);
fprintf("%f\r\n", rank(co));

% POLES
P = [-1.5 -0.9 -2.5 -3.5];

% Placing poles
K = place(A, B, P);

% Reference signal rescaling
sys = ss(A, B, C, D);
N = rscale(sys, K);

Mon modèle simulink: Pendule inversé sur un chariot.  Simulink

Et le tracé de position: Tracé de position du chariot pendulaire inversé

Tout fonctionne comme un charme. Cependant, l'intuition qui me manque totalement me manque.

Imaginez le contrôle PID standard, dans ce cas, si je souhaite contrôler la position, je définirais l’erreur sur «position_current_pour_position_ souhaitée» et appliquerais la formule PID standard à cette erreur. Ce qui précède montre intuitivement pourquoi la position est contrôlée et si je veux contrôler, par exemple, la vitesse, je définirai simplement l'erreur sur la divergence de la vitesse.

Cependant, dans un espace d'états, j'ai un coefficient qui apparaît après le calcul du produit scalaire entre mon état et la matrice de gain. Et pour une raison quelconque, après l'avoir soustrait d'une version mise à l'échelle de u, je reçois une position contrôlée. Pourquoi est un grand secret pour moi. Et comment contrôler une autre variable d'état dans ce cas, comme la vélocité par exemple?

Long Smith
la source
La position est la plus pratique, c'est la raison. Si vous souhaitez contrôler la vitesse ou l'accélération, vous pouvez le faire. Mais d’abord, veuillez considérer la portée physique du système et ce que vous souhaitez accomplir.
Gürkan Çetin
@ GürkanÇetin Je comprends clairement que je peux le faire. La question est comment.
Long Smith
1
Ok j'ai peut-être mal compris. Parce que la première question du dernier paragraphe demande quel paramètre contrôler, pas comment le faire. Avez-vous essayé de remplacer x par x_dot? Quel a été le résultat? Si vous en précisez un peu plus, je suis sûr que la question et les réponses seront plus utiles pour tout le monde. Sinon, je crains qu'il ne soit classé comme "trop ​​large".
Gürkan Çetin
@ GürkanÇetin en fait, cette question peut sembler double. Ce que je voulais dire, c'est que je ne vois aucune raison pour laquelle la position exacte est contrôlée. Imaginez un contrôle PID standard, dans ce cas, si je souhaite contrôler la position, je définirais l'erreur sur (current_position - désirée_position) et appliquerais la formule PID standard à cette erreur. Ce qui précède montre intuitivement pourquoi la position est contrôlée et si je veux contrôler, par exemple, la vitesse, je définirai simplement l'erreur sur la divergence de la vitesse.
Long Smith
@ GürkanÇetin Cependant, dans un espace d'états, j'ai un coefficient qui apparaît après le calcul du produit scalaire entre mon état et la matrice de gain. Et pour une raison quelconque, après l'avoir soustrait d'une version à l'échelle de u, nous obtenons une position contrôlée. L'intuition me manque juste derrière cela.
Long Smith

Réponses:

1

Donc, en supposant que nous avons affaire à des systèmes LTI de la forme

(1)x˙=Ax+Buy=Cx+Du

xRnxuRnuyRnyuyssr

u=KxABKxyxssussyss=rx˙y=rxssussyssrxss=Mxruss=Mur(1)

(2)0nx×nx=(AMx+BMu)rr=(CMx+DMu)r.

rr

(3)[ABCD][MxMu]=[0nx×nxIny×ny]

qui peut être résolu avec

(4)[MxMu]=[ABCD]1[0nx×nxIny×ny].

nynuny<nuny>nur .

(4)x^=xxssu^=uussx^xxssx^

x^˙=x˙x˙ss=Ax+Bu(Axss+Buss)0=A(xxss)+B(uuss)=Ax^+Bu^

u^=Kx^ABKx^x^u^u^u

(5)u=Kx+Kxss+uss.

xssussr

(6)u=Kx+(KMx+Mu)Nr.

(4)r

(7)N=[KInu×nu][ABCD]1[0nx×nxIny×ny].

NKKNyr

fibonatique
la source