状态空间控制设计方法,如 LQG/LQR 和极点配置算法,适用于 MIMO 设计。
[K,S,P] = lqr(sys,Q,R,N)
[K,S,P] = lqr(A,B,Q,R,N)
说明
[K,S,P] = lqr(sys,Q,R,N)
计算连续时间或离散时间状态空间模型sys
的最优增益矩阵
K
、相关代数黎卡提方程的解S
和闭环极点P
。Q
和R
分别是状态和输入的权重矩阵。交叉项矩阵N
在省略时设为零。
[K,S,P] = lqr(A,B,Q,R,N)
使用连续时间状态空间矩阵A
和B
计算最佳增益矩阵K
、相关黎卡提方程的解S
以及闭环极点P
。对于离散时间模型,请使用dlqr
。
输入参数
sys
- 动态系统模型,动态系统模型,以ss
模型对象的形式指定。
A
- 状态矩阵,状态矩阵,指定为n x n
矩阵,其中n
为状态数。
B
- 输入到状态矩阵,输入 - 状态矩阵,指定为n x m
的输入 - 状态矩阵,其中m
为输入个数。
Q
- 状态成本权重矩阵,状态-成本加权矩阵,指定为n x n
矩阵,其中n
为状态数。你可以使用 Bryson 规则来设置Q
的初始值,其给定值为
Q i , i = 1 m a x i m u m a c c e p t a b l e v a l u e o f ( e r r o r s t a t e s ) 2 , i ∈ { 1 , 2 , . . . , n } Q_{i,i}=\dfrac{1}{\mathrm{maximum~acceptable~value~of~(error_{states})^{2}}},~\mathrm{i}\in\{1,2,...,n\} Qi,i=maximum acceptable value of (errorstates)21, i∈{1,2,...,n}
Q = [ Q 1 , 1 0 ⋯ 0 0 Q 2 , 2 ⋯ 0 0 0 ⋱ ⋮ 0 0 ⋯ Q n , n ] Q=\left[\begin{array}{c c c c}{{Q_{1,1}}}&{{0}}&{{\cdots}}&{{0}}\\ {{0}}&{{Q_{2,2}}}&{{\cdots}}&{{0}}\\ {{0}}&{{0}}&{{\ddots}}&{{\vdots}}\\ {{0}}&{{0}}&{{\cdots}}&{{Q_{n,n}}}\end{array}\right] Q=⎣⎢⎢⎢⎡Q1,10000Q2,200⋯⋯⋱⋯00⋮Qn,n⎦⎥⎥⎥⎤
R
- 输入成本权重矩阵,输入成本加权矩阵,指定为标量或与D'D
相同大小的矩阵。这里,D
是馈通状态空间矩阵。可以使用 Bryson 规则设置R
的初始值,其给定值为
R i , i = 1 m a x i m u m a c c e p t a b l e v a l u e o f ( e r r o r s t a t e s ) 2 , i ∈ { 1 , 2 , . . . , m } R_{i,i}=\dfrac{1}{\mathrm{maximum~acceptable~value~of~(error_{states})^{2}}},~\mathrm{i}\in\{1,2,...,m\} Ri,i=maximum acceptable value of (errorstates)21, i∈{1,2,...,m}
R = [ R 1 , 1 0 ⋯ 0 0 R 2 , 2 ⋯ 0 0 0 ⋱ ⋮ 0 0 ⋯ R n , n ] R=\left[\begin{array}{c c c c}{{R_{1,1}}}&{{0}}&{{\cdots}}&{{0}}\\ {{0}}&{{R_{2,2}}}&{{\cdots}}&{{0}}\\ {{0}}&{{0}}&{{\ddots}}&{{\vdots}}\\ {{0}}&{{0}}&{{\cdots}}&{{R_{n,n}}}\end{array}\right] R=⎣⎢⎢⎢⎡R1,10000R2,200⋯⋯⋱⋯00⋮Rn,n⎦⎥⎥⎥⎤
这里,m 是输入的个数。
N
- 可选的交叉项矩阵,可选的交叉项矩阵,以矩阵形式指定。如果没有指定N
,lqr
默认将N
设为 0。
输出参数
K
- 最优增益,闭环系统的最优增益,以大小为n
的行向量形式返回,其中n
为状态数。
S
- 相关代数黎卡提方程的解,相关代数黎卡提方程的解,以n x n
矩阵形式返回,其中n
为状态数。换句话说,S
的维度与状态空间矩阵A
相同。更多信息,请参见 icare 和 idare。
P
- 闭环系统的极点,闭环系统的极点,以大小为n
的列向量形式返回,其中n
为状态数。
局限性
输入数据必须满足以下条件:
一对矩阵 A 和 B 必须是可稳定的。
[ Q , N ; N ′ , R ] [Q,N;N',R] [Q,N;N′,R] 必须是非负定。
R > 0 R>0 R>0 并且 Q − N R − 1 N T ≥ 0. Q-N R^{-1}N^{T}\ge0. Q−NR−1NT≥0.
( Q − N R − 1 N T , A − B R − 1 N T ) (Q-N R^{-1}N^{T},\,A-B R^{-1}N^{T}) (Q−NR−1NT,A−BR−1NT) 在虚轴(或离散时间中的单位圆)上没有不可观测的模式。
提示: lqr 支持非奇异 E 的描述符模型。lqr 的输出 S 是等效显式状态空间模型的代数黎卡提方程的解: d x d t = E − 1 A x + E − 1 B u {\dfrac{d x}{d t}}=E^{-1}A x+E^{-1}B u dtdx=E−1Ax+E−1Bu
LQR 算法
对于连续时间系统,lqr 计算的状态反馈控制 u=-Kx 可使二次成本函数最小化
J ( u ) = ∫ 0 ∞ ( x T Q x + u T R u + 2 x T N u ) d t J(u)=\int_{0}^{\infty}(x^{T}Q x+u^{T}R u+2x^{T}N u)d t J(u)=∫0∞(xTQx+uTRu+2xTNu)dt 系统动力学
x ˙ = A x + B u . {\dot{x}}=A x+B u. x˙=Ax+Bu.除了状态反馈增益 K 之外,lqr 还返回相关代数黎卡提方程的解 S A T S + S A − ( S B + N ) R − 1 ( B T S + N T ) + Q = 0 A^{T}S+S A-(S B+N)R^{-1}(B^{T}S+N^{T})+Q=0 ATS+SA−(SB+N)R−1(BTS+NT)+Q=0 和闭环极点 P = eig(A-BK)。增益矩阵 K 由 S 得出,计算公式为
K = R − 1 ( B T S + N T ) . K=R^{-1}(B^{T}S+N^{T}). K=R−1(BTS+NT). 对于离散时间系统,lqr 可计算状态反馈控制 u n = − K x n u_{n}=-K x_{n} un=−Kxn
最小化 J = ∑ n = 0 ∞ { x T Q x + u T R u + 2 x T N u } J=\sum_{n=0}^{\infty}\{x^{T}Q x+u^{T}R u+2x^{T}N u\} J=n=0∑∞{xTQx+uTRu+2xTNu} 系统动力学
x n + 1 = A x n + B u n x_{n+1}=A x_{n}+B u_{n} xn+1=Axn+Bun在任何情况下,如果省略交叉项矩阵 N,lqr 都会将 N 设为 0。
pendulumModelCart.mat
包含小车上倒立摆的状态空间模型,其输出为小车位移 x
和摆角 θ
,控制输入 u
为小车上的水平力。
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \begin{bmatrix…
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \bm{y}=\begin{…
首先,将状态空间模型 sys 加载到工作区。
load('pendulumCartModel.mat','sys')
由于输出为 x x x 和 θ \theta θ,而输入只有一个,因此使用 Bryson 规则确定 Q
和 R
。
Q = [1,0,0,0;...
0,0,0,0;...
0,0,1,0;...
0,0,0,0];
R = 1;
使用 lqr
求增益矩阵 K
。由于没有指定 N
,lqr 将 N 设为 0。
[K,S,P] = lqr(sys,Q,R)
K = 1×4
-1.0000 -1.7559 16.9145 3.2274
S = 4×4
1.5346 1.2127 -3.2274 -0.6851
1.2127 1.5321 -4.5626 -0.9640
-3.2274 -4.5626 26.5487 5.2079
-0.6851 -0.9640 5.2079 1.0311
P = 4×1 complex
-0.8684 + 0.8523i
-0.8684 - 0.8523i
-5.4941 + 0.4564i
-5.4941 - 0.4564i
虽然 Bryson 规则通常能提供令人满意的结果,但它通常只是根据设计要求调整闭环系统响应的试错迭代设计程序的起点。
reg = lqg(sys,QXU,QWV)
reg = lqg(sys,QXU,QWV,QI)
reg = lqg(sys,QXU,QWV,QI,'1dof')
reg = lqg(sys,QXU,QWV,QI,'2dof')
reg = lqg(___,'current')
[reg,info] = lqg(___)
说明
reg = lqg(sys,QXU,QWV)
给定一个被控对象的状态空间模型sys
以及权重矩阵QXU
和
QWV
,计算出一个最优线性二次高斯(LQG)调节器reg
。动态调节器reg
利用测量值y
生成控制信号u
,将
y
调节到零值附近。使用正反馈将该调节器与被控对象的输出y
连接起来。LQG 调节器使成本函数最小化
J = E { * l i m τ → ∞ 1 τ ∫ 0 τ [ x T , u T ] Q x u [ x u ] d t } J=E\left\{\operatorname*{lim}_{\tau\rightarrow\infty}\frac{1}{\tau}\int_{0}^{\tau}[x^{T},u^{T}]Q x u\begin{bmatrix} x \\ u \end{bmatrix}d t\right\} J=E{*limτ→∞τ1∫0τ[xT,uT]Qxu[xu]dt}受被控对象方程的约束
d x / d t = A x + B u + w y = C x + D u + ν \begin{array}{c}{{d x/d t=A x+B u+w}}\\ {{y=C x+D u+\nu}}\end{array} dx/dt=Ax+Bu+wy=Cx+Du+ν
其中,过程噪声 w 和测量噪声 v 均为具有协方差的高斯白噪声:
KaTeX parse error: Undefined control sequence: \cal at position 95: …rime}]\right)={\̲c̲a̲l̲ ̲Q}{\cal W}V
reg = lqg(sys,QXU,QWV,QI)
使用设定点指令r
和测量值y
来生成控制信号u
。LQG 伺服控制器可使成本函数最小化
J = E { * l i m τ → ∞ 1 τ ∫ 0 τ ( [ x T , u T ] Q x u ∣ u x ∣ + x i T Q i x i ) d t } J=E\left\{\operatorname*{lim}_{\tau\rightarrow\infty}\frac{1}{\tau}\int_{0}^{\tau}\left([x^{T},u^{T}]Q x u\biggl|_{u}^{x}\biggr|+x_{i}^{T}Q_i x_{i}\right)d t\right\} J=E{*limτ→∞τ1∫0τ([xT,uT]Qxu∣∣∣∣ux∣∣∣∣+xiTQixi)dt}
对于多输入多输出系统,
r
、y
和 x i x_i xi 的长度必须相同。
reg = lqg(sys,QXU,QWV,QI,'1dof')
计算以e = r - y
而不是[r ; y]
作为输入的一自由度伺服控制器。
reg = lqg(sys,QXU,QWV,QI,'2dof')
等价于
LQG(sys,QXU,QWV,QI)
,并产生前面显示的二自由度伺服控制器。
reg = lqg(____,'current')
使用 "current
"卡尔曼估计器,该估计器在计算离散时间系统的 LQG
调节器时使用x[n|n]
作为状态估计值。
[reg,info] = lqg(____)
返回前面任何语法结构info
中的控制器和估计器增益矩阵。例如,您可以使用控制器和估计器增益以观测器形式实现控制器。更多信息,请参阅算法。
线性-二次高斯 (LQG) 调节器和伺服控制器设计
本例介绍如何为以下系统设计线性二次高斯(LQG)调节器、一自由度 LQG 伺服控制器和二自由度 LQG 伺服控制器。
被控对象有三个状态 (x
)、两个控制输入 (u
)、三个随机输入 (w
)、一个输出 (y
)、输出的测量噪声 (v
),以及以下状态方程和测量方程。
d x d t = A x + B u + w y = C x + D u + ν \dfrac{d x}{d t}=A x+B u+w \\ y=C x+D u+\nu dtdx=Ax+Bu+wy=Cx+Du+ν
A = [ 0 1 0 0 0 1 1 0 0 ] B = [ 0.3 1 0 1 − 0.3 0.9 ] \begin{array}{r l}{A={\left[\begin{array}{l l l}{0}&{1}&{0}\\ {0}&{0}&{1}\\ {1}&{0}&{0}\end{array}\right]}}&{{}B={\left[\begin{array}{l l}{0.3}& {1}\\ 0& 1 \\ {-0.3} &{0.9}\end{array}\right]}}\end{array} \\ A=⎣⎡001100010⎦⎤B=⎣⎡0.30−0.3110.9⎦⎤ C = [ 1.9 1.3 1 ] D = [ 0.53 − 0.61 ] C=\left[1.9\quad\ 1.3\quad\ 1\right]\quad D=\left[0.53-0.61\right] C=[1.9 1.3 1]D=[0.53−0.61]
系统的噪声协方差数据如下
Q n = E ( w w T ) = [ 4 2 0 2 1 0 0 0 1 ] Q n=E(w w^{T})=\left[{\begin{array}{c c c}{4}&{2}&{0}\\ {2}&{1}&{0}\\ {0}&{0}&{1}\end{array}}\right] Qn=E(wwT)=⎣⎡420210001⎦⎤
R n = E ( ν ν T ) = 0.7 R_{n}=E(\nu\nu^{T})=0.7 Rn=E(ννT)=0.7
对于调节器,使用以下成本函数来定义调节性能和控制输入之间的权衡:
J ( u ) = ∫ 0 ∞ ( 0.1 x T x + u T [ 1 0 0 2 ] u ) d t J(u)=\int_{0}^{\infty}(0.1x^{T}x+u^{T}\begin{bmatrix} 1&0 \\ 0&2 \end{bmatrix}u)d t J(u)=∫0∞(0.1xTx+uT[1002]u)dt
对于伺服控制器,使用以下成本函数来定义跟踪器性能和控制力之间的权衡:
J ( u ) = ∫ 0 ∞ ( 0.1 x T x + x i 2 + u T [ 1 0 0 2 ] u ) d t J(u)=\int_{0}^{\infty}(0.1x^{T}x+x_{i}^{2}+u^{T}\begin{bmatrix} 1&0 \\ 0&2 \end{bmatrix}u)d t J(u)=∫0∞(0.1xTx+xi2+uT[1002]u)dt
为该系统设计 LQG 控制器:
A = [0 1 0;0 0 1;1 0 0];
B = [0.3 1;0 1;-0.3 0.9];
C = [1.9 1.3 1];
D = [0.53 -0.61];
sys = ss(A,B,C,D);
nx = 3; %Number of states
ny = 1; %Number of outputs
Qn = [4 2 0; 2 1 0; 0 0 1];
Rn = 0.7;
R = [1 0;0 2]
QXU = blkdiag(0.1*eye(nx),R);
QWV = blkdiag(Qn,Rn);
QI = eye(ny);
KLQG = lqg(sys,QXU,QWV)
This command returns the following LQG regulator:
A =
x1_e x2_e x3_e
x1_e -6.212 -3.814 -4.136
x2_e -4.038 -3.196 -1.791
x3_e -1.418 -1.973 -1.766
B =
y1
x1_e 2.365
x2_e 1.432
x3_e 0.7684
C =
x1_e x2_e x3_e
u1 -0.02904 0.0008272 0.0303
u2 -0.7147 -0.7115 -0.7132
D =
y1
u1 0
u2 0
Input groups:
Name Channels
Measurement 1
Output groups:
Name Channels
Controls 1,2
Continuous-time model.
KLQG1 = lqg(sys,QXU,QWV,QI,'1dof')
This command returns the following LQG servo controller:
A =
x1_e x2_e x3_e xi1
x1_e -7.626 -5.068 -4.891 0.9018
x2_e -5.108 -4.146 -2.362 0.6762
x3_e -2.121 -2.604 -2.141 0.4088
xi1 0 0 0 0
B =
e1
x1_e -2.365
x2_e -1.432
x3_e -0.7684
xi1 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 =
e1
u1 0
u2 0
Input groups:
Name Channels
Error 1
Output groups:
Name Channels
Controls 1,2
Continuous-time model.
KLQG2 = lqg(sys,QXU,QWV,QI,'2dof')
This command returns the following LQG servo controller:
A =
x1_e x2_e x3_e xi1
x1_e -7.626 -5.068 -4.891 0.9018
x2_e -5.108 -4.146 -2.362 0.6762
x3_e -2.121 -2.604 -2.141 0.4088
xi1 0 0 0 0
B =
r1 y1
x1_e 0 2.365
x2_e 0 1.432
x3_e 0 0.7684
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.
小贴士
lqg
可用于连续时间和离散时间被控对象。在离散时间情况下,lqg
默认使用x[n|n-1]
作为状态估计值。要使用x[n|n]
作为状态估计并计算最优 LQG 控制器,请使用 "current
"输入参数。有关状态估计器的详细信息,请参见
kalman
。计算
LQG
调节器时,lqg 使用 lqr 和kalman
命令。要计算伺服控制器,lqg
使用lqi
和kalman
命令。如果希望更灵活地设计调节器,可以使用
lqr
、kalman
和lqgreg
命令。在设计伺服控制器时,如果需要更大的灵活性,可以使用lqi
、kalman
和lqgtrack
命令。有关使用这些命令以及如何决定何时使用这些命令的更多信息,请参阅线性-二次方-高斯 (LQG)
调节设计和带积分动作的伺服控制器的线性-二次方-高斯 (LQG) 设计。
LQG 算法
控制器方程为
- 对于连续时间: d x e = A x e + B u + L ( y − C x e − D u ) u = − K x e − K i x i d x_e=A x_e+B u+L(y-C x_e-D u) \\ u=-K x_e-K_i x_i dxe=Axe+Bu+L(y−Cxe−Du)u=−Kxe−Kixi
- 对于离散时间: x [ n + 1 ∣ n ] = A x [ n ∣ n − 1 ] + B u [ n ] + L ( y [ n ] − C x [ n ] n − 1 ] − D u [ n ] ) x[n+1|n]=A x[n|n-1]+B u[n]+L(y[n]-C x[n]n-1]-D u[n]) x[n+1∣n]=Ax[n∣n−1]+Bu[n]+L(y[n]−Cx[n]n−1]−Du[n])
- 延迟估计器: u [ n ] = − K x x [ n ] n − 1 ] − K i x i [ n ] u[n]=-K_{x}x[n]n-1]-K_{i}x_{i}[n] u[n]=−Kxx[n]n−1]−Kixi[n]
- 目前的估算器: u [ n ] = − K x x [ n ] n ] − K i x i [ n ] − K w w [ n ] = − K x x [ n ] n − 1 ] − K i x i [ n ] − ( K x M x + K w M w ) y i n n [ n ] {u[n]=-K_{x}x[n]n]-K_{i}x_{i}[n]-K_{w}w[n]=-K_{x}x[n]n-1]-K_{i}x_{i}[n]-(K_{x}M_{x}+K_{w}M_{w})y_{ i n n}[n]} u[n]=−Kxx[n]n]−Kixi[n]−Kww[n]=−Kxx[n]n−1]−Kixi[n]−(KxMx+KwMw)yinn[n] y i n n [ n ] = y [ n ] − C x [ n ] n − 1 ] − D u [ n ] y_{i n n}[n]=y[n]-C x[n]n-1]-D u[n] yinn[n]=y[n]−Cx[n]n−1]−Du[n]
这里
A、B、C 和 D 是 LQG 调节器的状态空间矩阵,reg.
x i x_i xi 是跟踪误差 r - y 的积分。
K x K_x Kx、 K w K_w Kw、 K i K_i Ki、L、 M x M_x Mx 和 M w M_w Mw 是信息中返回的控制器和估计器增益矩阵。