目录

  • 1. LQR控制算法介绍
  • 1.1 全状态反馈控制
  • 1.2 LQR控制推导
  • 2. 倒立摆模型仿真
  • 2.1 倒立摆状态空间方程推导
  • 2.2 开环仿真
  • 2.3 闭环LQR仿真
  • 2.4 LQR对比仿真


1. LQR控制算法介绍

1.1 全状态反馈控制

  首先回顾一下全状态反馈控制器的模型:

状态反馈控制器 python 状态反馈控制器simulink_状态空间


  假设一个线性系统的状态空间方程表示为:

状态反馈控制器 python 状态反馈控制器simulink_状态反馈控制器 python_02

  在此,我们需要设计一个状态反馈控制器:

状态反馈控制器 python 状态反馈控制器simulink_状态反馈控制器 python_03


  使得该线性系统达到期望的稳定性能。将 u=-kx 带入到状态空间方程可得:

状态反馈控制器 python 状态反馈控制器simulink_matlab_04


  由上式可知,引入状态反馈后,线性系统的传递函数的极点为行列式 A-Bk 的特征值。通过配置反馈矩阵 k ,可以使得系统达到所期望的状态。

  那么如何选取传递函数的极点使系统的性能最好以及矩阵 k 如何计算?这就需要引入LQR控制了。

1.2 LQR控制推导

  LQR的目标就是找到一组控制量,使得同时满足状态量足够小(系统达到稳定状态),控制量足够小(控制量尽量小)。

  引入代价函数:

状态反馈控制器 python 状态反馈控制器simulink_控制器_05


  其中,Q和R是需要设计的半正定矩阵和正定矩阵。

  代价函数 J 需要达到最小值,那么在 t 趋近于无穷时,状态向量 x(t) 肯定趋近于0,即是达到了系统稳态;同理,t 趋近于无穷时,控制向量 u(t) 也会趋近于0,意味着,随着时间的推移,需要对系统施加的控制量会越来越小,意味着使用最小的控制量使得系统达到了最终控制目标。

  那么Q和R矩阵的取值如何确定呢?

  一般来说,为了方便观察各个系统状态量,Q和R选取对角阵。Q矩阵的某一个元素值增大,意味着这个元素值作用的系统状态量将以更快的速度衰减到0,比如,Q11 选取较大的值,那么 x11 将会很快衰减到0;另外一方面,R矩阵的某一个元素值增大,意味着这个元素值作用的控制量减小,控制器执行更少的动作,系统的状态衰减将变慢。所以,Q和R矩阵的选取要根据实际应用场景。

  推导过程:

状态反馈控制器 python 状态反馈控制器simulink_控制器_06


状态反馈控制器 python 状态反馈控制器simulink_matlab_07


  LQR控制结构图为:

状态反馈控制器 python 状态反馈控制器simulink_反馈控制_08

2. 倒立摆模型仿真

DR_CAN讲解内容的复现。
  视频链接:https://www.bilibili.com/video/BV1RW411q7FDshare_source=copy_web   建议先观看视频学习。

2.1 倒立摆状态空间方程推导

状态反馈控制器 python 状态反馈控制器simulink_反馈控制_09


状态反馈控制器 python 状态反馈控制器simulink_反馈控制_10


状态反馈控制器 python 状态反馈控制器simulink_反馈控制_11

2.2 开环仿真

状态反馈控制器 python 状态反馈控制器simulink_反馈控制_12


  图中x1积分模块初始值设置为5,表示初始角度为5°;仿真时间1s。

状态反馈控制器 python 状态反馈控制器simulink_状态反馈控制器 python_13


  图中三条曲线分别代表x1,x2,u即角度,角速度,输入。倒立摆模型建立在小角度近似的基础上,故当角度增大到一定程度时,模型失效,对应波形图中x1和x2一直保持发散的趋势。

2.3 闭环LQR仿真

  根据模型的A和B矩阵及自行设置的Q和R矩阵,在matlab命令行窗口利用lqr函数计算K矩阵。

状态反馈控制器 python 状态反馈控制器simulink_状态反馈控制器 python_14


  根据K矩阵元素值构建闭环simulink模型。

状态反馈控制器 python 状态反馈控制器simulink_控制器_15

状态反馈控制器 python 状态反馈控制器simulink_状态反馈控制器 python_16


  引入状态反馈后,x1和x2最终保持收敛,达到稳定状态。

2.4 LQR对比仿真

  更改Q和R矩阵,重新计算K矩阵。

状态反馈控制器 python 状态反馈控制器simulink_反馈控制_17


  将两个闭环模型分别封装成三输出的Subsysytem,进行对比仿真。

状态反馈控制器 python 状态反馈控制器simulink_matlab_18


  仿真时间3s。

状态反馈控制器 python 状态反馈控制器simulink_状态空间_19


  黄色曲线代表Q=[100 0;0 1],R=0.01的仿真结果,蓝色曲线代表Q=[1 0;0 1],R=100的仿真结果。黄色曲线的x1和x2收敛速度更快,说明黄色曲线更关注收敛速度;蓝色曲线的u值更小且变化比较平滑,说明蓝色曲线更关注能耗问题。两条曲线最终都实现了状态的收敛即角度和角速度为零。

  如果本文对您有所帮助,麻烦一键三连,谢谢!