状态反馈控制与状态观测器设置以及利用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])
在这里插入图片描述

### 回答1: PSPICE 17.2 是一种用于电子电路仿真和分析的软件工具。下面是一份简单的 PSpice 17.2 使用初级教程: 1. 安装和启动:首先,你需要下载并安装 PSpice 17.2 软件。安装完成后,双击图标启动软件。 2. 创建电路:在软件界面上,选择“文件”>“新建”,然后在电路编辑器中创建你的电路。你可以从元件库中选择组件,并将其拖放到画布上。连接元件的引脚以构建电路。 3. 设置元件参数:双击元件以打开元件参数设置对话框。在对话框中,设置元件的值、名称和其他参数。对于电阻、电容等基本元件,可以直接输入数值。 4. 设置仿真配置:选择“仿真”>“设置和校验”,然后在仿真设置对话框中选择仿真的类型和参数。你可以选择直流分析、交流分析、暂态分析等。设置仿真参数后,点击“确定”。 5. 运行仿真:选择“仿真”>“运行”来启动仿真。在仿真过程中,软件将模拟电路的响应,并将结果输出到仿真波形窗口中。 6. 查看仿真结果:在仿真波形窗口中,你可以查看各个元件的电流、电压等参数随时间变化的波形。你还可以对波形进行放大、缩小、平移等操作,以更详细地分析电路的性能。 7. 保存和导出结果:在仿真过程中,你可以选择将结果保存为文件或导出为其他格式,如图像文件或数据文件。 以上是 PSpice 17.2 使用初级教程的基本步骤。随着实践的深入,你可以进一步了解复杂电路的建模和分析方法,并尝试更高级的功能和技术。 ### 回答2: PSPICE 17.2是一款电子电路仿真软件,用于对电路进行分析和验证。以下是PSPICE 17.2的使用初级教程: 1. 下载和安装:在官方网站上下载PSPICE 17.2并进行安装。 2. 组件库:打开PSPICE软件后,点击“Capture CIS”图标,进入组件库界面。选择适当的电子元件,如电阻、电容、二极管等,将它们拖放到画布上。 3. 电路连接:在画布上拖放所需元件后,使用导线工具连接它们。点击导线图标,选择合适的连接方式,并将其拖动到适当的端口上。 4. 参数设定:双击元件,弹出元件属性对话框。在这里设置元件的数值,例如电阻的阻值、电容的电容值等。 5. 电源设置:在画布上点击右键,选择“Power Sources”,然后选择适当的电源,如直流电源或交流电源。设置电源的电压或电流数值。 6. 仿真设置:点击画布上方的“PSpice”选项,选择“Edit Simulation Profile”打开仿真配置对话框。在仿真配置中,设置仿真参数,如仿真类型(直流、交流、脉冲等)、仿真时间等。 7. 仿真运行:在仿真配置对话框中点击“Run”按钮,开始进行电路仿真运行。仿真完成后,可以查看并分析仿真结果,如电流、电压、功率等。 8. 结果分析:通过菜单栏中的“PSpice>Probe”选项,打开特定信号的仿真结果。通过选择信号节点,可以显示该信号的波形、幅值和频谱等信息。 9. 数据输出:仿真结束后,可以通过“PSpice>Results”菜单栏选项,导出仿真结果到文本文件,以供后续分析。 10. 误差调整:如果仿真结果预期不符,可以检查电路连接、元件参数等以找出问题。根据需要进行调整,重新运行仿真以验证改进效果。 以上就是PSPICE 17.2使用初级教程的简要介绍。在使用过程中,请参考软件的帮助文件和官方文档,以获取更详细的指导和解决方法。任何新的软件都需要不断的实践和尝试,希望这个教程能对你有所帮助。 ### 回答3: PSPICE 17.2是一款常用的电路仿真软件,用于电路设计和分析。下面是一个简要的PSPICE 17.2的初级教程: 1. 下载和安装:首先,从官方网站下载PSPICE 17.2,并按照安装向导进行安装。安装完成后,打开软件。 2. 创建新工程:在PSPICE 主界面上,点击“File”菜单,然后选择“New Project”来创建一个新的工程。给工程起一个适当的名字,并选择工程的存储位置。 3. 添加电路元件:在工程界面上,点击“Place”图标,然后选择不同的元件来构建你的电路。你可以从库中选择各种电子元件,如电阻、电容、电感等,并将它们拖放到工程界面上。 4. 连接元件:选择“Wire”图标,然后点击元件的引脚来连接它们。确保连接顺序正确,以保证电路的正确性。 5. 设置元件参数:对于每个添加的元件,你需要设置它们的参数。右键点击元件,选择“Edit Propertiess”,然后在弹出的窗口中输入适当的参数值。 6. 添加电源:在电路中添加电源,以提供电路所需的电能。选择“Place”图标,然后选择合适的电源元件并将其拖放到电路中。同样,设置电源的参数值。 7. 设置仿真配置:在工程界面上,点击“PSpice”菜单,然后选择“Edit Simulation Profile”来设置仿真配置参数。你可以选择仿真类型、仿真时间和仿真步长等。 8. 运行仿真:点击“PSpice”菜单,选择“Run”来运行仿真。PSPICE将自动运行仿真并显示结果。 9. 分析和优化:根据仿真结果,可以分析和优化电路的性能。你可以观察电流、电压和功率等参数,以评估电路的性能,并根据需要进行调整。 10. 保存和导出结果:在分析和优化完成后,可以保存你的工程并导出结果。点击“File”菜单,选择“Save Project”来保存工程,然后选择“Outut”菜单,选择“Export”来导出结果。 以上是PSPICE 17.2的初级教程的简要介绍。通过以上步骤,你可以开始使用PSPICE 17.2进行电路设计和仿真。在实践中不断探索和学习,你将成为一个熟练的PSPICE用户。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值