全状态反馈控制系统
![\left\{\begin{matrix} \dot{x}=Ax+Bu\\ y=Cx+Du \end{matrix}\right.](https://latex.codecogs.com/gif.latex?%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20%5Cdot%7Bx%7D%3DAx+Bu%5C%5C%20y%3DCx+Du%20%5Cend%7Bmatrix%7D%5Cright.)
状态反馈控制器
![u=-kx=-[k_{1},k_{2},\cdots]\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \end{bmatrix}](https://latex.codecogs.com/gif.latex?u%3D-kx%3D-%5Bk_%7B1%7D%2Ck_%7B2%7D%2C%5Ccdots%5D%5Cbegin%7Bbmatrix%7D%20x_%7B1%7D%5C%5C%20x_%7B2%7D%5C%5C%20%5Cvdots%20%5Cend%7Bbmatrix%7D)
![\dot{x}=Ax-Bkx=(A-Bk)x=A_{cl}x](https://latex.codecogs.com/gif.latex?%5Cdot%7Bx%7D%3DAx-Bkx%3D%28A-Bk%29x%3DA_%7Bcl%7Dx)
通过选择K,可以改变
的特征值,进而控制系统表现。
LQR控制器
最优控制,其本质就是让系统以某种最小的代价来让系统运行,当这个代价被定义为二次泛函,且系统是线性的话,那么这个问题就称为线性二次问题,设计的控制器(即问题的解)可以称为LQR(Linear Quadratic Regulator)线性二次调节器。
1、连续时间
代价函数
![J=\int_{0}^{\infty }(x^{T}Qx+u^{T}Ru)dt,Q=Q^T,R=R^T,Q\geqslant 0,R\geqslant 0](https://latex.codecogs.com/gif.latex?J%3D%5Cint_%7B0%7D%5E%7B%5Cinfty%20%7D%28x%5E%7BT%7DQx+u%5E%7BT%7DRu%29dt%2CQ%3DQ%5ET%2CR%3DR%5ET%2CQ%5Cgeqslant%200%2CR%5Cgeqslant%200)
一般来说,Q阵和R阵为单位对角阵,对角阵上的元素对应着不同状态量和控制量的权重大小,越大说明我们设计时对于该量的重视程度越大,即希望这个量在变化过程中保持较小的值,换种说法就是对于该量的“惩罚”越大。积分号说明从开始控制起到最终无限时间代价函数值的累积,因为是二次的,所以代价始终大于0,最终趋于0,我们的设计目标就是得到一系列的控制序列使代价累积的最小。
具体推导过程
将
代入代价函数J,有
![J=\int_{0}^{\infty }x^{T}(Q+K^{T}RK)xdt](https://latex.codecogs.com/gif.latex?J%3D%5Cint_%7B0%7D%5E%7B%5Cinfty%20%7Dx%5E%7BT%7D%28Q+K%5E%7BT%7DRK%29xdt)
假设存在一个常量矩阵P使得
![\frac{\mathrm{d} }{\mathrm{d} t}(x^TPx)=-x^{T}(Q+K^{T}RK)x](https://latex.codecogs.com/gif.latex?%5Cfrac%7B%5Cmathrm%7Bd%7D%20%7D%7B%5Cmathrm%7Bd%7D%20t%7D%28x%5ETPx%29%3D-x%5E%7BT%7D%28Q+K%5E%7BT%7DRK%29x)
将上式左侧微分展开
![\frac{\mathrm{d} }{\mathrm{d} t}(x^TPx)=\dot{x}^TPx+x^TP\dot{x}=-x^{T}(Q+K^{T}RK)x](https://latex.codecogs.com/gif.latex?%5Cfrac%7B%5Cmathrm%7Bd%7D%20%7D%7B%5Cmathrm%7Bd%7D%20t%7D%28x%5ETPx%29%3D%5Cdot%7Bx%7D%5ETPx+x%5ETP%5Cdot%7Bx%7D%3D-x%5E%7BT%7D%28Q+K%5E%7BT%7DRK%29x)
代入控制量
可以整理得到
![A^TP+PA+Q-K^TB^TP-PBK+K^TRK=0](https://latex.codecogs.com/gif.latex?A%5ETP+PA+Q-K%5ETB%5ETP-PBK+K%5ETRK%3D0)
观察上面的等式,A,B,Q,R,P都是常值矩阵,唯一可变的是K阵,所以问题转换为找到一个K使得代价函数最小,一种思路是如果我们可以把含有K的部分转换成类似
的结构,那么要使代价最小,只需使
,那么K便可以求出。
令
代入上式中,可以得到
![A^TP+PA+Q-K^TB^TP-PBK+K^TT^TTK=0](https://latex.codecogs.com/gif.latex?A%5ETP+PA+Q-K%5ETB%5ETP-PBK+K%5ETT%5ETTK%3D0)
将
用待定系数法化成目标形式
,可得
![M=-(T^{-1})^TB^TP,N=TK](https://latex.codecogs.com/gif.latex?M%3D-%28T%5E%7B-1%7D%29%5ETB%5ETP%2CN%3DTK)
且![-K^TB^TP-PBK+K^TT^TTK=(M+N)^T(M+N)-PBR^{-1}B^TP](https://latex.codecogs.com/gif.latex?-K%5ETB%5ETP-PBK+K%5ETT%5ETTK%3D%28M+N%29%5ET%28M+N%29-PBR%5E%7B-1%7DB%5ETP)
令
解出
![K=R^{-1}B^TP](https://latex.codecogs.com/gif.latex?K%3DR%5E%7B-1%7DB%5ETP)
代入Riccati方程中化简后得
![A^TP+PA-PBR^{-1}B^TP+Q=0](https://latex.codecogs.com/gif.latex?A%5ETP+PA-PBR%5E%7B-1%7DB%5ETP+Q%3D0)
设计步骤
- 选择Q、R参数矩阵
- 求解Riccati方程
得到矩阵P - 计算增益
得到反馈控制量![u=-kx](https://latex.codecogs.com/gif.latex?u%3D-kx)
2、离散时间
离散系统
![x(K+1)=Ax(k)+Bu(k)](https://latex.codecogs.com/gif.latex?x%28K+1%29%3DAx%28k%29+Bu%28k%29)
代价函数
![J=\sum_{k=1}^{N}(x^TQx+u^TRu)](https://latex.codecogs.com/gif.latex?J%3D%5Csum_%7Bk%3D1%7D%5E%7BN%7D%28x%5ETQx+u%5ETRu%29)
设计步骤
- 确定迭代范围N
- 设置迭代初始值
![P_{N}=Q](https://latex.codecogs.com/gif.latex?P_%7BN%7D%3DQ)
从后向前循环迭代求解离散时间的代数RIccati方程
-
循环计算反馈系数
并得到控制量
参考资料:LQR最优控制方法小结 - 知乎
【控制理论】离散及连续的LQR控制算法原理推导_CHH3213的博客-CSDN博客_lqr控制
【Advanced控制理论】8_LQR 控制器_状态空间系统Matlab/Simulink建模分析_哔哩哔哩_bilibili
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)