LQR 控制算法应用分析

参考

Optimization Based Control 从基础到复杂地介绍最优控制理论

麻省理工大学机器人算法第八章 LQR 大概说了 lqr 的推导过程,主页有更多算法介绍

wiki LQR 控制器 LQR 多种公式说明

Formulas for discrete time LQR, LQG, LEQG and minimax LQG optimal control problems 离散 LQR 问题论文

黎卡提方程解释

LQR 理论

LQR 实现

公式推导部分理解有限,这里不折腾了,直接进入应用环节。

LQR 二次线性调节器 Linear Quadratic Regulators

wiki 中将 LQR 控制器根据应用分类出四种公式:

  • Finite-horizon, continuous-time,有限视野,连续时域

  • Infinite-horizon, continuous-time,无限视野,连续时域

  • Finite-horizon, discrete-time,有限视野,离散时域

  • Infinite-horizon, discrete-time,无限视野,离散时域

在这里,有限视野的公式中会考虑控制的终点状态,而无限视野的公式不考虑控制的终点状态,可以说在无限视野中,LQR 调节是永不停息的。

在实际应用控制中,都是以固定的频率控制系统,所以这里只考虑离散时域的控制公式。另外,在无限视野中,随着控制调节次数增加(时间流逝),系统会逐渐稳定。系统稳定后虽然不再需要控制调节,但是算法仍会继续工作。下面以无限视野,离散时域的公式作说明。

LQR 用线性方程描述系统,用代价函数表示控制的优劣,其中有些代价项的计算可能得到负值,所以会对代价项进行平方操作以保证代价值为正,且存在最小值。方程描述如下:

x_{k+1} = Ax_{k}+Bu_{k} \quad (1)

J=\sum^{\infty}_{k=0}{(x^T_kQx_k+u^T_kRu_k+2x^T_kNu_k)} \quad (2)

u_{k+1}=-Kx_k \quad (3)

K=(R+B^TPB)^{-1}(B^TPA+N^T) \quad (4)

公式 (1) 中,x_{k+1} 是下个时刻的系统状态,一般来说系统状态描述为误差值。例如猎豹捕食追赶羚羊,猎豹和羚羊之间的位置误差,也就是欧氏距离作为系统状态,该系统运行到稳定就是猎豹追赶到羚羊,它们间位置误差为 0。

公式 (2) 是代价评估,x^T_kQx_k 表示状态代价, u^T_kRu_k 表示控制代价,2x^T_kNu_k 表示???代价。Q 是半正定加权矩阵,R 是正定加权矩阵,N 是 ???,需要调参设置。

公式 (3) 是使得系统代价 J 最小的控制序列定义。其中控制增益 K 由公式 (4) 给出。

P 根据黎卡提方程求解:

P_{k-1}=A^TP_{k}A-(A^TP_{k}B+N)(R+B^TP_{k}B)^{-1}(B^TP_{k}A+N^T)+Q \quad (5)

注意黎卡提方程求解是一个逆向求解,通常令终点P_t=Q,然后迭代 n 次后得到 P_0 值。

翻了一些资料没有找到代价公式中 2x^T_kNu_k 的解释,该公式来自论文《Formulas for discrete time LQR, LQG, LEQG and minimax LQG optimal control problems》,但论文也只是直接给出公式:

fig.1 离散 LQR 公式

从公式上可以理解是“控制转换到状态的代价?”。对比其他文章资料,此时将 N 设置为零矩阵即可。

高度跟踪

先测试简单的一维高度跟踪例子。

一个飘浮器 P 每个时刻会在 [-0.25,0.25] 米范围内飘动,一个跟踪器 G 通过\frac{1}{2}*u*dt^2的控制跟踪飘浮器。系统状态描述为跟踪器与飘浮器的高度差:

h_{G}-h_{P}+\frac{1}{2}*u*dt^t=0 \quad (6)

其中 A=h_G-h_PB=\frac{1}{2}dt^2

仿真步骤:

  1. 随机初始化飘浮器 P 和跟踪器 G 的高度;

  2. while (1):

  3. 更新飘浮器 P 高度;

  4. 逆向迭代求解矩阵 P,然后计算增益 K,最后计算得到控制 u;

  5. 更新跟踪器 G 高度;

  6. 计算控制消耗;

测试,绿线表示飘浮器 P 高度,红线表示跟踪器 G 高度。

当权重矩阵 Q=1,R=1 时候,跟踪效果如下:

高度跟踪Q1R1

当权重矩阵 Q=60,R=1 时候,跟踪效果如下:

高度跟踪Q60R1

当权重矩阵 Q=130,R=1 时候,跟踪效果如下:

高度跟踪Q130R1

当权重矩阵 Q=130,R=30 时候,跟踪效果如下:

高度跟踪Q130R30

从上面测试可以看出 Q 矩阵越大,说明系统状态越重要,LQR 控制会尽量输出大控制来收敛系统误差。而 R 矩阵越大,说明控制幅度不能太大,LQR 控制会尽量降低控制幅度。

尽管公式 (3) 计算控制增益 K,但是在该公式中仅仅包含系统代价中状态代价和控制代价的权重,而不关心具体的代价形式,最终的系统稳态调节效果依赖权重矩阵 Q 和 R 的调参。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/32262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot项目ES报异常query_shard_exception

详细异常信息如下: {"error": {"root_cause": [{"type": "query_shard_exception","reason": "failed to create query: {\n \"bool\" : {\n \"filter\" : [\n {\n \…

什么是容器镜像

什么是容器镜像? 1. 容器镜像的两个重要原则 容器镜像是容器化应用程序的基础,它包含了运行应用程序所需的一切——代码、运行时、库和依赖项。理解容器镜像的两个重要原则非常重要: 不可变性:容器镜像一旦构建,就不…

【栈与队列】用队列实现栈

题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回…

换电脑后导入git本地仓库记录

导入本地仓库tig记录 换了新电脑,将旧电脑的数据盘查到新的笔记本之后发现,使用pycharm 读取不到本地的git提交记录了,我没有将本地git上传到远程仓库的习惯,这可抓马了,硬盘插回去的话也太麻烦了。试了 vscode 提示设…

Vue77-编程式路由

一、需求 不写<router-link>实行路由的跳转。 因为<router-link>的本质是<a>&#xff0c;但是&#xff0c;有时&#xff0c;导航不一定是a标签&#xff01;或者&#xff0c;有时需要等一段时间&#xff0c;页面才跳转。 二、代码实现 三、小结

Wakelocks 框架设计与实现

Wakelocks 框架是基于Wakeup Source实现的为Android系统上层提供投票机制&#xff0c;以阻止系统进入休眠。 1.功能说明 该模块的支持受宏CONFIG_PM_WAKELOCKS控制。在使能该宏的情况下&#xff0c;PM Core初始化过程中会在sysfs下创建两个属性节点&#xff1a; /sys/power/w…

Gradle学习-1

1、APK构建流程 2、Gradle的安装 &#xff08;1&#xff09;安装Java JDK JAVA JDK 下载地址下载安装后需要配置环境变量gradle是运行在Java虚拟机上的&#xff0c;所以需要配置Java JDK &#xff08;2&#xff09;安装 Gradle Gradle下载官网下载安装后需要配置环境变量 …

vscode创建编辑markdown文件

Markdown 是一种轻量级标记语言, 它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。 由于 Markdown 的轻量化、易读易写特性&#xff0c;并且对于图片&#xff0c;图表、数学式都有支持&#xff0c;许多网…

[保姆级教程]uniapp配置vueX

文章目录 注意新建文件简单的使用 注意 uniapp是支持vueX的只需配置一下就好 新建文件 在src文件中&#xff0c;新建一个store&#xff08;如果有的话跳过&#xff09; 在store中新建一个js文件&#xff0c;修改js文件名称和选择模板为default 在 uni-app 项目根目录下&…

Vue80-全局路由守卫:前置、后置

一、路由守卫的定义 二、需求 在第三步&#xff0c;做校验&#xff01; 三、代码实现 3-1、前置路由守卫 注意&#xff0c;此时就不能将router一开始就暴露出去了&#xff01; to和from是路由组件的信息。 写法一&#xff1a; 写法二&#xff1a; 缺点&#xff1a;若是路由…

51单片机STC89C52RC——6.2 定时器

一&#xff0c;定时器介绍 STC89C51RC/RD系列单片机的定时器0和定时器1&#xff0c;与传统8051的定时器完全兼容&#xff0c;当在定时器1做波特率发生器时&#xff0c;定时器0可以当两个8位定时器用。 STC89C51RC/RD系列单片机内部设置的两个16位定时器/计数器TO和T1都…

Mysql索引 like篇

Mysql索引 like篇 Mysql在查询中使用like的时候&#xff0c;对应的字段上面的索引是否会生效呢&#xff1f; like ‘张’ 用到了索引like ‘张%’ 前缀匹配 用到了索引like ‘%张%’ 中间匹配 没有用到了索引like ‘%张’ 后缀匹配 没有用到了索引 mysql> CREATE TABLE t…

2024.06.10校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 三环集团2025届校园招聘启动&#xff08;内推&#xff09; 校招 | 三环集团2025届校园招聘启动&#xff08;内推&#xff09; 2、实习丨中国汽研第二届检测工程事业部实习生专项…

“论数据访问层设计技术及其应用”必过范文,软考高级,系统架构设计师论文

论文真题 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分为表现层、业务逻辑层和数…

HomeController

目录 1、 HomeController 1.1、 Registration 1.2、 BlogDetails 1.3、 Error HomeController using ITM_College.Data;

laravel8框架windows下安装运行

目录 1、安装前如果未安装先安装Composer 2、使用composer安装laravel8 3、使用内置服务器:8000 的命令去访问测试 ​4、使用本地环境运行phpstudy配置到public目录下 Laravel官网 Laravel 中文网 为 Web 工匠创造的 PHP 框架 安装 | 入门指南 |《Laravel 8 中文文档 8.x…

vue3中的$refs 和$parent

$refs 是父可以查看到子的所有数据&#xff0c;假如想要修改的话需要导入 这个意思就是把aaa属性和bbb属性暴漏出去&#xff0c;让父可以修改 definExprop({aaa,bbb}) $parent是子可以查看到父的所有数据&#xff0c;假如想要修改的话需要导入 这个意思就是把aaa属性和bbb属…

[数据集][图像分类]瑜伽动作分类数据集1238张5类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1238 分类类别数&#xff1a;5 类别名称:["downdog","godde…

聊聊贪心算法

第1部分&#xff1a;引言 贪心算法是一种在每一步选择中都采取当前状态下最优&#xff08;或最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最优的算法策略。这种算法简单、直观&#xff0c;且在很多情况下能够快速得到一个足够好的解决方案。然而&#xff0c;值…

el-upload 组件上传文件(查询,上传,删除,下载功能)

1.html el-upload中的属性&#xff1a; <el-upload ref"upload" class"upload-demo" // element-ui自带的样式 :headers"headerOdj" // 文件上传的头,带token&#xff08;重要&#xff0c;不然传输大文件会断掉&…