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 的调参。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言程序设计-2 程序的灵魂—算法

【例 2.1】求 12345。 最原始方法: 步骤 1:先求 12,得到结果 2。 步骤 2:将步骤 1 得到的乘积 2 乘以 3,得到结果 6。 步骤 3:将 6 再乘以 4,得 24。 步骤 4:将 24 再乘以 5&#xf…

grafana 通过自定义API获取数据

一、安装插件 安装infinity插件 二、配置数据源 三、配置图表 1、数据 这边提供一个go的demo package mainimport ("math/rand""net/http""time""github.com/gin-gonic/gin" )func main() {router : gin.Default()rand.Seed(time.…

Redis数据过期、淘汰策略

数据过期策略: 惰性删除: 设置该key过期时间后,我们不去管它,当需要该key时,我们在检查其是否过期,如果过期,我们就删掉它,反之返回该key。 这种方式对cpu友好(只在用…

【从0实现React18】 (二) JSX 的转换 jsx到底是什么?React是如何把jsx转换为ReactElement?

react项目结构 React(宿主环境的公用方法)React-reconciler(协调器的实现,宿主环境无关)各种宿主环境的包shared(公用辅助方法,宿主环境无关) 当前实现的JSX转换属于 react****包 初始化react包 先创建react package并初始化 更新package.json文件&a…

Linux终端玩转bastet俄罗斯方块小游戏

Linux终端玩转bastet俄罗斯方块小游戏 一、bastet小游戏介绍1.1 bastet小游戏简介1.2 项目预览 二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍 三、检查系统镜像源3.1 检查系统镜像源3.2 更新软件列表3.3 查询软件 四、安装bastet小游戏4.1 安装bastet4.2 启动bastet游戏 …

2024最新版DataGrip安装教程-全网最全教程!!!

1.DataGrip下载安装 1.打开DataGrip官网,选择自己需要的版本下载即可: 2.进行安装: 3.重启打开: 我这个是正版激活码激活的,需要教程可以关注留言

打字侠,中小学生暑期的打字练习神器

亲爱的家长们,暑假来临,孩子们又要开始“沙发上的咸鱼”模式了!与其看着他们抱着手机、平板不放,不如让他们成为“打字侠”,在快乐中提升打字技能! “打字侠”是一款为中小学生量身打造的打字练习神器。别…

[保姆级教程]uniapp自定义标签页切换组件

文章目录 导文样式改成动态列表切换点击效果加上点击自动滑动scroll-view加上切换组件效果 导文 unaipp自带的标签页和ui设计相差太大,直接修改组件比手写一个还麻烦,下面手写一个。 样式 先用scroll-view做一个滑动,不然多的话滑动不了。 &l…

【C++实验】多项式加减

题目:一元多项式运算 基本要求: (1) 输入并建立多项式; (2) 输出多项式; (3) 多项式加法 (4) 多项式减法。 测试数据: 代码展示: #i…

1.1 数据采集总览

正所谓巧妇难为无米之炊,数据采集是数据处理的第一步。 什么是数据采集 数据采集,也称为数据收集,是将原始数据从各种来源获取并存储起来的过程。这个过程是数据分析和数据仓库建设的第一步,涉及到从不同的数据源中提取数据&…

Redis-数据类型-Hash

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db3数据库4、插入新数据返回15、获取指定哈希(hash)对象的所有字段(field)名6、获取存储在指定哈希(hash)对象中的所有字段(fiel…

51单片机STC89C52RC——6.3 定时器/计数器 实现计时功能(定时器+中断系统+LCD1602液晶显示器)

目录 目的/效果 一,STC单片机模块 二,定时器 中断系统LCD1602显示 三,创建Keil项目 四,代码 五,代码编译、下载到51单片机 ​ 目的/效果 用定时器实现系统中断,计时信息显示在LCD1602上。效果如下 …

最优化第六讲练习题

使用牛顿法 def f(vec):x1,x2vec[0],vec[1]return x1*x1/22*x2*x2def first_order(vec):x1,x2vec[0],vec[1]return np.array((x1,4*x2))x0np.array((2,1)) #初始点 secnp.array([[1,0],[0,4]]) #二阶导 try:invnp.linalg.inv(sec) except:print("矩阵不存在逆矩阵")…

如何让表格标题栏具有粘性?

让表格标题栏具有粘性 什么意思呢? 就是当表格的内容(行数)比较多的时候, 滚动屏幕,看下面的内容的时候, 表格标题栏可以一直显示在屏幕最上方, 以前呢, 我会通过JSCSS 的 pos…

ffmpeg音视频开发从入门到精通——ffmpeg实现音频抽取

文章目录 FFmpeg 实现音频流抽取1. 包含FFmpeg头文件与命名空间声明2. 主函数与参数处理3. 打开输入文件4. 获取文件信息5. 查找音频流6. 分配输出文件上下文7. 猜测输出文件格式8. 创建新的音频流9. 打开输出文件10. 写入文件头信息11. 读取并写入音频数据12. 写入文件尾部信息…

STM32读取芯片内部温度

基于stm32f103cbt6这款芯片,原理部分请参考其他文章,此文章为快速上手得到结果,以结果为导向。 1.基础配置 打开stm32cubemx只需要勾选中 ADC1 Temperature Sensor Channel 2.代码分析 /** 函数名:float GetAdcAnlogValue(voi…

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针 0. 引言1. 关于m_scale2. 关于m_ruler3. 关于m_northarrow4. 结语 0. 引言 本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。 1. 关于m_scale m_scale用于图件…

python库离线安装方法(pyqt5离线安装方法)

在某些情况下,我们的计算机是无法联网的。 网上大部分方法: 这些方法都有个问题,就是库是需要依赖其它库的,你不知道它需要依赖什么库,就是提供了依赖库的列表也麻烦,依赖库也是有对应版本要求的&#xf…

C++程序设计基础实践:学生信息管理系统

目录 1 系统介绍 2 系统设计 3 设计结果 4 源代码 近来有空闲,把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~ 实验要求 本课程要完成一个学生信息管理系统的设计与实现,可实现对于学生信息…

kafka(五)spring-kafka(2)详解与demo

一、简单的收发消息demo 父工程pom&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&qu…