LQR控制算法推导以及简单分析

2023-05-16

首先,这篇文章是看了几个大神的博客后,自己抄录以及整理的内容,其中有些自己的想法,但是原理部分基本都是学习大神们的,在此先说明一下。

1 全状态反馈控制系统

在介绍LQR之前,首先,先回顾一下现在控制理论中的基本的控制器 —————— 全状态反馈控制,上图
在这里插入图片描述
假设有一个线性系统用状态向量表示:
{ x ˙ = A x + B u y = C x + D u (1) \begin{cases} \dot{x} = Ax + Bu & \\ y = Cx + Du & \end{cases} \tag{1} {x˙=Ax+Buy=Cx+Du(1)
其中, x ( t ) ∈ R n x(t) \in R^n x(t)Rn u ( t ) ∈ R m u(t) \in R^m u(t)Rm,初始条件是 x ( 0 ) x(0) x(0)
在此,我们需要设计一个状态反馈控制器
u = − K x (2) u = -Kx \tag{2} u=Kx(2)
使上述控制器能达到期望的稳定性能,将式(2)带入系统状态方程(1)中,有
x ˙ = ( A − B K ) x = A c x (3) \dot{x} = (A - BK)x = A_{c}x \tag{3} x˙=(ABK)x=Acx(3)
设定系统中的各个状态量都可知,式(1)所示的开环系统,传递函数的极点就是系统矩阵A的特征值。现在变换成了式(2)的闭环形式,通过配置反馈矩阵 K K K,可以使得闭环系统达到所期望的系统状态。(注意,这种控制器设计与矩阵C、D没什么关系)
SO,来了一个新的问题,极点在什么样的位置会使得系统的性能较好呢?并且,当系统变量很多的时候,就算设计极点已经达到了最优,矩阵K的计算如何计算呢?
因此,LQR提供了如下思路。

2 LQR

LQR的目标就是找到一组控制量 u 0 , u 1 , . . . u_0,u_1,... u0,u1,...,使得同时有 x 0 , x 1 , . . . x_0,x_1,... x0,x1,...足够小(系统达到稳定状态), u 0 , u 1 , . . . u_0,u_1,... u0,u1,...足够小(控制量尽量小的变化),选取代价函数为
J = 1 2 ∫ 0 ∞ x T Q x + u T R u   d t (4) J = {1 \over 2}\int_0^\infty {x^TQx + u^TRu} \space dt \tag{4} J=210xTQx+uTRu dt(4)
其中,Q、R就是需要设计的半正定矩阵和正定矩阵。
看上式(4)是不是线代中的二次型(线代真的是一门重要的学科,工程中大量都是线代的运算),而且还是那种只有平方项的二次型,这样就成了最小二乘法的问题。代价函数 J J J需要达到最小值,那么在 t t t趋近于无穷时,状态向量 x ( t ) x(t) x(t)肯定趋近于0,即是达到了系统稳态;同理, t t t趋近于无穷时,控制向量 u ( t ) u(t) u(t)也会趋近于0,意味着,随着时间的推移,需要对系统施加的控制量会越来越小,意味着使用最小的控制量使得系统达到了最终控制目标。

下面来聊聊Q、R值的选取,一般来说,选取Q、R矩阵的时候,为了方便观察各个系统状态量而选取对角阵,增加Q的一个值,意味着这个值作用的系统状态量,将以更快的速度衰减到0,这时候,举个栗子还是很必要的,比如, Q 11 Q_{11} Q11选取较大的值,会让 x 1 x_1 x1很快的衰减到0;另外一方面,加大 R R R的值,会使得对应的控制量减小,控制器执行更少的动作,意味着系统的状态衰减将变慢。所以, Q 、 R Q、R QR的选取,要综合看具体的实际应用场景来调节,俗话说,鱼和熊掌不可兼得,这个矛盾就像做的轨迹跟踪MPC中的设置不同的权重一样,期望车辆后轴心cte值越小,那么到了转弯处必须要很大幅度的刹车,以及打方向盘,速度以及yaw都会大幅度变化,而如果期望执行器动作越小,那么就无法保证cte的准确度一样。

好了,上面介绍了一些参数的意义问题,下面重点就是公式的推导了,在不同大神那看到了不同的推导方式,下面就把自己比较欣赏的一种写出来吧,虽说过程也很重要,但是工程嘛,只要结果对,效果好,选个自己看起来舒服的方式就好了,开始推导过程

  1. u = − K x u = -Kx u=Kx代入代价函数后,有
    J = 1 2 ∫ 0 ∞ x T ( Q + K T R K ) x   d t (5) J = {1 \over 2}\int_0^\infty x^T(Q + K^TRK)x \space dt \tag{5} J=210xT(Q+KTRK)x dt(5)
  2. 假设纯在一个常量矩阵 P P P使得,
    d d t ( x T P x ) = − x T ( Q + K T R K ) x (6) {d \over dt}(x^TPx) = - x^T(Q + K^TRK)x \tag{6} dtd(xTPx)=xT(Q+KTRK)x(6)
  3. 把式(6)代入(5)后,有
    J = − 1 2 ∫ 0 ∞ d d t x T ( P ) x   = 1 2 x T ( 0 ) P x ( 0 ) (7) J = -{1 \over 2}\int_0^\infty \frac{d}{dt}x^T(P)x \space = {1 \over 2}x^T(0)Px(0) \tag{7} J=210dtdxT(P)x =21xT(0)Px(0)(7)
    式(7)的意思就是,t趋近于无穷时,系统状态向量x(t)趋近于0,这样就直接结算出了积分方程。
  4. 把式(6)左边微分展开,
    x ˙ T P x + x T P x ˙ + x T Q x + x T K T R K x = 0 \dot{x}^{T}Px + x^{T}P\dot{x}+x^TQx+x^TK^TRKx = 0 x˙TPx+xTPx˙+xTQx+xTKTRKx=0
    状态变量x的微分用式(3)表示,
    x T A c T P x + x T P A c x + x T Q x + x T K T R K x = 0 x^{T}A^{T}_cPx+x^{T}PA_{c}x+x^TQx+x^TK^TRKx = 0 xTAcTPx+xTPAcx+xTQx+xTKTRKx=0
    整理后,有
    x T ( A c T P + P A c + Q + K T R K ) x = 0 (8) x^{T}(A^{T}_{c}P+PA_{c}+Q+K^{T}RK)x=0 \tag{8} xT(AcTP+PAc+Q+KTRK)x=0(8)
    这样,就又回到了二次型的问题,如果式(8)要有解,那么括号里面的部分必须等于0.
    A c T P + P A c + Q + K T R K = 0 (9) A^{T}_{c}P+PA_{c}+Q+K^{T}RK = 0 \tag{9} AcTP+PAc+Q+KTRK=0(9)
    A c = A − B K A_c = A-BK Ac=ABK代入式(9)
    ( A − B K ) T P + P ( A − B K ) + Q + K T R K = 0 (10) (A-BK)^{T}P+P(A-BK)+Q+K^{T}RK = 0 \tag{10} (ABK)TP+P(ABK)+Q+KTRK=0(10)
    A T P + P A + Q + K T R K − K T B T P − P B K = 0 (11) A^{T}P+PA+Q+K^{T}RK-K^{T}B^{T}P-PBK=0 \tag{11} ATP+PA+Q+KTRKKTBTPPBK=0(11)
  5. 式(11)还是一个关于 K K K的二次型,这样会导致计算量太复杂,so只要这个等式成立就好,那么这里令 K = R − 1 B T P K = R^{-1}B^TP K=R1BTP,然后式(11),可以化为
    A T P + P A + Q + K T R ( R − 1 B T P ) − K T B T P − P B ( R − 1 B T P ) = 0 A^{T}P+PA+Q+K^{T}R(R^{-1}B^TP)-K^{T}B^{T}P-PB(R^{-1}B^TP)=0 ATP+PA+Q+KTR(R1BTP)KTBTPPB(R1BTP)=0
    A T P + P A + Q − P B R − 1 B T P = 0 (12) A^{T}P+PA+Q-PBR^{-1}B^TP=0 \tag{12} ATP+PA+QPBR1BTP=0(12)
    式(12)中, A , B , Q , R A,B,Q,R A,B,Q,R都是已知量,那么通过式(12)可以求解出 P P P,式(12)就是著名的Riccati方程。

总结

上面,从理论以及公式推导两个方面,介绍了LQR,现在从头看一下LQR的思路:

  • 选择参数矩阵Q,R
  • 求解Riccati方程得到矩阵P
  • 根据P计算 K = R − 1 B T P K=R^{-1}B^{T}P K=R1BTP
  • 计算控制量 u = − K x u=-Kx u=Kx

MPC与LQR比较

MPC和LQR两种控制方式有很多的相似之处,但是也有很多不相同的地方,

  • 首先,LQR的研究对象是现代控制理论中的状态空间方程给出的线性系统,而MPC的研究对象可以是线性系统,也可以是非线性系统。不过现在很多的做法都是将非线性系统线性化,然后进行相关计算,具体要根据自己的工程情况来确定哪种方式比较好,比如之前做MPC的时候,线控车底层速度控制接口就是加速度,那就没必要根据IMU再套嵌个一层PID。
  • 其次,既然是优化问题,那就离不开目标函数的设计,LQR的目标函数在上面已经有描述,MPC的目标函数,多数都是多个优化目标乘以不同权重然后求和的方式。虽然方式不同,不过都是对达到控制目标的代价累计。
  • 最后,工作时域上的不同,LQR的计算针对同一工作时域,在一个控制周期内,LQR只计算一次,并将此次计算出的最优解下发给控制器即可;而MPC是滚动优化的,计算未来一段时间内,每个采样周期都会经过计算,得出一组控制序列,但是只将第一个控制值下发给控制器。

Reference:

  1. F.L. Lewis .<< Linear Quadratic Regulator (LQR) State Feedback Design >>
  2. https://blog.csdn.net/u013914471/article/details/84324754?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  3. https://zhuanlan.zhihu.com/p/72605138
  4. https://blog.csdn.net/heyijia0327/article/details/39270597
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LQR控制算法推导以及简单分析 的相关文章

  • Visual studio C++:LQR轨迹跟踪仿真

    前言 xff1a 因为工作需要开始学习车辆横纵向控制 xff0c 然后学到了LQR xff0c 正好写一个博客把程序保存下来 为了加强C 43 43 代码能力 xff0c 本次仿真的所有文件均用C 43 43 完成 代码结构梳理 开始之前非
  • 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
  • PID/LQR/MPC自行总结使用

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

    目录 前言 一 知识点补充 1 拉格朗日乘子法 2 积分中值定理 3 向前欧拉法 xff0c 向后欧拉法 xff0c 中点欧拉法 4 向量的导数 5 矩阵求逆引理 记住就好 xff0c 推导见链接 二 连续时间下的LQR推导 1 系统状态方
  • 使用PID和LQR控制器进行多旋翼飞行器控制

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

    LQR全称为Linear Quadratic Regulator xff0c 即线性二次型调节器 xff08 一 xff09 有限时域最优调节器设计 设线性系统 被控对象的离散化状态方程为 xff1a 初始条件 给定二次型性能指标函数 xf
  • 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
  • LQR制导

    LQR制导 引言 在ardupilot中固定翼飞机横航向位置控制 xff08 制导律 xff09 采用L1制导律 xff0c 最近想将一些其他的控制理论用于ardupilot代码中 xff0c 通过ardupilot论坛 xff0c 看到已
  • LQR控制器——简单实现与仿真

    对B站一位良心up主的视频学习总结 安利 https www bilibili com video BV1RW411q7FD spm id from trigger reload 对于可镇定的线性系统 x A x B u dot x Ax
  • [现代控制理论]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

随机推荐

  • Jetson TX2的各种坑.md

    最近在使用Jetson TX2 在跑实验 xff0c 然后遇到下面问题 xff0c 做笔记 xff0c 记录一下 内存出错无法 xff0c 中断 出现下面那种错误 2019 01 11 19 41 46 959970 E tensorflo
  • 基于STM32的FreeRTOS开发(1)----FreeRTOS简介

    为什么使用freertos FreeRTOS 是一个免费和开源的实时操作系统 xff0c 它主要用于嵌入式系统 它非常轻量级 xff0c 可以在很小的硬件资源上运行 xff0c 因此非常适合在限制硬件资源的嵌入式系统中使用 FreeRTOS
  • 获奖公布 | 征文——从高考到程序员

    每年的这几天 xff0c 空气中总会弥漫着紧张的味道 xff0c 2017 全国统一高考如期而至 朋友圈里的各种高考热文如流水般 xff0c 不停歇地出现在眼前 xff0c 难免会勾起自己曾经的青涩时光 还记得 xff0c 考试前 xff0
  • STM32驱动ESP8266连接阿里云(2)----接入阿里IoT Studio实现Web可视化

    烧录MQTT固件 概述 阿里IoT Studio是一个物联网开发平台 xff0c 可用于快速构建基于云端的物联网应用 它提供了丰富的物联网组件和工具 xff0c 使得开发者可以轻松地进行设备接入 数据存储 数据分析等操作 要实现Web可视化
  • ‘gbk‘ codec can‘t encode character解决方法

    一 问题 xff1a 在将网络数据流导入文件时 xff0c 有可能遇到 39 gbk 39 codec can 39 t encode characte 错误 二 分析 xff1a 1 在windows下面 xff0c 新文件 xff08
  • ROS中的tf(transform)的理解 ,你追我小乌龟的深入剖析

    对于ros中的tf其实一直理解不是很深 xff0c 最近工作上一直在用 xff0c 就很懵逼 xff0c 出来混果然是要还的 xff5e 于是这两天把ros官方提供的小乌龟版的你追我 xff0c 如果你追到我 xff0c 我就让你xxx x
  • 线程同步之信号量(sem_init,sem_post,sem_wait)

    信号量和互斥锁 mutex 的区别 xff1a 互斥锁只允许一个线程进入临界区 xff0c 而信号量允许多个线程同时进入临界区 不多做解释 xff0c 要使用信号量同步 xff0c 需要包含头文件semaphore h 主要用到的函数 xf
  • 老程序员给的10条建议,句句经典

    1 想清楚 xff0c 再动手写代码 刚入行的新手 xff0c 为了展示自己的能力 xff0c 拿到需求迫不及待地就开始上手写代码 xff0c 大忌 xff01 2 不交流 xff0c 就会头破血流 不爱说话和沟通 xff0c 需求都理解错
  • Clickhouse快速上手 原理篇

    1 背景 公司目前使用Greenplum作为报表实时聚合查询的OLAP数据库 xff0c 当时主要是其使用门槛相对较低 xff0c 同时支持事务 xff0c 能在用户访问时候事务更新数据 xff0c 使用云厂商的产品 xff0c 技术支持也
  • Clickhouse快速上手 使用篇

    接着clickhouse原理篇 xff0c 下面来介绍他的具体使用场景 xff0c 包括数据导入 xff0c 更新等 文章目录 1 数据导入调研计划实施1 cos文件系统集成2 编码获取 2 数据更新和使用 1 数据导入 根据官方介绍 Cl
  • linux基本服务之sshd

    这段时间在学习linux常用服务 xff0c 这里将学习内容以及自己的实验心得记录下来 在自己忘记的时候也好复习 实验环境 xff1a centos 6 7 64bit 1 简介 SSHD服务 介绍 xff1a SSH协议 xff1a 安全
  • Git+VSCode基本使用

    前言 由于工作需要 xff0c 最近简单学习了git xff0c 巧合发现了VSCODE编辑器正好集成了git命令 xff0c 使得本地代码管理变得更加容易 因为最后是在linux下交叉编译 xff0c 但是我更习惯windows下写代码
  • 掌握音频开发基础知识

    文章目录 基本概念几种CODEC介绍实时调度相关缓冲区两种类型编写要点遇到的问题 解码能力的自适应混音模块回声消除的延时控制能量统计双声道支持ALSA设备 代码相关 基本概念 采样率 Hz 每秒去取样本的个数 xff0c eg 48000H
  • CSDN日报20170616 ——《从裁缝到码农》

    程序人生 从裁缝到码农 作者 xff1a 修电脑的裁缝酱 我伸出颤抖的手去抓 xff0c 发现曾经遥不可及的梦想 xff0c 经过坚持和努力之后 xff0c 真的可以抓住 我把它抓在手心 xff0c 紧紧地 点击阅读全文 机器学习 一文了解
  • Java中char类型详解

    1 基本定义 char类型的值可以表示为十六进制值 xff0c 其范围从 u0000 到 uffff xff0c 由两个字节构成 char类型原本用于表示单个字符 xff0c 但是现在情况有所变化 xff0c 有些Unicode字符需要一个
  • Git命令行简单使用小结

    最近复习了一下git 总结了一下命令行的基本使用 0 基本理论 a 基本概念 Working Directory 就是平时存放项目代码的地方 Stage Index 用于临时存放改动 事实上他只是一个文件 保存即将提交的文件列表信息 Rep
  • 无外接环境下,单笔记本直连浪潮服务器BMC灌装系统

    1 环境因素 xff1a 单服务器无网络无显示器等外接 xff0c 需要对浪潮防火墙灌装系统 xff1b 2 所需材料 xff1a 1 浪潮服务器 2 可接网线笔记本电脑 xff08 Windows平台 xff09 3 网线一根 3 连接拓
  • python抽样方法详解及实现

    抽样方法概览 随机抽样 总体个数较少 每个抽样单元被抽中的概率相同 xff0c 并且可以重现 随机抽样常常用于总体个数较少时 xff0c 它的主要特征是从总体中逐个抽取 1 抽签法 2 随机数法 xff1a 随机数表 随机数骰子或计算机产生
  • ROS 1.0 学习笔记(6)CMakeLists.txt 使用说明

    ROS1中每个PKG的配置都是在CMakeList txt中 xff0c 本文从官方 WiKi 资料中翻译而来 1 概览 文件CMakeLists txt是CMake编译系统的配置文件 xff0c 用于配置需要编译软件包 任何兼容CMake
  • LQR控制算法推导以及简单分析

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