倒立摆的状态观测器设计与仿真
状态估计原理
在倒立摆的状态反馈控制一文中,我们默认系统状态可以直接获得。但实际中有的状态无法直接测量,而且还要考虑噪声的影响,所以经常需要设计状态观测器估计系统状态。
本文采用Luenberger状态观测器,其动态特性由如下方程描述
\[ \dot{\hat{x}}=A\hat{x}+Bu+L(y-\hat{y}) \tag{1} \] \[ \hat{y}=C\hat{x}+Du \tag{2} \]
\((1)\)的最后一项根据实际系统输出\(y\)与估计的系统输出\(\hat{y}\)之间的差值来修正系统状态估计\(\hat{x}\),状态估计误差\(e=x-\hat{x}\)满足
\[ \dot{e}=\dot{x}-\dot{\hat{x}}=(Ax+Bu)-\left[ A\hat{x}+Bu+L(y-\hat{y}) \right] \tag{3} \]
即
\[ \dot{e}=(A-LC)e \tag{4} \]
如果矩阵\(A-LC\)的特征值都有负的实部,则\(e\)会趋于零,通过配置\(A-LC\)的特征值可以决定\(e\)的收敛速度。在设计控制器和观测器之前,要判断系统的能控性和能观性,在最后的代码中会有体现,这里就不多提了。
基于状态观测器的控制
现在基于状态估计\(\hat{x}\)对倒立摆系统进行反馈控制,反馈控制信号
\[ u=r-K\hat{x} \tag{5} \]
系统状态方程为
\[ \dot{x}=Ax+B(r-K\hat{x})=(A-BK)x+BK(x-\hat{x})+Br \tag{6} \]
即有
\[ \dot{x}=(A-BK)x+BKe+Br \tag{7} \]
将\((4)\)和\((7)\)合并,得到如下矩阵方程
\[ \left[ \begin{array}{c} \dot{x}\\ \dot{e}\\ \end{array} \right] =\left[ \begin{matrix} A-BK& BK\\ 0& A-LC\\ \end{matrix} \right] \left[ \begin{array}{c} x\\ e\\ \end{array} \right] +\left[ \begin{array}{c} B\\ 0\\ \end{array} \right] r \tag{8} \]
系统输出
\[ y=\left[ \begin{matrix} C& 0\\ \end{matrix} \right] \left[ \begin{array}{c} x\\ e\\ \end{array} \right] \tag{9} \]
那么观测器和控制器耦合到一起形成了一个系统,整个系统特征方程变为\(2n\)阶的。系统整体结构图可以在任何一本相关教材上找到,这里就不再贴出。基于倒立摆的状态反馈控制中的代码修改,得到如下MATLAB仿真代码:
1 | % 倒立摆模型 |
由于观测器估计的系统状态与实际状态有误差,所以系统输出(小车位移和摆杆角度)随时间变化规律与之前的有差异:
状态估计误差随着时间推移衰减为零: