目录
前言
一、知识点补充
1、拉格朗日乘子法
2、积分中值定理
3、向前欧拉法,向后欧拉法,中点欧拉法
4、向量的导数
5、矩阵求逆引理(记住就好,推导见链接)
二、连续时间下的LQR推导
1、系统状态方程
2、推导过程
3、例子-------手平衡小杆
3.1、系统模型
3.2、simulink模型仿真
3.2.1、开环情况(k1=k2=0,初值设置为5)
3.2.2、闭环情况
仿真结果:
三、离散时间下的LQR推导(重要)
1、状态方程离散化
2、离散LQR的解法
总结
这里的部分内容和之前的转载文章有相同的地方LQR控制算法及matlab/simulink仿真_陌路两立的博客-CSDN博客_lqr matlab,写这篇文章的目的是为了增强自己对LQR控制算法的理解。
假设需要求极值的目标函数为,约束条件为。设,定义一个新函数,则用偏导数方法列出方程:
若函数在闭区间上连续,则在积分区间上至少存在一个点,使得下式成立:
其中,,满足:。
向前欧拉法:;
向后欧拉法:;
中点欧拉法:。
参考: 向量的导数_影子飞扬的博客-CSDN博客_向量的导数
参考:矩阵求逆引理(matrix inversion lemma)_UESTC_C2_403的博客-CSDN博客_矩阵求逆引理
开环:;
闭环:,设计,可以得到,通过改变可以改变的特征值从而控制系统表现。
系统的状态发生变化的原因是在上一个状态时,有外界干扰或者系统的输入发生变化引起的,忽略外界干扰的影响,这里引入cost function(能量函数,损失函数):
其中,Q和R均为自己设计的半正定矩阵。我们的目的就是通过设计Q和R使得能量函数最小。
能量函数的理解:
Q=,能量函数前面部分可以写成,当时,Q表现为惩罚;R越大,u对J的影响越大,希望J越小,可以使得u减小。
假设Q=,当 时,J将会变得非常大,对J有较大的影响,为了使得J减小,只能希望快速收敛。
将控制器 代入到能量函数中:
为了找到,假设存在一个常量矩阵,使得
随后得到:
将代入到上式中得:
为了使上式恒成立,我们可以得到:
通过令 ,上式可以化简为:
该式就是著名的Riccati方程。其中 是系统矩阵已知,选取合适的 ,可以解出 ,从而得到,控制器。
注:k的由来
下面是B站大佬DR_CAN对LQR控制算法的讲解(知识的搬运工)。
运动学方程:
其中: 表示杆子的长度, 表示重力加速度, 表示杆子与垂直方向的夹角, 表示手的移动。
通过令 可以得到:
令 得:
LQR求k代码:
%% 系统参数
A=[0 1;10 0];
B=[0;-1];
%% 大Q情况
Q=[100 0;0 1];
R=.01;
K=lqr(A,B,Q,R);
%% 大R情况
% Q=[1 0;0 1];
% R=100;
% K=lqr(A,B,Q,R);
%% 求解出来
k1=K(1,1);
k2=K(1,2);
simulink模型:
大R情况:k1=-20.000499987499590,k2=-6.325424884938331;
大Q情况:k1=-1.104987562112088e+02,k2=-17.916403445513760;
结论:通过选取不同的Q和R可以得到不同的系统表现,其中大Q决定的是系统的状态能否快速达到收敛效果,大R决定的是系统的能耗(输入)。
参考: 1、视频链接:https://www.bilibili.com/video/BV1RW411q7FDshare_source=copy_web
2、LQR控制算法及matlab/simulink仿真_陌路两立的博客-CSDN博客_lqr matlab
离散之后最重要的一个就是不可以使用微分方程描述系统了。
动力学方程:,对动力学方程两边同时求积分得:
其中,这里我们需要知道是 是 维的, 称为采样周期。
使用到的知识点:状态 去 使用的是中间欧拉法,控制输入 去 使用的是向前欧拉法(因为我们无法知道)。
step 1:和连续时间下的LQR相同,首先引入能量函数(cost function):
step 2:引入约束函数:
注:为什么cost function只有,却没有呢?
答:如果改为的话,可是约束函数只能覆盖,所以cost function只能为。
step 3:拉格朗日乘子法求解cost function:
首先将约束函数写为:
然后构造新函数:
其中 。
注:注意这里的维度问题, 是维的。
接下来对构造的函数求偏导:
首先对 求偏导:
综上所述:
然后对 求导:
最后对求导:
综上所述:
其中,。
step 4:递推式
当 时:
通过对比 和可以推出:
其中 (Riccati方程)。
可以得到:
其中 认为已知。
LQR控制实际为:
首先,取矩阵 初值为,然后,代入离散时间下的Riccati方程 中迭代,求出矩阵 (一般只需要迭代几十次, 就会收敛),最后,将 代入到 中得到 。
这里是我自己学LQR控制算法的推导过程,数学原理很大,总结起来就是,通过选取Q和R,然后将A,B,Q,R代入LQR控制算法中(A,B是系统的状态矩阵,认为是已知的),从而得到K,然后将K代入到反馈控制输入 中,从而得到控制输入,其中Q决定的是收敛速度,R决定的是能耗。因此,我们需要通过选择合适的Q和R使得cost function达到最优。欢迎大家来讨论指正(我的QQ1012154405),一起在控制的海洋中前进!!!