我对选择参考信号以控制状态空间模型感到困惑。
我已经阅读(但没有深入的数学解释),必须缩放他的参考信号,以使系统能够跟踪输入信号。还有一个给出缩放系数的函数 Nbar
,所以我必须乘以它的参考信号:
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;
在我的特殊情况下,在一维推车上有一个摆锤的模型,任意选择的杆。我的状态变量是 $ {\ vec {\ textbf {x}}} = [x \ \ dot {x} \ \ theta \ \ dot {\ theta}] ^ {T} $。
以下是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);
一切都像魅力一样。但是我完全错过了背后的直觉。
想象一下标准PID控制,在这种情况下,如果我想控制位置,我会将错误设置为'current_position - desired_position',并将标准PID公式应用于该错误。从上面可以直观地清楚为什么控制位置,如果我想控制,例如速度,我只会将误差设置为速度发散。
然而,在状态空间中,我有一些系数在计算我的状态和增益矩阵之间的点积之后出现。由于某种原因,从你的缩放版本中减去它后,我得到了控制位置。为什么对我来说是个大秘密。在这种情况下,如何控制任何其他状态变量,例如速度?