2

我正在尝试做的事情

  • 我正在尝试通过组合线性二次调节器(LQR)和卡尔曼滤波器来创建一个 LQG 控制器来控制给定系统。

我被困在哪里

我分别找到了两者,但不确定如何在 MATLAB 中组合它们。这是系统和 LQR 解决方案:

系统和 LQR 解决方案

我能够分别创建卡尔曼滤波器和 LQR,但我不知道如何组合 LQR 以将卡尔曼滤波器状态估计作为其输入。

Akal = Afull;
Bkal = [B1, B2];
Ckal = Cfull;
Dkal = [0 0];
sys_kal = ss(Akal,Bkal,Ckal,Dkal);

[KEST,L,P] = kalman(sys_kal,E_d, E_n, 0)

[K,S,e] = lqr(Afull,B1,Q,r);

当我使用卡尔曼函数时,这size(KEST)给了我:

State-space model with 11 outputs, 2 inputs, and 10 states.

我希望我U使用新的 SS 系统给出的估计KESTKEST提供输出的估计值(y,维度 1),以及所有 10 个状态的估计值(X,维度 10)。我可以使用 LQR 和 Kalman 函数编写/绘制出我希望创建的闭环控制路径,但我被困在这一点上,因为我不知道如何通过 MATLAB 实现它。我也不确定语法。

我搜索了 MATLAB 示例,但没有找到任何可以告诉我如何组合我找到的内容的示例。我知道这KEST是一个状态空间模型,但我不知道如何使用它或选择单个输出。

我希望得到帮助

  • 如果我使用bode(KEST),它会为我提供所有 11 个输出的 BODE 图。我不确定如何只选择KEST.

  • 我想拥有U = -K*X_est,但目前我只知道 的价值K。我不知道如何X_est从我的KEST状态空间系统中获取一个。

4

1 回答 1

0

您正在寻找的是一个名为 lqgreg 的命令:

rlqg = lqgreg(kest,k)

还要确保 kest 输出是 10 个状态,并且 y(输出)不包括在估计中。

为了更好地理解它:LQR 是一种状态反馈,因此控制以最佳 k 增益反馈所有状态。k 的大小等于系统模型的状态。

LQR 的常见问题是您很少测量所有状态。卡尔曼滤波器来了,它有助于从测量的输出和已知的输入中估计所有状态。请注意,卡尔曼滤波器可以用于许多其他事情,但这里卡尔曼滤波器的唯一作用是为状态反馈创建状态估计,因此它应该只估计系统状态。

如果您需要知道系统输出(用于绘图或其他任何内容),则可以很容易地根据状态估计和输入(Cx + Du)进行计算,但您可以创建另一个卡尔曼滤波器仅用于输出估计。在微控制器或其他低容量环境中运行时,后一种解决方案是不可接受的,因为您复制了基本相同的算法。

于 2018-03-26T05:16:25.100 回答