MATLAB 状态空间设计 —— LQG/LQR 和极点配置算法

news2024/12/30 3:05:21

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、相关函数 —— LQG/LQR 和极点配置算法
    • 1.1 LQR —— lqr 函数
      • 1.1.1 函数用法
      • 1.1.2 举例
        • 1.1.2.1 倒摆模型的 LQR 控制
    • 1.2 LQG —— lqg() 函数
      • 1.2.1 函数用法
      • 1.2.2 举例
    • 1.3 极点配置 —— place() 函数
      • 1.3.1 函数用法
      • 1.3.2 示例
        • 1.3.2.1 二阶系统的极点配置设计
        • 1.3.2.2 极点配置观测器设计


前言

状态空间控制设计方法,如 LQG/LQR 和极点配置算法,适用于 MIMO 设计。


一、相关函数 —— LQG/LQR 和极点配置算法

1.1 LQR —— lqr 函数

1.1.1 函数用法

[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 和闭环极点 PQR 分别是状态和输入的权重矩阵。交叉项矩阵 N
在省略时设为零。

[K,S,P] = lqr(A,B,Q,R,N) 使用连续时间状态空间矩阵 AB 计算最佳增益矩阵 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,20000Qn,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,20000Rn,n
这里,m 是输入的个数。

N - 可选的交叉项矩阵,可选的交叉项矩阵,以矩阵形式指定。如果没有指定 Nlqr 默认将 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. QNR1NT0.

  • ( Q − N R − 1 N T ,   A − B R − 1 N T ) (Q-N R^{-1}N^{T},\,A-B R^{-1}N^{T}) (QNR1NT,ABR1NT) 在虚轴(或离散时间中的单位圆)上没有不可观测的模式。

提示: 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=E1Ax+E1Bu

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)R1(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=R1(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。

1.1.2 举例

1.1.2.1 倒摆模型的 LQR 控制

pendulumModelCart.mat 包含小车上倒立摆的状态空间模型,其输出为小车位移 x 和摆角 θ,控制输入 u 为小车上的水平力。
[ x ˙ x ¨ ϕ ˙ ϕ ¨ ] = [ 0 1 0 0 0 − 0.1 3 0 0 0 0 1 0 − 0.5 30 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 2 0 5 ] u \begin{equation} \begin{bmatrix}\dot{x} \\ \ddot{x} \\ \dot{\phi} \\ \ddot{\phi} \end{bmatrix}= \begin{bmatrix} 0 &1& 0& 0 \\ 0&-0.1 &3 &0 \\ 0&0&0&1 \\ 0&-0.5&30&0 \end{bmatrix} \begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+ \begin{bmatrix}0 \\ 2 \\ 0 \\ 5 \end{bmatrix}u \end{equation} x˙x¨ϕ˙ϕ¨ = 000010.100.5030300010 xx˙ϕϕ˙ + 0205 u
y = [ 1 0 0 0 0 0 1 0 ] [ x x ˙ ϕ ϕ ˙ ] + [ 0 0 ] u \begin{equation} \bm{y}=\begin{bmatrix}1&0&0&0 \\ 0&0&1&0 \end{bmatrix}\begin{bmatrix}x \\ \dot{x} \\ \phi \\ \dot{\phi} \end{bmatrix}+\begin{bmatrix}0 \\ 0 \end{bmatrix}u \end{equation} y=[10000100] xx˙ϕϕ˙ +[00]u
首先,将状态空间模型 sys 加载到工作区。

load('pendulumCartModel.mat','sys')

由于输出为 x x x θ \theta θ,而输入只有一个,因此使用 Bryson 规则确定 QR

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 规则通常能提供令人满意的结果,但它通常只是根据设计要求调整闭环系统响应的试错迭代设计程序的起点。

1.2 LQG —— lqg() 函数

1.2.1 函数用法

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 { lim ⁡ τ → ∞ 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τ10τ[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 均为具有协方差的高斯白噪声:

E ( [ w ν ] ⋅ [ w ′        ν ′ ] ) = Q W V E\left(\begin{bmatrix} w \\ \nu \end{bmatrix}\cdot[w^{\prime}\;\;\;\nu^{\prime}]\right)={\cal Q}{\cal W}V E([wν][wν])=QWV

reg = lqg(sys,QXU,QWV,QI) 使用设定点指令 r 和测量值 y 来生成控制信号 u

在这里插入图片描述

LQG 伺服控制器可使成本函数最小化

J = E { lim ⁡ τ → ∞ 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τ10τ([xT,uT]Qxu ux +xiTQixi)dt}

对于多输入多输出系统,ry 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
中的控制器和估计器增益矩阵。例如,您可以使用控制器和估计器增益以观测器形式实现控制器。更多信息,请参阅算法。

1.2.2 举例

线性-二次高斯 (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.300.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.530.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 控制器:

  1. 在 MATLAB 命令窗口中输入以下内容,创建状态空间系统:
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);
  1. 输入以下命令,定义噪声协方差数据和加权矩阵:
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);
  1. 键入以下命令,组建 LQG 调节器:
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.
  1. 键入以下命令,形成单自由度 LQG 伺服控制器:
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.
  1. 输入以下命令,生成二自由度 LQG 伺服控制器:
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 使用 lqikalman 命令。

  • 如果希望更灵活地设计调节器,可以使用 lqrkalmanlqgreg 命令。在设计伺服控制器时,如果需要更大的灵活性,可以使用 lqikalmanlqgtrack
    命令。有关使用这些命令以及如何决定何时使用这些命令的更多信息,请参阅线性-二次方-高斯 (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(yCxeDu)u=KxeKixi
  • 对于离散时间: 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[nn1]+Bu[n]+L(y[n]Cx[n]n1]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]n1]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]n1]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]n1]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 是信息中返回的控制器和估计器增益矩阵。

1.3 极点配置 —— place() 函数

1.3.1 函数用法

K = place(A,B,p)
[K,prec] = place(A,B,p)

说明

极点配置是一种计算最优增益矩阵的方法,用于将闭环极点分配给指定位置,从而确保系统稳定性。闭环极点位置会直接影响上升时间、稳定时间和瞬变振荡等时间响应特性。有关详细信息,请参阅极点配置。
在这里插入图片描述
从图中,假设有以下状态空间形式的线性动态系统:
x ˙ = A x + B u y = C x + D u \begin{array}{c}{{\dot{x}=A x+B u}}\\ {{}}\\ {{y=C x+D u}}\end{array} x˙=Ax+Buy=Cx+Du
对于期望的自共轭闭环极点位置的给定向量 pplace 计算增益矩阵 K,使得状态反馈 u = –Kx 将极点配置在位置 p。换句话说,A - BK 的特征值将匹配 p 的条目(取决于排序)。

K = place(A,B,p) 通过计算状态反馈增益矩阵 K,配置所需的闭环极点 p。被控对象的所有输入都假定为控制输入。
place也适用于多输入系统,并且基于 [1] 中的算法。此算法使用额外的自由度来求一个解,以使闭环极点对于 AB 中的扰动具有最小的敏感度。

[K,prec] = place(A,B,p) 还返回 prec,用于精确估计 A - BK 的特征值与指定位置 p 的匹配程度(prec 可计算实际闭环极点中的精确小数位数)。如果某个非零闭环极点偏离期望位置超出 10%,则系统会发出警告。

输入参数

A — 状态矩阵 状态矩阵,指定为一个 Nx×Nx 矩阵,其中 Nx 是状态数。

B — 输入-状态矩阵 输入-状态矩阵,指定为 Nx×Nu 矩阵,其中 Nx 是状态数,Nu 是输入数。

p — 闭环极点位置 闭环极点位置,指定为长度为 Nx 的向量,其中 Nx 是状态数。换句话说,p 的长度必须与 A 的行大小匹配。闭环极点位置会直接影响上升时间、稳定时间和瞬变振荡等时间响应特性。有关选择极点的示例,请参阅二阶系统的极点配置设计。

如果 p 中某些极点的重数大于 rank(B),则 place 返回错误。

在高阶问题中,选择某些极点位置会导致增益非常大。大增益会带来敏感性问题,这表明在使用极点配置方法时要小心。有关数值测试的结果,请参阅 [2]。

输出参数

K — 最优增益 最优增益或全状态反馈增益,以 Ny×Nx 矩阵形式返回,其中 Nx 是状态数,Ny 是输出数。place 计算增益矩阵
K,使得状态反馈 u = -Kx 将闭环极点配置于位置 p。

当矩阵 A 和 B 为实数时,则 K 为:

  • 实数,前提是 p 具有自共轭性。

  • 复数,前提是极点位置不具有复共轭性。

prec — 指定极点的准确性估计值 指定极点的准确性估计值,以标量形式返回。prec 对比 p
中指定的极点位置来计算实际闭环极点的精确小数位数。

1.3.2 示例

1.3.2.1 二阶系统的极点配置设计

对于此示例,假设有一个具有以下状态空间矩阵的简单二阶系统:
A = [ − 1 − 2 1 0 ] B = [ 2 0 ] C = [ 0 1 ] D = 0 A={\left[\begin{array}{l l}{-1}&{-2}\\ {1}&{0}\end{array}\right]}\quad B={\left[\begin{array}{l l}2\\ {0}\end{array}\right]}\quad C=\left[0\quad1\right]\quad D=0 A=[1120]B=[20]C=[01]D=0
输入矩阵并创建状态空间系统。

A = [-1,-2;1,0];
B = [2;0];
C = [0,1];
D = 0;
sys = ss(A,B,C,D);

计算开环极点并检查开环系统的阶跃响应。

Pol  = pole(sys)
Pol = 2×1 complex

  -0.5000 + 1.3229i
  -0.5000 - 1.3229i
figure(1)
step(sys)
hold on;

在这里插入图片描述

请注意,生成的系统为欠阻尼系统。因此,选择复平面左半部分的实极点来消除振荡。

p = [-1,-2];

使用极点配置求增益矩阵 K,并检查 syscl 的闭环极点。

K = place(A,B,p);
Acl = A-B*K;
syscl = ss(Acl,B,C,D);
Pcl = pole(syscl)
Pcl = 2×1

   -2.0000
   -1.0000

现在,比较闭环系统的阶跃响应。

figure(1)
step(syscl)

在这里插入图片描述

因此,使用极点配置获得的闭环系统是稳定的,具有良好的稳态响应。

请注意,选择远离虚轴的极点可以缩短响应时间,但会减小系统的稳态增益。例如,假设上述系统使用极点 [-2,-3]。

p = [-2, -3];
K2 = place(A,B,p);
syscl2 = ss(A-B*K2,B,C,D);
figure(1);
step(syscl2);

在这里插入图片描述

stepinfo(syscl)
ans = struct with fields:
         RiseTime: 2.5901
    TransientTime: 4.6002
     SettlingTime: 4.6002
      SettlingMin: 0.9023
      SettlingMax: 0.9992
        Overshoot: 0
       Undershoot: 0
             Peak: 0.9992
         PeakTime: 7.7827
stepinfo(syscl2)
ans = struct with fields:
         RiseTime: 1.4130
    TransientTime: 2.4766
     SettlingTime: 2.4766
      SettlingMin: 0.3003
      SettlingMax: 0.3331
        Overshoot: 0
       Undershoot: 0
             Peak: 0.3331
         PeakTime: 4.1216

1.3.2.2 极点配置观测器设计

对于此示例,假设有以下 SISO 状态空间模型:

A = [ − 1 − 0.75 1 0 ] B = [ 1 0 ] C = [ 1 1 ] D = 0 A={\left[\begin{array}{l l}{-1}&{-0.75}\\ {1}&{0}\end{array}\right]}\quad B={\left[\begin{array}{l l}1\\ {0}\end{array}\right]}\quad C=\left[1\quad1\right]\quad D=0 A=[110.750]B=[10]C=[11]D=0

创建由以下状态空间矩阵定义的 SISO 状态空间模型:

创建由以下状态空间矩阵定义的 SISO 状态空间模型:

现在,向被控对象提供一个脉冲,并使用 lsim 对其进行仿真。绘制输出。

N = 250;
t = linspace(0,25,N);
u = [ones(N/2,1); zeros(N/2,1)];
x0 = [1;2];
[y,t,x] = lsim(Plant,u,t,x0);

figure
plot(t,y);
title('Output');

在这里插入图片描述

对于此示例,假设所有状态变量都无法测量,只有输出才能测量。因此,使用这种测量方法设计一个观测器。使用 place 来计算估计器增益,方法是转置 A 矩阵,并用 C’ 代换矩阵 B。对于此实例,将所需的极点位置选为 -2 和 -3。

L = place(A',C',[-2,-3])';

使用估计器增益,依据对偶/分离原理代换状态矩阵,并创建估计的状态空间模型。

At = A-L*C;
Bt = [B,L];
Ct = [C;eye(2)];
sysObserver = ss(At,Bt,Ct,0);

使用相同的脉冲输入对系统的时间响应进行仿真。

[observerOutput,t] = lsim(sysObserver,[u,y],t);
yHat = observerOutput(:,1);
xHat = observerOutput(:,[2 3]);

比较实际系统和估计系统的响应。

figure;
plot(t,x);
hold on;
plot(t,xHat,'--');
legend('x_1','x_2','xHat_1','xHat_2')
title('Comparison - Actual vs. Estimated');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法】复习搜索与图论

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙请不要相信胜利就像山坡上的蒲公英一样唾手…

Spring Task使用介绍

文章目录 Spring Task介绍cron表达式入门案例Spring Task使用步骤全注解的方式代码开发测试结果 代码仓库 Spring Task 介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位定时任务框架 作用定时自动执行某段Java…

36、Flink 的 Formats 之Parquet 和 Orc Format

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

NewStarCTF2023 Reverse方向Week3 ez_chal WP

分析 题目&#xff1a;ez_chal 一个XTEA加密&#xff0c; V6是key&#xff0c;v5是输入&#xff0c;然后v7就是密文。 看了v6&#xff0c;要用动调。 ELF文件用ida的远程调试。 然后在kali上输入长度为32的flag 全部转换成dd 再提取密文。 EXP #include <stdio.h>…

详解如何使用Jenkins一键打包部署SpringBoot项目

目录 1、Jenkins简介 2、Jenkins的安装及配置 2.1、Docker环境下的安装​编辑 2.2、Jenkins的配置 3、打包部署SpringBoot应用 3.1、在Jenkins中创建执行任务 3.2、测试结果 1、Jenkins简介 任何简单操作的背后&#xff0c;都有一套相当复杂的机制。本文将以SpringBoot应…

Docker安装MinIO遇到的(汇总——持续更新中)

文章目录 Docker安装MinIO遇到的坑前言问题1&#xff1a;执行docker run报错Error response from daemon问题2&#xff1a;启动MinIO容器浏览器无法访问问题3&#xff1a;上传文件报错InvalidResponseException问题4&#xff1a;上传文件报错Connection refused最终的启动指令问…

锐捷练习-ospf虚链路及rip路由相互引入

一、相关知识补充 1、ospf基本概述 OSPF&#xff08;Open Shortest Path First&#xff09;是一种链路状态路由协议&#xff0c;用于在计算机网络中进行路由选择。它是内部网关协议&#xff08;IGP&#xff09;之一&#xff0c;常用于大规模企业网络或互联网服务提供商的网络…

修改服务器端Apache默认根目录

目标&#xff1a;修改默认Apache网站根目录 /var/www/html 一、找到 DocumentRoot “/var/www/html” 这一段 apache的根目录&#xff0c;把/var/www/html 这个目录改 #DocumentRoot "/var/www/html" DocumentRoot "/home/cloud/tuya_mini_h5/build" 二、…

Resolume Arena 7.15.0(VJ音视频软件)

Resolume Arena 7是一款专业的实时视觉效果软件&#xff0c;用于创造引人入胜的视频演出和灯光秀。它提供了丰富多样的功能和工具&#xff0c;可以将音频、视频和图像合成在一起&#xff0c;创造出令人惊叹的视觉效果。 Resolume Arena 7支持多种媒体格式&#xff0c;包括视频文…

C语言的动态内存管理

目录 一、malloc函数 二、free函数 三、calloc函数 四、realloc函数 五、realloc函数原地扩容和异地扩容测试 六、动态内存管理的注意事项 一、malloc函数 1.头文件&#xff1a;stdlib.h&#xff08;malloc.h&#xff09; 2.函数原型&#xff1a;void * malloc(size_t siz…

春秋云境靶场CVE-2021-41402漏洞复现(任意代码执行漏洞)

文章目录 前言一、CVE-2021-41402描述二、CVE-2021-41402漏洞复现1、信息收集1、方法一弱口令bp爆破2、方法二7kb扫路径&#xff0c;后弱口令爆破 2、找可能可以进行任意php代码执行的地方3、漏洞利用找flag 总结 前言 此文章只用于学习和反思巩固渗透测试知识&#xff0c;禁止…

【ROS导航Navigation】五 | 导航相关的消息 | 地图 | 里程计 | 坐标变换 | 定位 | 目标点和路径规划 | 激光雷达 | 相机

致谢&#xff1a;ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 一、地图 nav_msgs/MapMetaData 地图元数据&#xff0c;包括地图的宽度、高度、分辨率等。 nav_msgs/OccupancyGrid 地图栅格数据&#…

shell脚本学习06(小滴课堂)

fi是结束循环的意思。 这里脚本1&#xff1a;代表着脚本和1.txt文件处于同一目录下。 脚本2为绝对路径的写法。 在使用./进行启动时&#xff0c;我们需要给文件赋予执行权限。 把文件名改为2.txt: 什么都没有返回&#xff0c;说明文件已经不存在。 可以使用脚本2 if else的方式…

48v变12v同步转换芯片

48v变12v同步转换芯片 以下是一篇关于48V变12V同步转换器WD5105ic的文章正文&#xff1a;48V变12V同步转换器WD5105ic是一种电源管理芯片&#xff0c;它可以将48V的直流电压转换为12V的直流电压。这款芯片具有广泛的应用范围&#xff0c;包括车载充电器件、电动车仪表器件、电…

【LabVIEW学习】2.for,while,事件

1.for实例&#xff08;随机输出数据100次&#xff09; 结果&#xff1a; 2.while实例&#xff08;i<50灯亮&#xff0c;大于之后灯灭&#xff09; 结果&#xff1a;&#xff08;先亮后灭&#xff09; 3.事件结构的实例&#xff08;点击按钮数据增加&#xff09;事件监听应该…

6.运行mysql容器-理解容器数据卷

运行mysql容器-理解容器数据卷 1.什么是容器数据卷2.如何使用容器数据卷2.1 数据卷挂载命令2.2 容器数据卷的继承2.3 数据卷的读写权限2.4 容器数据卷的小实验&#xff08;加深理解&#xff09;2.4.1 启动挂载数据卷的centos容器2.4.2 启动后&#xff0c;在宿主机的data目录下会…

reids管道

如何优化频繁命令往返造成的性能瓶颈&#xff1f; 如果同时需要执行大量的命令&#xff0c;那么就要等待上一条命令应答后再执行&#xff0c;这中间不仅仅多了RTT&#xff08;Round Time Trip&#xff09;&#xff0c;而且还频繁调用系统IO&#xff0c;发送网络请求&#xff0c…

SSM项目初始化流程与操作概念解释-SpringBoot简化版

文章目录 1.引入概念2.导入依赖3.项目配置4.依照SpringMVC框架构建项目 1.引入概念 例如某一个XX系统&#xff0c;该系统存在前台页面&#xff08;给用户直观看或使用&#xff09;&#xff0c;和后台页面&#xff08;给管理人员调整数据和权限&#xff09;。 这二个页面都通过…

QT自定义信号,信号emit,信号参数注册

qt如何自定义信号 使用signals声明返回值是void在需要发送信号的地方使用 emit 信号名字(参数)进行发送 在需要链接的地方使用connect进行链接 ct进行链接

pytorch.nn.Conv1d详解

通读了从论文中找的代码&#xff0c;终于找到这个痛点了&#xff01; 以下详解nn.Conv1d方法 1 参数说明 in_channels(int) – 输入信号的通道。 out_channels(int) – 卷积产生的通道。 kernel_size(int or tuple) - 卷积核的尺寸&#xff0c;经测试后卷积核的大小应为in_cha…