最近做线控底盘域,转向里面有个功能会用到LQG算法,因此查阅了很多资料,包括状态观测和状态反馈控制、LQR、卡尔曼滤波、LQG及自动控制原理。本节记录LQG算法。
一、LQG组成
LQG算法包括卡尔曼滤波和LQR二次型控制两部分,卡尔曼部分用于观测最优状态,LQR部分用于状态反馈。
二、卡尔曼滤波
卡尔曼滤波根据系统输入输出观测状态,利用迭代的方式对状态量进行调节,相当于自适应观测器,而luenberger观测器配置好L增益矩阵后,便不能自适应,有一点的局限性,而卡尔曼滤波能根据先验协方差和后验协方差调节增益K矩阵
对于卡尔曼部分可以查看我的其他CSDN文档,而且附有代码和simulink模型
三、LQR二次型最优控制
将车身垂向动力学、车身垂向位移、悬架垂向位移作为代价函数,利用
以及调节状态量和控制量的权重,也就是说可以调节Q1、Q2、Q3,也可以直接调节Q矩阵的值。
四、 模型搭建
1、设置好A、B、Q、R矩阵后,调用matlab的lqr函数,如果是离散模型,调用dlqr函数,也可以用dare函数,求取K矩阵。
K_GainMtrix = lqr(A,B,Q,R);
2、搭建模型,路面不平度考虑了噪声,当然也可以直接加白噪声去模拟此噪声,仿真时直接加个高斯白噪声即可。
3、利用1、2两步计算的K_GainMtrix、X_State,计算u=-KX控制量,也就是阻尼力的输入;
五、其他扩展
为了探讨控制理论,还对状态观测器及状态反馈做了详细介绍,复杂的simulink模型也可以用状态方程简单明了的表示,同时还有将连续状态进行解析解离散化和近似解离散化,是为了将理论中的控制能够运用到离散系的生活中。同时还有极点配置求增益矩阵等文档。