写在前面:
🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝
🎭 人生如戏,我们并非能选择舞台和剧本,但我们可以选择如何演绎 🌟
感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行~~~
文章目录
- 引言
- 一、连续LQR与离散LQR
- 1、LQR问题概述
- 2、离散LQR的优势
- 3、离散LQR的数学基础:拉格朗日乘子法
- 二、离散LQR问题描述
- 1、离散LQR问题描述
- 2、代价函数和约束条件
- 3、离散LQR问题分解
- 三、离散化方法
- 1、连续微分方程的离散化
- (1) 向前欧拉法
- (2) 向后欧拉法
- (3) 中点欧拉法
- 2、连续方程离散化的数学推导
- 四、离散LQR解法
- 1、代价函数
- 2、约束条件
- 3、代价函数和约束的拉格朗日乘子法表示
- 五、向量导数
- 1、向量导数规则
- 2、求解偏导数的规律
- 3、递推关系式的推导
- 4、黎卡提方程的引入
- 5、控制量的表达式
- 六、黎卡提方程
- 1、迭代性质
- 2、LQR控制量的计算
- 3、其他书中的黎卡提方程形式
- 4、矩阵求逆引理的应用
- 七、LQR算法总结
- 1、离散化
- 2、求解黎卡提方程
- 3、求解 K
- 4、求解控制量
- 参考资料
引言
本篇博客是 自动驾驶控制算法 系列的第五节。内容整理自 B站知名up主 忠厚老实的老王 的视频,作为博主的学习笔记,分享给大家共同学习。
在上一节将坐标变换和车辆动力学模型综合起来,得到了关于误差的微分方程:
。暂时先忽略 ,考虑 的控制以后再讲,暂时不管它。上面的误差微分方程变成如下形式:
一、连续LQR与离散LQR
1、LQR问题概述
下面求 LQR 问题,就是在 等于 和 二次型里选择合适的 ,让 最小,并且 要满足 的约束,这就是典型的 LQR 问题, LQR 问题已经十分成熟,在 Matlab 里有包,可以调用 ,以及 ,就是离散的(discrete) LQR。
本篇博客讲解 dLQR 的基本原理,因为我们并不满足于当调包师、调参数侠,而是要知道原理。
2、离散LQR的优势
LQR 分为连续 LQR 和离散 LQR ,但是就本博客只讲离散 LQR ,因为实际应用都是离散 LQR ,特别是在计算机上,计算机处理的是离散数据,而且控制大多也是离散,所以离散 LQR 对实际应用很有用。
第二个原因是连续 LQR 的理论非常难,涉及到泛函和变分法,而且一般用不到。
3、离散LQR的数学基础:拉格朗日乘子法
而离散 LQR 只涉及拉格朗日乘子法。
什么是拉格朗日乘子法?
在约束 的条件下的机制,用拉格朗日乘子法,就是建立
其中,。
在自动控制原理书中,使用离散泛函与变分法解离散 LQR,但这样涉及到了太多数学知识,而使用拉格朗日乘子法,可以绕过泛函与变分法的概念把离散 LQR 讲明白。
二、离散LQR问题描述
1、离散LQR问题描述
离散 LQR 的问题描述:
2、代价函数和约束条件
设代价函数为:
在约束条件下的极小值。
3、离散LQR问题分解
现在离散 LQR 问题分解为两个问题:
- 如何实现?
- 如何求解使得 在约束条件 下取极小值的 ?
三、离散化方法
1、连续微分方程的离散化
先讲离散化,有两种方法:
- 向前欧拉法
- 中点欧拉法
百度 Apollo 的代码是两者混合。
下面简单讲一下向前欧拉法和中点欧拉法。
方程,两边积分下限为 ,积分上限为 ,得到以下式子:
把后面积分化为 ,用的是积分中值定理,得到:
这是精确的离散化,但是这样离散化没有用,因为不知道 到底是什么,根据
(1) 向前欧拉法
:
(2) 向后欧拉法
:
(3) 中点欧拉法
:
2、连续方程离散化的数学推导
方程,先两边积分,将积分划为中式定理形式,得到以下方程:
即:
对第一个 用中点欧拉法,对第二个
不用终点欧拉法是因为 未知,一般 取采样周期,比如 0.01 秒或 0.001 秒, 一般是要求的当前控制量,这是 LQR 要算的, 是下一时刻的 LQR 控制量,当前的控制量 都不知道,下一时刻的 更不知道,所以第二个 不能用中点欧拉法。
那为什么第一个
,虽然不知道,但它不需要知道。因为只要把它带进去化简就出来了:
把右边 移到左边,得到
因为 通常比较小
这样得到以下方程:
其中, 是单位矩阵, 是采样周期,得到离散化的微分方程:
其中,,。
以上是连续方程离散化的全部过程。
四、离散LQR解法
下面看一下离散的 LQR 的解法。
1、代价函数
是关于 和 的二次型:
希望能达到稳定的控制,即在任何时段, 等于
2、约束条件
, 对应上面的 , 对应上面的 。
从 到至无穷,这无穷就不太好处理,那就先不让 从 到正无穷这样加下去,先让 从 一直加到 ,再让
具体做法是:
让
问题来了,为什么没有
先把约束写出来:
约束覆盖了从 到 以及从 到 。发现写的代价函数 正好是 从 到 以及从 到 的这样函数,即约束完全覆盖二次型的自变量。
天生就比
3、代价函数和约束的拉格朗日乘子法表示
来:
这就是带约束的拉格朗日乘子法,注意 可能不是数,而是列向量,所以
到 相加,可以合并:
和 的项,起个新的名字 ,设
这样可以写成非常简单的形式:
把它展开变成:
最后再加上 再减去负的 ,这样和原式相等,但加了负的 就可以和前面东西合并:
写成这样就可以求导。
注意:是向量求导,不是数的求导,下面复习一下向量求导。
五、向量导数
1、向量导数规则
规则如下:
若 为对称矩阵,
和 都是对称矩阵,所以对 和 的二次型求导直接乘以
2、求解偏导数的规律
先写几个找规律:
发现偏导有相同的规律,可直接写成:
上式中的 都是
以及 。首先把 的定义拿下来:
根据向量导数得到:
把式子带到上面四个等于
看起来好像是四个式子,但实际上是
个式子,发现 式明确给出了 ,其中 和 已知,剩下的 未知,如果算出 等于多少?就可以算出 ,这样 LQR 问题就解决了。
问题是
式可以得到 ,和 和 有关,而 式和 式都表示 和 以及和
等于什么的话,通过 式和 式反向逆推,一直推到初始状态。
3、递推关系式的推导
递推式如下:
代入的 式:
将代入的 式:
将代入的 式:
将代入的 式:
将与式比较,发现很像。
4、黎卡提方程的引入
推到,,一定有相同形式,不妨设:
这样把求 的问题转化为求
式,控制量 直接和 相关,又和 相关,因此只要求出 来, 就能算出来,算出来之后 LQR 问题就迎刃而解了。
那么
式直接可得到
重复上面的递推过程,经过计算得到这样的递推式:
该递推式叫做 黎卡提方程(Riccati)。
5、控制量的表达式
,就可以通过逆推出,,一直这样递推下去,算出来 之后就好办了
移项得到
的具体表达式,其中, 都是已知量, 是黎卡提方程算出来的,又和 有关,但 一般也是已知,因为 一般取误差 , 就是当前车辆的状态, 通过定位得到的。
,误差是 和 ,可以通过规划和定位得到,所以控制的上游就是规划模块以及定位模块。
这两个如果都没有,那就没有办法做控制,所以控制一定是最后做的,就是当定位好了,规划也规划好了之后,才能去做控制。
六、黎卡提方程
还要讲一下黎卡提方程。
1、迭代性质
有人可能会觉得为什么叫方程呢?这不就是迭代的东西,就应该是迭代的递推的这样的式子,和方程有什么关系?为什么要把递推的式子叫做方程?
, 趋无穷时,仍然选 ,要迭代无数次。
式黎卡提方程,迭代几十次后就收敛不再变化了,即 。
实际上是
2、LQR控制量的计算
先取初值 ,带到黎卡提方程迭代,当 收敛后,代到 的表达式中:
令 ,可简化为:
Matlab 里离散 LQR 的用法是
其中 , 是黎卡提方程的解 ,
Matlab dlqr
函数用法就是输入,就会计算出 。算出 以后, 就等于,这样就可以得到想要的控制量。
3、其他书中的黎卡提方程形式
其他书上的黎卡提方程形式如下:
4、矩阵求逆引理的应用
通过矩阵求逆引理化简:
把推导出来的黎卡提方程拿下来:
对括号里的部分使用矩阵求逆引理,令
所以
代入原方程化简得到:
即
, 为 矩阵, 为 矩阵, 为 矩阵。
注意:矩阵求逆是很容易出错误的运算,特别是在当矩阵性质不太好时,矩阵求逆非常容易发生错误,存在舍入误差,最后求逆会得到错误的逆矩阵。
七、LQR算法总结
首先写出误差导数
1、离散化
2、求解黎卡提方程
3、求解 K
4、求解控制量
本节博客把 LQR 原理基本上讲的很明白了。
,只考虑
参考资料
【基础】自动驾驶控制算法第五讲 连续方程的离散化与离散LQR原理
后记:
🌟 感谢您耐心阅读这篇关于 连续方程离散化与离散LQR原理 的技术博客。 📚
🎯 如果您觉得这篇博客对您有所帮助,请不要吝啬您的点赞和评论 📢
🌟您的支持是我继续创作的动力。同时,别忘了收藏本篇博客,以便日后随时查阅。🚀
🚗 让我们一起期待更多的技术分享,共同探索移动机器人的无限可能!💡
🎭感谢您的支持与关注,让我们一起在知识的海洋中砥砺前行 🚀