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 .
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);
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?