LQR控制基本原理(包括Riccati方程具体推导过程)

2023-05-16

全状态反馈控制系统

\left\{\begin{matrix} \dot{x}=Ax+Bu\\ y=Cx+Du \end{matrix}\right.

状态反馈控制器     

 u=-kx=-[k_{1},k_{2},\cdots]\begin{bmatrix} x_{1}\\ x_{2}\\ \vdots \end{bmatrix}

\dot{x}=Ax-Bkx=(A-Bk)x=A_{cl}x

通过选择K,可以改变A_{cl}的特征值,进而控制系统表现。

LQR控制器

最优控制,其本质就是让系统以某种最小的代价来让系统运行,当这个代价被定义为二次泛函,且系统是线性的话,那么这个问题就称为线性二次问题,设计的控制器(即问题的解)可以称为LQR(Linear Quadratic Regulator)线性二次调节器。

1、连续时间

代价函数

J=\int_{0}^{\infty }(x^{T}Qx+u^{T}Ru)dt,Q=Q^T,R=R^T,Q\geqslant 0,R\geqslant 0

一般来说,Q阵和R阵为单位对角阵,对角阵上的元素对应着不同状态量和控制量的权重大小,越大说明我们设计时对于该量的重视程度越大,即希望这个量在变化过程中保持较小的值,换种说法就是对于该量的“惩罚”越大。积分号说明从开始控制起到最终无限时间代价函数值的累积,因为是二次的,所以代价始终大于0,最终趋于0,我们的设计目标就是得到一系列的控制序列使代价累积的最小。

具体推导过程

u=-kx代入代价函数J,有

J=\int_{0}^{\infty }x^{T}(Q+K^{T}RK)xdt

假设存在一个常量矩阵P使得

\frac{\mathrm{d} }{\mathrm{d} t}(x^TPx)=-x^{T}(Q+K^{T}RK)x

将上式左侧微分展开

\frac{\mathrm{d} }{\mathrm{d} t}(x^TPx)=\dot{x}^TPx+x^TP\dot{x}=-x^{T}(Q+K^{T}RK)x

代入控制量\dot{x}=(A-BK)x可以整理得到

A^TP+PA+Q-K^TB^TP-PBK+K^TRK=0

观察上面的等式,A,B,Q,R,P都是常值矩阵,唯一可变的是K阵,所以问题转换为找到一个K使得代价函数最小,一种思路是如果我们可以把含有K的部分转换成类似(M+N)^T(M+N)的结构,那么要使代价最小,只需使M+N=0,那么K便可以求出。

R=T^TT代入上式中,可以得到

A^TP+PA+Q-K^TB^TP-PBK+K^TT^TTK=0

-K^TB^TP-PBK+K^TT^TTK用待定系数法化成目标形式M^TM+M^TN+N^TM+N^TN,可得

M=-(T^{-1})^TB^TP,N=TK

-K^TB^TP-PBK+K^TT^TTK=(M+N)^T(M+N)-PBR^{-1}B^TP

令​​​​​​​TK-(T^{-1})^TB^TP=0解出

K=R^{-1}B^TP

代入Riccati方程中化简后得

A^TP+PA-PBR^{-1}B^TP+Q=0

设计步骤

  • 选择Q、R参数矩阵
  • 求解Riccati方程A^TP+PA-PBR^{-1}B^TP+Q=0得到矩阵P
  • 计算增益K=R^{-1}B^TP得到反馈控制量u=-kx

2、离散时间

离散系统

x(K+1)=Ax(k)+Bu(k)

代价函数

J=\sum_{k=1}^{N}(x^TQx+u^TRu)

设计步骤

  • 确定迭代范围N
  • 设置迭代初始值P_{N}=Q
  • t=N,\cdots ,1从后向前循环迭代求解离散时间的代数RIccati方程

​​​​​​​​​​​​​​P_{t-1}=Q+A^TP_{t}A-A^TP_{t}B(R+B^TP_{t+1}B)^{-1}B^TP_{t}A​​​​​​​ 

  •  t=0,\cdots ,N​​​​循环计算反馈系数K_{t}=(R+B^TP_{t+1}B)^{-1}B^TP_{t+1}A并得到控制量

u_{t}=-K_{t}x_{t}​​​​​​​ 

 参考资料:LQR最优控制方法小结 - 知乎

【控制理论】离散及连续的LQR控制算法原理推导_CHH3213的博客-CSDN博客_lqr控制

【Advanced控制理论】8_LQR 控制器_状态空间系统Matlab/Simulink建模分析_哔哩哔哩_bilibili

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LQR控制基本原理(包括Riccati方程具体推导过程) 的相关文章

  • Apollo代码学习(七)—MPC与LQR比较 (百度Apollo中用到了PID、MPC和LQR三种控制器)

    摘自 xff1a https blog csdn net u013914471 article details 84324754 Apollo代码学习 七 MPC与LQR比较 follow轻尘 2018 11 29 17 32 56 179
  • 我已经多次看到说LQR和MPC相似

    https zhuanlan zhihu com p 139145957 https blog csdn net sinat 16643223 article details 109707776
  • 基于LQR的一阶倒立摆控制仿真

    1 LQR简介 LQR linear quadratic regulator 即线性二次型调节器 xff0c 其对象是现代理论中以状态空间形式给出的线性系统 LQR最优设计是指设计出的状态反馈控制器 K要使二次型目标函数J 取最小值 而 K
  • matlab求解lqr法的Q和R矩阵,基于MATLAB的LQR控制器设计方法研究

    邮局订阅号 xff1a 82 946 360 元 年 技术创新 控制系统 PLC 技术应用 200 例 您的论文得到两院院士关注 基于 MATLAB 的 LQR 控制器设计方法研究 Research of LQR Controller De
  • MPC,PID,LQR,DDP算法

    算法原理 xff1a
  • LQR控制基本原理(包括Riccati方程具体推导过程)

    全状态反馈控制系统 状态反馈控制器 通过选择K xff0c 可以改变的特征值 xff0c 进而控制系统表现 LQR控制器 最优控制 xff0c 其本质就是让系统以某种最小的代价来让系统运行 xff0c 当这个代价被定义为二次泛函 xff0c
  • PID/LQR/MPC自行总结使用

    PID LQR MPC自行总结使用 自学控制相关知识 xff0c 已经一年多了 xff0c 现在回头看看还是有很多模糊不明确的地方 xff0c 准备借此机会进行总结一下 xff0c 第一次写博客 xff0c 如果错误和不合理之处 xff0c
  • 无人驾驶-控制-LQR(运动学)

    无人驾驶 控制 LQR xff08 运动学 xff09 一 车辆建模 二 参考轨迹 利用泰勒展开 xff0c 进行线性化 xff1a 离散化处理 对离散后的式子进行处理 xff0c 得到X k 43 1 的表达式 综上 xff1a 由于系统
  • LQR控制算法推导以及简单分析

    首先 xff0c 这篇文章是看了几个大神的博客后 xff0c 自己抄录以及整理的内容 xff0c 其中有些自己的想法 xff0c 但是原理部分基本都是学习大神们的 xff0c 在此先说明一下 1 全状态反馈控制系统 在介绍LQR之前 xff
  • 使用PID和LQR控制器进行多旋翼飞行器控制

    任务内容 通过调整PID和LQR控制器以实现稳定悬停的多旋翼飞行器 xff0c 运用在无论是在仿真中还是在实际系统中 参考内容 LQR控制部分基础参考内容 xff1a LQR控制器 参考链接 xff1a Linear Quadratic R
  • LQR控制律设计

    LQR全称为Linear Quadratic Regulator xff0c 即线性二次型调节器 xff08 一 xff09 有限时域最优调节器设计 设线性系统 被控对象的离散化状态方程为 xff1a 初始条件 给定二次型性能指标函数 xf
  • 路径跟踪之LQR控制算法

    xff08 一 xff09 车辆建模 两自由度车辆模型为 xff1a 考虑恒定不变 xff0c 则上述模型可以看作一个输入为 状态变量为的控制系统 xff0c 可以表示为 xff1a 对于参考轨迹 xff0c 可以表示为 xff1a 将 x
  • MPC与LQR的详细对比分析

    从以下几个方面进行阐述 xff1a 一 xff0c 研究对象 xff1a 是否线性 二 xff0c 状态方程 xff1a 离散化 三 xff0c 目标函数 xff1a 误差和控制量的极小值 四 xff0c 工作时域 xff1a 预测时域 x
  • Apollo代码学习(七)—MPC与LQR比较

    Apollo代码学习 MPC与LQR比较 前言研究对象状态方程工作时域目标函数求解方法 前言 Apollo中用到了PID MPC和LQR三种控制器 xff0c 其中 xff0c MPC和LQR控制器在状态方程的形式 状态变量的形式 目标函数
  • 百度Apollo 2.0 车辆控制算法之LQR控制算法解读

    百度Apollo 2 0 车辆控制算法之LQR控制算法解读 Apollo 中横向控制的LQR控制算法在Latcontroller cc 中实现 根据车辆的二自由度动力学模型 1 根据魔术公式在小角度偏角的情况下有 轮胎的侧向力与轮胎的偏离角
  • 离散LQR:原理,求解与拓展

    该文档用以总结离散LQR的基本原理 xff0c 反馈控制率的求解和一些拓展 xff08 时变系统 xff0c 跟踪命题等 xff09 主要参考的是Stanford的课程EE363 Linear Dynamical Systems的部分课件
  • Mujoco-欠驱动的二阶单摆的LQR控制

    MuJoCo Lec7 span class token keyword void span span class token function f span span class token punctuation span span c
  • [现代控制理论]11_现代控制理论串讲_完结_pdf获取

    DR CAN的现代控制理论的笔记就结束了 加上这篇一共11篇 现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8
  • [现代控制理论]7_线性控制器设计_Linear Controller Design

    现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8 5 线性控制器设计 轨迹跟踪simulink 现代控制理论 8
  • [现代控制理论]11_现代控制理论串讲_完结_pdf获取

    DR CAN的现代控制理论的笔记就结束了 加上这篇一共11篇 现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8

随机推荐

  • Docker 容器互联

    1 基于 Volume 互联 1 1 存储 Driver Aufs Docker最早支持的driver xff0c 但它只是Linux内核的一个补丁集 Device Mapper xff1a Linux2 6 内核提供的一种从逻辑设备到物理
  • torch.cdist高效计算大矩阵相似度

    问题定义 现有矩阵 A R N C
  • 【剑指offer】二叉搜索树与双向链表

    双向链表从左到右的顺序很明显就是中序遍历二叉树输出的顺序 xff0c 因此核心思想就是使用中序遍历 xff0c 在遍历过程中调整指针的指向 需要用到两个全局变量 xff08 递归的题目不用吝啬全局变量 xff09 xff0c c u r N
  • win10远程计算机

    确保被控制电脑远程功能开启 控制面板 61 61 gt 允许远程访问 选中允许远程连接到此计算机 查看被控制电脑的用户名和ip 命令行 query user xff0c 下面的用户名为远程登录的用户名 密码为改账户的登录密码 xff08 不
  • 【剑指offer】对称的二叉树

    递归法 通过两个指针同时递归遍历左右两个子树 xff0c 判断当前遍历到的两个节点是否相等 如下图 xff0c 需要注意的是 xff0c 左右子树的遍历不是完全一样 xff0c 左子树采用左右遍历 xff0c 右子树采用右左遍历 xff0c
  • 【剑指offer】判断是不是平衡二叉树

    这题只需要在求二叉树深度的基础上扩展一下即可 xff0c 下面为求二叉树深度的代码 span class token keyword public span span class token class name HashMap span
  • Linux查看硬盘属性(机械硬盘/固态硬盘)

    通过命令lsblk d o name rota查看 xff0c 0表示固态硬盘 xff0c 1表示机械硬盘 xff0c sda为机械硬盘 xff0c sdb为固态硬盘
  • python计算众数scipy

    计算如下数组中每一行的众数 xff0c 期望结果 xff0c 第一行为1 xff0c 第二行为3 0 0 1 1 1 2 3 3 2 3 使用scipy 的统计包stats中的mode函数 xff0c 指定第二个维度 xff0c 返回元组
  • 【剑指offer】序列化二叉树

    解题思路 序列化时 xff0c 可以通过各种遍历方法 xff0c 例如层序遍历 递归遍历对二叉树进行遍历 xff0c 遍历过程中将每个节点的值拼接到字符串中 xff0c 注意每个节点之间用一个标识符隔开 xff0c 例如 xff0c 这是为
  • Linux cuda11.1安装torch_scatter,torch-sparse,torch-cluster,torch-spline-conv,torch-geometric

    创建虚拟环境 conda create n torch18 span class token assign left variable python span span class token operator 61 span span c
  • pytorch查看张量占用内存大小

    element size返回单个元素的字节大小 xff0c nelement返回元素个数 span class token keyword import span torch a span class token operator 61 s
  • MySQL8.0 集群安装 (K8S)

    尝试了很多版本的mysql镜像 xff0c 都存在这样那样的的问题 原始需求中 xff0c 需要同时支持x86 64 AMD64 和aarch64 ARM64V8 xff0c 最后找到Oracle官方出品的MySQL Server 8 0镜
  • 使用latex导出IEEE文献格式

    创建一个tex文件 xff0c 内容如下 documentclass span class token punctuation span a4paper span class token punctuation span 10pt span
  • IDEA中设置python解释器(不同虚拟环境)

    按住Ctrl 43 Shift 43 Alt 43 s xff0c 或 File gt Project Structure xff0c 在Module SDK处下拉找到对应的python解释器 xff0c 如果第一次添加python解释器
  • TF-IDF

    TF IDF xff08 term frequency inverse document frequency xff09 是一种用于信息检索与数据挖掘的常用加权技术 TF意思是词频 Term Frequency xff0c IDF意思是逆文
  • 第一次写博客-C/C++软件开发工程师需要学习哪些东西?

    学习路线概述 概述数据结构和算法操作系统计算机网络数据库设计模式 概述 作为一名本科机械电子 xff0c 研究生研究计算机视觉方向的211应届毕业生 xff0c 如何才能从事C C 43 43 软件开发类的工程师呢 xff1f 如果能有机会
  • Vue中使用v-for不能用index作为key值

    今天在改一个项目 xff0c 有一个 lt el tabs gt 的列表循环 xff0c 需要根据权限控制列表项的显示 xff0c 代码如下 xff1a span class token operator lt span template
  • java 冒泡排序 选择排序 插入排序及其异同点

    交换两坐标位置的swap 函数 之后要用到 span class token keyword public span span class token keyword static span span class token keyword
  • 自抗扰(ADRC)控制原理及控制器设计

    自抗扰控制是在PID控制算法基础上进行改进的新型控制方法 xff0c 它具有不依赖于控制对象模型 不区分系统内外扰的结构特点 常用的自抗扰控制器主要由跟踪微分器 xff08 Tracking Differentiator xff0c TD
  • LQR控制基本原理(包括Riccati方程具体推导过程)

    全状态反馈控制系统 状态反馈控制器 通过选择K xff0c 可以改变的特征值 xff0c 进而控制系统表现 LQR控制器 最优控制 xff0c 其本质就是让系统以某种最小的代价来让系统运行 xff0c 当这个代价被定义为二次泛函 xff0c