线性控制器设计

线性控制器设计_Linear Controller Design及后续章节的笔记

对于开环系统X˙=AX\dot{X} = AX,矩阵AA 的特征值决定了系统的稳定性;当我们引入输入UU,而UU 又是XX 的函数时,就变成了闭环控制系统X˙=AX+BU\dot{X} = AX +BU。讨论一个基本情况U=KXU=-KX,则X˙=AXBKX=(ABK)X\dot{X}=AX-BKX = (A-BK)X,我们把ABKA-BK 称为闭环的状态空间矩阵AclA_{cl},通过选取不同的KK 就可以使得AclA_{cl} 的特征值在所需范围之内。

一般过程

以下面系统为例,其状态空间方程为:

X˙=[0203]X+[01]U\dot{X} = \begin{bmatrix} 0 & 2 \\ 0 & 3 \end{bmatrix}X + \begin{bmatrix} 0 \\ 1 \end{bmatrix}U

这里要求是要使系统稳定在某一点,并不需要跟随输入。

首先分析AA 矩阵的特征值为λ1=0,λ2=3\lambda_1 = 0, \lambda_2 = 3,系统不稳定。
然后我们设计U=KX=[k1k2]XU=-KX=\begin{bmatrix} -k_1 & -k_2 \end{bmatrix}X,得到Acl=[02k13k2]A_{cl}= \begin{bmatrix} 0 & 2 \\ -k_1 & 3-k_2 \end{bmatrix}
然后我们希望闭环系统的特征值λ1=λ2=1\lambda_1=\lambda_2=-1,求得k1=0.5,k2=5k_1=0.5, k_2 =5 最后还能求得输入U=[125][x1x2]U=\begin{bmatrix} -\frac{1}{2} & -5 \end{bmatrix}\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}

如何选取λ\lambda

  • λ\lambda 有虚部会引入震荡
  • λ\lambda 实部的绝对值决定收敛速度
  • 还要考虑实际中UU 给定的范围
  • 最优化控制:有损失函数J=0(XTQX+UTRU)dtJ=\int^{\infty}_0 (X^TQX + U^TRU) dt,根据需要设计不同的Q,RQ,R 矩阵,使得J=JminJ=J_{min}

系统会稳定在哪一点:令X˙=0\dot{X} = 0 即可得系统的稳定点。

LQR 控制器

Linear Quadratic Regulater 是通过引入一个损失函数来确定AclA_{cl} 的特征值的:

J=0(XTQX+UTRU)dt(1)J=\int^{\infty}_0 (X^TQX + U^TRU) dt \tag{1}

假设Q,RQ,R 都是对角矩阵,我们可以这样理解损失函数:

  • XTQX=q1x12+q2x22+...+qnxn2X^TQX = q_1x_1^2 + q_2x_2^2 + ... + q_nx_n^2,表示一种penalty 惩罚的概念,可以看作对误差的反应
  • UTRUU^TRU 表示输入对系统的影响
    这里我们可以使用matlablqr(sys,Q,R) 来求解特征值。需要注意的是矩阵Q,RQ,R 所对应的状态的物理意义

轨迹跟踪

这里仅记录设计的过程

以倒立摆的系统为例:

[x1˙x2˙]=[01gL0][x1x2]+[01]U(2)\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 \tag{2}

此系统会稳定在x1=x1˙=x2=x2˙=0x_1=\dot{x_1}=x_2=\dot{x_2} = 0,如果我们希望系统稳定在x1=x1dx_1 = x_{1d}时应该怎么做呢?

设计误差函数

我们可以设计误差函数e=x1dx1e=x_{1d} - x_1,则e˙=x1˙\dot{e} = -\dot{x_1},可以得到新的系统状态空间方程为:

[e˙x2˙]=[01gL0][ex2]+[01]U+[0gLx1d]\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_{1d} \end{bmatrix}

新的系统会稳定在e=x1de=x_{1d} 处,因为我们什么也没做,只是从误差的角度观察了系统而已

设计新的稳定点

我们可以通过调整输入UU 来调整系统的平衡点,令:

U=[k1k2][ex2]+gLx1dU= -\begin{bmatrix} k_1 & k_2 \end{bmatrix}\begin{bmatrix} e \\ x_2 \end{bmatrix} + \frac{g}{L}x_{1d}

则新系统的空间状态方程转化为:

[e˙x2˙]=[01gL+k1k2][ex2]\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}

平衡点位于ef=0,x2f=0e_f=0,x_{2f}=0

计算输入

λ1=λ2=1\lambda_1=\lambda_2=-1 为例,计算k1=1+gL,k2=2k_1=1+\frac{g}{L}, k_2=-2,继而得到:

U=[gL2][ex2]+gLx1d(3)U=-\begin{bmatrix} \frac{g}{L} & -2 \end{bmatrix}\begin{bmatrix} e \\ x_2 \end{bmatrix} + \frac{g}{L}x_{1d} \tag{3}

e=x1dx1e=x_{1d}-x_1 代入(3)(3) 式,可求得u=xd+(1+gL)x1+2x2u= - x_d + (1+\frac{g}{L})x_1 + 2x_2(这里应该写成矩阵的形式)

仿真结果如下图所示:

可以看到在一定范围内,系统的稳定点会跟随XdX_d 变化。


强烈建议看一遍视频,因为视频中还包含Matlab 的实践