状态反馈控制与状态观测器设置以及利用LQR方法求取状态反馈矩阵

状态反馈控制与状态观测器设置以及利用LQR方法求取状态反馈矩阵

文章是对现代控制理论控制器设计以及状态观测器设计部分的总结,面向对象是有一定基础现代控制基础的读者,偏重现在控制理论在配合matlab的应用,其中涉及到一些推导过程是为了给自己做笔记用的。

基于状态反馈的极点配置

对于开环系统有: x ˙ = A x \dot{x}= Ax x˙=Ax
对于闭环系统有: x ˙ = A x + B u \dot{x} = Ax+Bu x˙=Ax+Bu ; 其中 u = − K x u = - Kx u=Kx
因为系统的输入,状态变化都跟系统的状态有关了,因此,系统的闭环的。
然后有 x ˙ = ( A − B K ) x = A c x \dot{x} = (A-BK)x= A_cx x˙=(ABK)x=Acx.根据 ∣ A − B K ∣ \begin{vmatrix}A−BK\end{vmatrix} ABK根据不同的 k k k向量可以得到不同的特征值 λ \lambda λ,即系统的特征根,选择合适的 K K K矩阵达到任意配置极点的目的(系统完全能控,输入u不受限)。选择不同的 λ \lambda λ,改变Ac的特征值,就相当于改变系统的变化路径。根据需求设置不同的 λ \lambda λ可以求得对应的反馈矩阵 K K K.
使用matlab函数 K = a c k e r ( A , B , J ) K = acker(A,B,J) K=acker(A,B,J) 可以非常方便地求得状态反馈矩阵,其中 J J J是系统极点地期望值向量。

LQR控制器

较短的调节速度和较少的能耗是互相矛盾,LQR控制器是在控制指标已知,控制系统的反馈参数可以使用LQR方法求得,下面举例说明:

设有状态方程:
[ x 1 ˙ x 2 ˙ ] = [ 0 1 g l 0 ] [ x 1 x 2 ] + [ 0 − 1 ] u \begin{bmatrix} \dot{x_1} \\ \dot{x_2} \end{bmatrix} = \begin{bmatrix} 0&1 \\ \frac{g}{l}&0 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} + \begin{bmatrix} 0 \\ -1 \end{bmatrix}u [x1˙x2˙]=[0lg10][x1x2]+[01]u

[ x 1 ˙ x 2 ˙ ] = [ 0 0 ] \begin{bmatrix} \dot{x_1} \\ \dot{x_2} \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} [x1˙x2˙]=[00]
得到
[ x 1 x 2 ] = [ 0 0 ] \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} 0 \\ 0 \end{bmatrix} [x1x2]=[00]
也就是最后系统最后会平衡在(0,0)点。

引入目标函数
J ( z ) = ∫ 0 t ( x T Q x + u T R u ) d t   . J(z) = \int_0^t (x^{T}Qx + u^TRu)dt\,. J(z)=0t(xTQx+uTRu)dt.
积分的前一项说明了对控制变量的变化的要求,后一项说明的是在满足要求的同时,又能使控制的输出最小。
其中Q为如下,且a,b,c均为正值。
[ a b ] \begin{bmatrix} a& \\ & b \end{bmatrix} [ab]

其中a,b,R的值都是根据需求设定的,如果我们希望在较少的时间内达到控制目的,可以令Q = [100,0;0,1],R = 0.1,可以使用matlab算出K =[-43.1662 -9.8149];如果我们希望消耗较少的能量达到控制目的,则可以设Q = [1,0;0,1],R = 10,算出K=[-20.0050 -6.3332],将参数带入仿真模型中可以得到下面的结果。

在这里插入图片描述
不难理解的是,较短的调节速度和较少的能耗是两个互相矛盾的要素,他们之间只能作一个调和仿真中也真反映了这种观点。值得注意的是,只有完全能控的系统才能作上面的操作,并不是所有系统都可以这么做,系统完全能控的判别条件即 R a n k ( Q c ) = n Rank(Q_c) = n Rank(Qc)=n,其中 Q c = [ b A B . . . A n − 1 B ] Q_c = \begin{bmatrix}b & AB & ... & A^{n-1}B \end{bmatrix} Qc=[bAB...An1B]
在这里插入图片描述

系统稳定点设置

如果希望把稳态点定在 x 1 e x p = 0.1 x_{1exp} = 0.1 x1exp=0.1的地方,可以令
e = x 1 e x p − x 1 e = x_{1exp} - x_1 e=x1expx1

e ˙ = − x 1 ˙ = − x 2 \dot{e} = -\dot{x_1} =-x_2 e˙=x1˙=x2
从而我们得到新的状态方程(系统只能用状态方程表示,而状态反馈控制作为唯一地手段只能使得方程中的状态的变化为零,设计控制器使得 x 1 → x 1 e x p x_1→x_{1exp} x1x1exp首先要满足 e e e的终止为0)
[ e ˙ x 2 ˙ ] = [ 0 − 1 − g l 0 ] [ e x 2 ] + [ 0 − 1 ] u + [ 0 g l x 1 e x p ] \begin{bmatrix} \dot{e} \\ \dot{x_2} \end{bmatrix} = \begin{bmatrix} 0 & -1\\ -\frac{g}{l} & 0 \end{bmatrix} \begin{bmatrix} e\\ x_2 \end{bmatrix}+ \begin{bmatrix} 0\\ -1 \end{bmatrix}u +\begin{bmatrix} 0\\ \frac{g}{l} x_{1exp} \end{bmatrix} [e˙x2˙]=[0lg10][ex2]+[01]u+[0lgx1exp]
但是我们发现这个状态方程的稳定值是
[ e f x 2 f ] = [ g l x 1 e x p 0 ] \begin{bmatrix} e_f \\ x_{2f} \end{bmatrix} = \begin{bmatrix} \frac{g}{l}x_{1exp} \\ 0 \end{bmatrix} [efx2f]=[lgx1exp0]
与预期的目标值不一致,于是,我们可以把控制器分为两个部分:
1、稳定系统的部分;
2、调节平衡点的部分。
u = u 1 + u 2 u = u_1 + u_2 u=u1+u2
其中
{ u 1 = [ k 1 k 2 ] [ e x 2 ] u 2 = − g l x 1 e x p \begin{cases} u_1 = \begin{bmatrix} k_1 &k_2 \end{bmatrix} \begin{bmatrix} e\\ x_2 \end{bmatrix} \\ u_2 = -\frac{g}{l}x_{1exp} \end{cases} u1=[k1k2][ex2]u2=lgx1exp
代入方程得到
[ e ˙ x 2 ˙ ] = [ 0 − 1 − g l + k 1 k 2 ] [ e x 2 ] \begin{bmatrix} \dot{e}\\ \dot{x_2} \end{bmatrix} = \begin{bmatrix} 0 & -1\\ -\frac{g}{l} + k_1 & k_2 \end{bmatrix} \begin{bmatrix} e\\ x_2 \end{bmatrix} [e˙x2˙]=[0lg+k11k2][ex2]
然后我们设 λ 1 = λ 2 = − 1 λ_1 = λ_2 = -1 λ1=λ2=1得到 k 1 = 1 + g / l , k 2 = − 2 k_1 = 1 + g/l,k_2 = -2 k1=1+g/lk2=2.
实际上,得到上面的式子以后,我们也可以按照LQR的控制器的设计方法,设计一个合适的状态反馈 u 1 u_1 u1,最后求得 u u u作为最终的反馈式。

状态不可测

我们曾经假设u = - λx,此时便默认x是可测的,当x未知的时候,我们就不可能对系统作状态反馈,此时可以设计一个状态观测器,根据系统输出来估计状态。所谓状态观测器,其实就是根据系统的输入和输出来估计系统的状态。

状态观测器

x ^ \hat {x} x^ x x x (状态)的估计值, y ^ \hat{y} y^ y y y (输出)的估计值
系统的状态方程和输出方程为
{ x ^ ˙ = A x ^ + B u + G ( y − y ^ ) y ^ = C x ^ + D u \begin{cases} \dot{\hat{x}} = A\hat{x} + Bu + G(y - \hat{y}) \\ \hat{y} = C\hat{x} + Du\end{cases} {x^˙=Ax^+Bu+G(yy^)y^=Cx^+Du

综合系统的状态方程和输出方程,有状态观测器( x ^ ˙ \dot{\hat{x}} x^˙关于 x ^ \hat{x} x^的表达式):
x ^ ˙ = ( A − G C ) x ^ + ( B − G D ) u + G y \dot{\hat{x}} = (A-GC)\hat{x} + (B-GD)u + Gy x^˙=(AGC)x^+(BGD)u+Gy

观测值必须满足收敛于实际值,综合状态观测器和状态方程可以得出:
e ˙ x = x ˙ − x ^ ˙ = ( A − G C ) ( x − x ^ ) = ( A − G C ) e x \dot{e}_x = \dot{x} - \dot{\hat{x}} = (A-GC)(x - \hat{x}) = (A-GC)e_x e˙x=x˙x^˙=(AGC)(xx^)=(AGC)ex

也就是估计误差 e x ˙ → 0 \dot{e_x}→ 0 ex˙0,只需 ( A − G C ) (A-GC) (AGC)的特征值的实部等于0,只需找到一个G使得 ( A − G C ) (A-GC) (AGC)的特征值的实部等于0,这里特征值需要人为设定(系统能观就一定能找到)。
如果系统可观,则 R a n k ( Q o ) = n Rank(Q_o ) = n Rank(Qo)=n,其中 Q o Q_o Qo为:
Q o = [ C C A . . . C A n − 1 ] Q_o = \begin{bmatrix}C\\ CA \\ ... \\ CA^{n-1} \end{bmatrix} Qo=CCA...CAn1

比如:有状态方程和输出方程:
x ˙ = [ 0 1 2 − 1 ] x + [ 0 1 ] u \dot{x} = \begin{bmatrix} 0 & 1\\ 2 & -1 \end{bmatrix} x + \begin{bmatrix} 0 \\ 1 \end{bmatrix}u x˙=[0211]x+[01]u
y = [ − 1 1 ] x y = \begin{bmatrix} -1 & 1 \end{bmatrix}x y=[11]x

其中 Q o = [ − 1 1 2 − 2 ] Q_o = \begin{bmatrix} -1 & 1\\ 2 & -2 \end{bmatrix} Qo=[1212]

R a n k ( Q o ) = 1 ≠ 2 Rank(Q_o ) = 1 ≠2 Rank(Qo)=1=2,则系统不完全可观。

状态观测器的应用

例如,在经典的弹簧阻尼系统中设 x 1 = x ,   x 2 = v x_1=x,\space x_2 =v x1=x, x2=v, 弹簧的劲度系数为 k k k,阻尼系数为 b b b,物块质量为 m m m,则可建立状态方程
x ˙ = [ 0 1 − k m − b m ] x + [ 0 1 m ] u \dot{x} = \begin{bmatrix} 0 & 1\\ -\frac{k}{m} & -\frac{b}{m} \end{bmatrix} x + \begin{bmatrix} 0 \\ \frac{1}{m} \end{bmatrix}u x˙=[0mk1mb]x+[0m1]u
y = [ 1 0 ] x y = \begin{bmatrix} 1 & 0 \end{bmatrix}x y=[10]x

令m = 1, b = 0.5, k = 1,得到:
x ˙ = [ 0 1 − 1 − 0.5 ] x + [ 0 1 ] u \dot{x} = \begin{bmatrix} 0 & 1\\ -1 & -0.5 \end{bmatrix} x + \begin{bmatrix} 0 \\ 1 \end{bmatrix}u x˙=[0110.5]x+[01]u
y = [ 1 0 ] x y = \begin{bmatrix} 1 & 0 \end{bmatrix}x y=[10]x
求得 R a n k ( Q o ) = 2 Rank(Q_o) = 2 Rank(Qo)=2
设观测器的极点 λ 0 = λ 1 \lambda_0=\lambda_1 λ0=λ1,有
{ g 1 + 0.5 = − 2 λ 0 0.5 g 1 − g 2 − 1 = λ 0 2 \begin{cases} g_1 + 0.5= -2\lambda_0\\ 0.5g_1-g_2 - 1= \lambda_0^2 \end{cases} {g1+0.5=2λ00.5g1g21=λ02
λ 0 = λ 1 = − 1 \lambda_0=\lambda_1 =-1 λ0=λ1=1

解得 g = [ 1.5 − 0.75 ] T g=\begin{bmatrix} 1.5 & -0.75\end{bmatrix}^T g=[1.50.75]T 通过改变

也可以使用matlab函数 G = a c k e r ( A ′ , C ′ , V ) ′ G= acker(A',C',V)' G=acker(A,C,V)直接算得反馈矩阵G,其中V为特征根组成的向量。

根据: x ^ ˙ = ( A − G C ) x ^ + ( B − G D ) u + G y \dot{\hat{x}} = (A-GC)\hat{x} + (B-GD)u + Gy x^˙=(AGC)x^+(BGD)u+Gy λ 0 , λ 1 \lambda_0,\lambda_1 λ0,λ1的值,可以改变状态观测器的收敛速率。

综合以上结果,可以得到 x ^ ˙ = [ − 1.5 1 − 0.25 − 0.5 ] x + [ 0 1 ] u + [ 1.5 − 0.75 ] y \dot{\hat{x}} = \begin{bmatrix} -1.5 & 1 \\ -0.25 & -0.5 \end{bmatrix} x + \begin{bmatrix} 0 \\ 1 \end{bmatrix}u + \begin{bmatrix} 1.5 \\ -0.75 \end{bmatrix}y x^˙=[1.50.2510.5]x+[01]u+[1.50.75]y
建立仿真模型,仿真10s。
仿真

建立matlab仿真,并给状态观测器一个初始的估计误差,可以看到,状态观测器最终会收敛于真实值。
在这里插入图片描述

控制器与观测器分离原理

设系统是完全能控完全能观的,系统的状态是不能测量的。
首先,我们要实际观测器:
{ x ^ ˙ = A x ^ + B u + G ( y − y ^ ) e ˙ = ( A − G C ) e x \begin{cases} \dot{\hat{x}} = A\hat{x} + Bu + G(y - \hat{y}) \\ \dot{e} = (A-GC)e_x\end{cases} {x^˙=Ax^+Bu+G(yy^)e˙=(AGC)ex
其中1式是状态观测器的表达式,其中含有u,y是为了利用输入输出估计状态;2式是状态观测器必须满足的条件,其中出现 e ˙ \dot{e} e˙是为了利用特征矩阵收敛使得误差趋于0。亦即1式是实际要用的,2式是充分条件,根据他可以求得G矩阵。

然后设计控制器:
{ u = − K x ^ x ˙ = A x − B K u \begin{cases} u = -K\hat{x} \\ \dot{x} = Ax-BKu \end{cases} {u=Kx^x˙=AxBKu

其中1式是反馈控制器的表达式,所谓控制器,亦即根据状态反馈确定输入,对系统实现控制,是我们要求的;2式是状态观测器必须满足的条件,是系统收敛的充分条件,根据它可以求得k矩阵。

为了求得G,K作以下证明:
根据定义: x ^ = x − e x \hat{x}=x-e_x x^=xex所以有 x ˙ = ( A − B K ) x + B K e \dot{x} = (A-BK)x+BKe x˙=(ABK)x+BKe
联立:
{ e ˙ = ( A − G C ) e x x ˙ = ( A − B K ) x + B K e \begin{cases} \dot{e} = (A-GC)e_x \\ \dot{x} = (A-BK)x+BKe \end{cases} {e˙=(AGC)exx˙=(ABK)x+BKe

得:
[ e ˙ x ˙ ] = [ ( A − G C ) 0 B K ( A − B K ) ] [ e x ] \begin{bmatrix} \dot{e}\\ \dot{x} \end{bmatrix} = \begin{bmatrix} (A-GC) & 0\\ BK & (A-BK) \end{bmatrix} \begin{bmatrix} e\\ x \end{bmatrix} [e˙x˙]=[(AGC)BK0(ABK)][ex]

即,只需 [ ( A − G C ) 0 B K ( A − B K ) ] \begin{bmatrix} (A-GC) & 0\\ BK & (A-BK) \end{bmatrix} [(AGC)BK0(ABK)]特征值实部都为负即可。求其特征值:
∣ λ I − [ ( A − G C ) 0 B K ( A − B K ) ] ∣ = ∣ [ λ I − ( A − G C ) 0 B K λ I − ( A − B K ) ] ∣ = ∣ ( λ I − ( A − G C ) ) ( λ I − ( A − B K ) ) ∣ \left| \lambda I - \begin{bmatrix} (A-GC) & 0\\ BK & (A-BK) \end{bmatrix} \right| = \left| \begin{bmatrix} \lambda I-(A-GC) & 0\\ BK & \lambda I-(A-BK) \end{bmatrix} \right|= \left| (\lambda I-(A-GC))(\lambda I-(A-BK))\right| λI[(AGC)BK0(ABK)]=[λI(AGC)BK0λI(ABK)]=(λI(AGC))(λI(ABK))
到此便实现了观测器与控制器分离计算。这里需要注意的是状态观测器的收敛速度必须高于控制器的收敛速度。因为我们需要一个准确的估计值才能完成好的控制。

控制器与观测器合并应用

还是上面的弹簧阻尼系统,设计状态反馈和状态观测器。设控制器的极点为(-2,-2),观测器的极点为(-6,-6),使用matlab函数算得 K = [ 3.0000 3.5000 ] K = \begin{bmatrix}3.0000 & 3.5000\end{bmatrix} K=[3.00003.5000] G = [ 11.5 29.25 ] G = \begin{bmatrix}11.5 & 29.25\end{bmatrix} G=[11.529.25],建立仿真模型,仿真4s:
在这里插入图片描述
其中,黄线是实际值,蓝线是估计值,可以看到,系统得稳定速度大大加快。
在这里插入图片描述
值得注意的是,如果想在系统稳定前获得较稳准确的观测值,观器的收敛速度并不宜过快,虽然观测的收敛速度满足比控制器的收敛速度快后并不影响控制器对状态的控制,但是,状态的器过快的收敛速度会使得观测值有一个很大的超调,下面对比控制器相同时,不同观测器对系统的影响。

(左边[-6,-6],右边[-4.5,-4.5])
在这里插入图片描述

  • 11
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Matlab中,可以使用控制系统工具箱提供的函数和命令来求解状态反馈控制器。以下是求解状态反馈的一般步骤: 1. 定义系统模型:首先,需要定义系统的状态空间模型,即系统的状态方程和输出方程。可以使用Matlab的ss函数来创建连续或离散系统的状态空间模型。 2. 设计目标:根据实际需求,设计一个合适的目标反应或控制性能指标,例如过渡过程的稳定性、响应速度等。 3. 设计状态反馈控制器增益:根据系统模型和设计目标,在Matlab中可以使用函数lqr来设计状态反馈控制器的增益矩阵lqr函数需要输入系统模型、加权矩阵Q和R,以及可选的N矩阵。 4. 实施控制器:将计算得到的状态反馈增益矩阵应用到系统中。可以使用Matlab的feedback函数生成一个闭环系统,其中包含了状态反馈控制器。 5. 进行仿真和分析:使用Matlab的sim函数可以对闭环系统进行仿真。可以通过观察仿真结果,分析控制性能是否满足设计目标。 需要注意的是,以上步骤仅为求解状态反馈的一般流程,具体实施过程可能因系统模型的复杂性和设计目标的不同而有所不同。建议在具体操作时,查阅Matlab帮助文档或控制系统工具箱的使用手册,以获得更详细的指导和更多的功能选项。 ### 回答2: 在MATLAB中,我们可以使用控制系统工具箱来进行状态反馈控制的设计和分析。下面是一种使用MATLAB实现状态反馈的基本方法: 首先,我们需要建立系统的状态空间模型。假设我们的系统具有以下状态空间表示形式: x' = Ax + Bu y = Cx + Du 其中,x是系统的状态向量,u是输入向量,y是输出向量,A是系统的状态矩阵,B是输入矩阵,C是输出矩阵,D是传递矩阵。 接下来,我们需要选择合适的状态反馈增益矩阵K,使得系统的状态反馈能够使系统的性能和稳定性达到预期的要求。 使用MATLAB,我们可以使用函数place()来计算状态反馈增益矩阵K。 K = place(A, B, poles) 其中,A和B是系统的状态空间矩阵,poles是我们期望系统的极点位置。place()函数将返回合适的状态反馈增益矩阵K。 然后,我们可以构造一个新的状态空间模型,将状态反馈增益矩阵K引入到系统中: x' = (A - BK)x + Bu y = Cx + Du 使用新的状态空间模型,我们可以进行性能和稳定性分析。 最后,我们可以使用MATLAB控制系统工具箱中提供的函数来进行仿真和分析。 总结起来,MATLAB提供了强大的工具来实现状态反馈控制,我们可以使用place()函数来计算合适的状态反馈增益矩阵K,然后构造新的状态空间模型进行性能和稳定性分析。 ### 回答3: 在MATLAB中,可以使用控制系统工具箱来求解状态反馈控制。以下是求解状态反馈的一般步骤: 1. 首先,你需要创建一个控制系统对象。可以使用“ss”函数或“tf”函数来创建一个连续或离散的状态空间模型。 2. 接下来,你需要选择一个合适的控制策略。通常情况下,状态反馈是基于控制系统的状态变量进行设计的。你可以选择合适的状态变量并组成状态反馈矩阵。 3. 然后,你需要选择一个合适的增益矩阵。增益矩阵将会根据所选的控制策略来进行设计。你可以使用MATLAB的优化工具箱来寻找最优的增益矩阵。 4. 一旦你有了状态反馈矩阵和增益矩阵,你可以使用MATLAB控制系统工具箱中的“feedback”函数来创建一个闭环控制器。该函数将接受原始的控制系统模型、状态反馈矩阵和增益矩阵作为输入,并返回一个新的控制系统对象。 5. 最后,你可以使用“step”函数或“impulse”函数来验证设计的控制器的性能。这些函数可以使用你新得到的控制系统对象进行模拟和分析。 总结而言,在MATLAB中求解状态反馈控制,你需要创建控制系统对象,选择合适的控制策略和增益矩阵,然后使用“feedback”函数创建一个新的闭环控制系统对象,并使用“step”或“impulse”函数验证其性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值