LQG问题:状态估计总是完美的

11视图(30天)
约翰”class=
约翰 2023年3月10日
编辑: 约翰 2023年3月21日
我通过一个简单的二阶LQG控制器春/质量/阻尼器系统,使用一个控制器等基础。
看到我的m文件。
我使用“LQG Mathworks页面 在这里 在一节” 构造卡尔曼滤波状态估计量”。
另外,这个链接 在这里 在一节题为“ 观测器设计 ”,更清楚地显示了[x; e]制定状态向量。
出于某种原因,我的LQG esimates跟踪系统状态和状态 完美的 无论如何,即状态估计总是完全跟踪状态零误差,即使L = (0,0)。后者应该意味着没有状态估计修正,因为实际测量不考虑状态估计的修正。
州esimates也完全跟踪误差为0 (e - 315)参考步骤的变化。
可能发生了什么?
1) 过程:状态空间系统- - >等方面设计(找到K) - - > LQG通过L(和使用K) - - >模拟
2) 状态向量是[x;e), x = (pos,韦尔)和e = [error_pos_hat error_vel_hat],
如“error_pos_hat”是与位置相关的错误状态估计。
x_dot = (A - B * K_lqr) * x + B * K_lqr * e
e_dot = 0 * x + (A - L * C) * e
所以:
一个= [A-BK,汉堡王;0,A-LC]
B = [B;0]
C = (C, 0)
D = 0
这些状态方程是正确的?
3) 出于某种原因,L的选择不影响系统响应,即使L =(0,0),应该意味着没有状态估计修正 在所有。
虽然一个矩阵的状态误差特征值(error_pos_hat和error_vel_hat)降低L - - > 0时如预期。
LQG状态估计总是完全跟踪状态,即~ 0错误。更确切的说,它是关于1 e - 315(是的,这是三百一十五)
4) 同时,国家错误在t = 0 = 0开始;他们应该花一些时间收敛即使估计很好。
但是,状态估计似乎做的 的东西 (不过,我还不清楚),即使L = 0。例如如果我改变初始状态,所以
x0 = (0.3, 0.1, 0.0, 0.0)
就变成了
x0 = (0.3, 0.1, 0.1, -100)
即错误也开始非零,那么错误花一些时间最终收敛于0错误。
但他们会收敛于0错误即使L = (0,0)。这似乎是意想不到的;这并不是我想做的事情。
这个情节是收敛与L =(0,0)和非零初始误差状态:
这是使用系统极点* 10,我发现每个附加的m文件“正常”的方式, 放大在X轴上
显然收敛更快,这将会如果我认为系统是设置正确,即状态估计误差不是0:)
2的评论
约翰”class=
约翰 2023年3月10日
谢谢 @Sam翟 ,我将检查:这不是重点(猜测),但是谢谢你指出!只是得到一些有意义的例子…将检查。

登录置评。

接受的答案

保罗”class=
保罗 2023年3月11日
编辑:保罗 2023年3月11日
嗨,约翰,
免责声明:我没有看你的代码。
我认为所有你看到的结果是有意义的。首先,让我们为x和xhat写状态方程(我们可以使用x和e,但我认为这可能是清晰的用xhat代替e)。
对植物状态方程:
xdot = x + B * * u (1)
估计量的状态方程:
xhatdot = * xhat + B * u + L (y-yhat) (2)
= * xhat + B * u + L * C * (x - xhat) (2)
= L * C * x + (A - L C *) * xhat + B * u (2 B)
之前任何进一步通过关闭控制回路,考虑方程(1)和(2)。如果x和xhat有相同的初始条件,那么我们就会准备x和xhat A和B是相同的,因为都是相同的状态方程和植物和估计都是兴奋通过相同的输入。所以,用相同的初始条件,我们当然希望x和xhat是相同的,无论l .实际上这个工作完全不像因为模型估计不精确匹配的真正动力。
假设相反,植物有一个非零初始条件和估计量有一个零初始条件。因为LTI,植物的状态响应响应之和是由于初始条件和由于输入的响应。的状态响应估计量与植物响应是由于输入因为估计IC是零。如果核电站是稳定的(在任何稳定闭环控制),植物响应由于point条件最终衰变为零,当衰减足够小的状态响应估计将匹配的状态响应,即最终估计误差趋于零的集成电路响应植物衰减为零。请注意,这将是真正的即使L = 0。然而,如果L = 0的“时间常数”和动态估计误差是一样的植物,这不是有用,如果我们想使用xhat反馈。因此,我们使用非零L反馈估计量的估计误差由于衰减不匹配的初始条件为零速度比的动力工厂,实际上比应用闭环控制后的动力学。
闭环控制,假设状态反馈和伺服跟踪x (1):
u = K * ((1, 0) * r - xhat)
水下的控制(1)
xdot = x + B * * (K * (1, 0) * r - xhat) = * x - B * K * xhat + B * K * (1, 0) * r (3)
地下灌溉控制进入(2 b)
xhatdot = L * C * x + (L * C) * xhat + B * K ([1, 0] * r - xhat)
= L * C * x + (A - L * C - B * K) * xhat + B * K * (1, 0) * r (4)
(3)和(4)相结合成一个单一的方程:
[xdot; xhatdot] = [K - b *;L * C L * cb * K] * [x, xhat] + [B * K * (1, 0);B * K * [1, 0]] * r
例子
overShootPec = 5;
ζ= abs日志(overShootPec / 100)) /√(π^ 2 *日志(overShootPec / 100) ^ 2);
wn_rPs = 2 *π* 40;
% % OL系统
J_kgm2 = 1 e-5;
b =ζ* 2 * wn_rPs * J_kgm2;
k = wn_rPs ^ 2 * J_kgm2;
(0 = 1;- k / J_kgm2 - b / J_kgm2];
B = [0;1 / J_kgm2];
C = 0 [1];
D = 0;
massSys = ss (A, B, C, D,
“StateName”,{“θ”,“theta_dot”},
“InputName”,{“u”},
“OutputName”,{“θ”});
%控制收益
ControlPoles =根((1 1400 1 e6));
K =地方(massSys.A massSys.B ControlPoles);
%估计收益
EstimatorPoles = (-2000 - -2500);
L =地方(massSys.A。”、massSys.C。”EstimatorPoles)。”;
%闭环系统
Acl = [A - b * K;L * C、L * cb * K);
Bcl = [B * K * (1, 0);B * K * [1, 0]];
Ccl = [1 0 0 0];
Dcl = 0;
clsys = ss (Ccl Acl、Bcl Dcl);
%阶跃响应
(y, t, x) = (clsys)步;
情节(t, y)
情节(t) x (: 1:2) - x (:, 3:4))
传奇(“pos估计误差”,“韦尔估计误差”)
正如所料,用同样的ICs(零),真正的状态和估计的状态是相同的。
备注:上面的图是不一样的我在本地安装使用R2022a得到什么。不确定那是什么。
现在检查由于非零IC在植物的响应和零IC估计量
(y, t, x) =初始(clsys [1 0 0 0]);
情节(t) x (: 1) - x(:, 3)),网格,ylabel (“pos估计误差”)
情节(t) x (:, 2) - x(:, 4)),网格,ylabel (“韦尔估计误差”)
这些错误响应变化取决于L .应该设置L =(0, 0),看看阶跃响应和初条件反应是有意义的。
13个评论
约翰”class=
约翰 2023年3月21日
编辑:约翰 2023年3月21日
谢谢 @Paul 。这都是非常有用的和澄清我的一些误解,并给有用的指导为中间调试使用额外的Matlab 'smany特性(其中许多我不知道的存在)。再次感谢。

登录置评。

更多的答案(0)

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的