设计 LQG 伺服控制器
此示例说明如何为以下系统设计伺服控制器。
被控对象有三个状态 (x)、两个控制输入 (u)、两个随机输入 (w)、一个输出 (y)、输出的测量噪声 (v),以及以下状态和测量方程:
其中
该系统具有以下噪声协方差数据:
使用以下代价函数来定义跟踪器性能和控制力度之间的权衡:
要为此系统设计 LQG 伺服控制器,请执行以下操作:
通过在 MATLAB® 命令行窗口中键入以下命令来创建状态空间系统:
A = [0 1 0;0 0 1;1 0 0]; B = [0.3 1;0 1;-0.3 0.9]; G = [-0.7 1.12; -1.17 1; .14 1.5]; C = [1.9 1.3 1]; D = [0.53 -0.61]; H = [-1.2 -0.89]; sys = ss(A,[B G],C,[D H]);
通过键入以下命令,使用给定的代价函数构造最优状态反馈增益:
nx = 3; %Number of states ny = 1; %Number of outputs Q = blkdiag(0.1*eye(nx),eye(ny)); R = [1 0;0 2]; K = lqi(ss(A,B,C,D),Q,R);
通过键入以下命令,使用给定的噪声协方差数据构造卡尔曼状态估计器:
Qn = [4 2;2 1]; Rn = 0.7; kest = kalman(sys,Qn,Rn);
通过键入以下命令,连接卡尔曼状态估计器和最优状态反馈增益以构成 LQG 伺服控制器:
此命令返回以下 LQG 伺服控制器:trksys = lqgtrack(kest,K)
>> trksys = lqgtrack(kest,K) a = x1_e x2_e x3_e xi1 x1_e -2.373 -1.062 -1.649 0.772 x2_e -3.443 -2.876 -1.335 0.6351 x3_e -1.963 -2.483 -2.043 0.4049 xi1 0 0 0 0 b = r1 y1 x1_e 0 0.2849 x2_e 0 0.7727 x3_e 0 0.7058 xi1 1 -1 c = x1_e x2_e x3_e xi1 u1 -0.5388 -0.4173 -0.2481 0.5578 u2 -1.492 -1.388 -1.131 0.5869 d = r1 y1 u1 0 0 u2 0 0 Input groups: Name Channels Setpoint 1 Measurement 2 Output groups: Name Channels Controls 1,2 Continuous-time model.