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 \…

换电脑后导入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都…

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

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

laravel8框架windows下安装运行

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

[数据集][图像分类]瑜伽动作分类数据集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;不然传输大文件会断掉&…

Shell编程规范与变量-01

一、Shell脚本概述 在一些复杂的 Linux 维护工作中&#xff0c;大量重复性的输入和交互操作不仅费时费力&#xff0c;而且容易出错&#xff0c;而编写一个恰到好处的 Shell 脚本程序&#xff0c;可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。 1…

PyScada(三)后端应用

PyScada 的后端应用 使用后端 要使用后端&#xff0c;请在浏览器中打开http://127.0.0.1 &#xff08;将 127.0.0.1 替换为 PyScada 服务器的 IP 或主机名&#xff09;&#xff0c;然后使用安装过程 中定义的管理员帐户登录 &#xff08;TODO 链接到创建超级用户文档&#xf…

Java基础的重点知识-01

文章目录 开发前言Java语言开发环境入门程序说明常量变量和数据类型数据类型转换运算符方法解析 开发前言 常用DOS命令 Java语言的初学者&#xff0c;学习一些DOS命令&#xff0c;会非常有帮助。DOS是一个早期的操作系统&#xff0c;现在已经被Windows系统取代&#xff0c;对于…

Vue2动态代理无须重启项目解决方案

1、痛点 如果我们需要使用不同的环境地址的时候&#xff0c;就需要使用命令或者手动修改vue.config.js中配置来重新启动项目。当项目项目越来越大的时候&#xff0c;我们需要很长的时间来启动项目&#xff0c;如此反复&#xff0c;极大影响我们开发进度。 2、寻求解决方案 ● v…

Windows安装多个jdk环境(jdk6+jdk8+jdk17)保姆级

Windows安装多个jdk环境&#xff08;jdk6jdk8jdk17&#xff09;保姆级 背景&#xff1a;新机安装开发环境发现需要找很多文章&#xff0c;&#xff0c;&#xff0c;&#xff0c;这里一篇文章安装所有环境 文章目录 Windows安装多个jdk环境&#xff08;jdk6jdk8jdk17&#xff09…

经典游戏案例:植物大战僵尸

学习目标&#xff1a;植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum Z…