无人机|LQR控制算法及其无人机控制中的应用仿真

前言

LQR全称Linear Quadratic Regulator(线性二次调节器),顾名思义用于解决形如
x ˙ = A x + B u y = C x + D u \begin{aligned}\dot{x}&=Ax+Bu\\y&=Cx+Du\end{aligned} x˙y=Ax+Bu=Cx+Du
线性时不变系统的一种线性控制方法,是最优控制方法的一种。
LQR通过全状态反馈将不同状态加权求和得到最优控制量,本文所讨论的是无限时间LQR问题,即可以保证系统是渐进稳定的,不考虑收敛时间。该方法主要思想是构造以状态量以及控制量相关的二次代价函数,通过最小化该代价函数寻找成本最低的解。

LQR基本原理

考虑形如
x ˙ = A x + B u y = C x + D u \begin{aligned}\dot{x}&=Ax+Bu\\y&=Cx+Du\end{aligned} x˙y=Ax+Bu=Cx+Du的系统
其中控制量满足
u = − K x u=-Kx u=Kx
K为反馈矩阵
考虑无穷时间内的代价函数,由于系统无稳态误差,故时间趋于无穷时终端约束项为0
构造代价函数为
m i n J = 1 2 ∫ 0 ∞ ( x T Q x + u T R u ) d t , Q = Q T , R = R T , Q ≥ 0 , R > 0 min J=\frac1{2}\int_0^\infty(x^TQx+u^TRu)dt,Q=Q^T,R=R^T,Q\geq0,R>0 minJ=210(xTQx+uTRu)dt,Q=QT,R=RT,Q0,R>0
一般地,Q和R均为正定对角阵。
求解该代价函数最小时所对应的K矩阵,即可求得最优控制量。
matlab中可以直接使用工具包求解,如

K=lqr(A,B,Q,R)

公式推导

利用拉格朗日乘子法构造增广泛函
J , = ∫ 0 ∞ ( 1 2 ( x T Q x + u T R u ) + λ T ( A x + B u − x ˙ ) ) d t J^{,}=\int_0^\infty(\frac1{2}(x^TQx+u^TRu)+\lambda^T(Ax+Bu-\dot{x}))dt J=0(21(xTQx+uTRu)+λT(Ax+Bux˙))dt
定义纯量函数,及哈密尔顿函数
H ( x , u , λ , t ) = 1 2 ( x T Q x + u T R u ) + λ T ( A x + B u ) H(x,u,\lambda,t)=\frac1{2}(x^TQx+u^TRu)+\lambda^T(Ax+Bu) H(x,u,λ,t)=21(xTQx+uTRu)+λT(Ax+Bu)
则有
在这里插入图片描述
由变分法可得取极值时应满足控制方程
∂ H ∂ u = 0 \frac{\partial H}{\partial u}=0 uH=0
则有
∂ H ∂ u = R u + B T λ = 0 \frac{\partial H}{\partial u}=Ru+B^T\lambda=0 uH=Ru+BTλ=0

u ∗ = − R − 1 B T λ u^*=-R^{-1}B^T\lambda u=R1BTλ
又u应为关于x得线性表达,且由上式可得此时u为 λ \lambda λ的线性表达,故 λ \lambda λ也应为x的线性表达。

λ = P x \lambda=Px λ=Px
则有
u ∗ = − R − 1 B T P x u^*=-R^{-1}B^TPx u=R1BTPx
又根据正则方程
∂ H ∂ x + λ ˙ = 0 \frac{\partial H}{\partial x}+\dot\lambda=0 xH+λ˙=0
∂ H ∂ λ = x ˙ \frac{\partial H}{\partial \lambda}=\dot x λH=x˙

λ ˙ = − ∂ H ∂ x = − Q x − A T λ = − Q x − A T P x \dot\lambda = -\frac{\partial H}{\partial x} = -Qx-A^T\lambda=-Qx-A^TPx λ˙=xH=QxATλ=QxATPx
x ˙ = ∂ H ∂ λ = A x − B R − 1 B T P x \dot x=\frac{\partial H}{\partial \lambda}=Ax-BR^{-1}B^TPx x˙=λH=AxBR1BTPx
又对 λ = P x \lambda=Px λ=Px两边求导,得
λ ˙ = P ˙ x + P x ˙ \dot\lambda=\dot Px+P\dot x λ˙=P˙x+Px˙
P为常数矩阵时,则有
− Q x − A T P x = P A x − P B R − 1 B T P x -Qx-A^TPx = PAx-PBR^{-1}B^TPx QxATPx=PAxPBR1BTPx
又x为非零矩阵,则有
P A + A T P − P B R − 1 B T P + Q = 0 PA+A^TP-PBR^{-1}B^TP+Q=0 PA+ATPPBR1BTP+Q=0
即为riccati方程
求解该方程可得P
由此可解得 u ∗ = − R − 1 B T P x u^*=-R^{-1}B^TPx u=R1BTPx

仿真

在上篇基础上进行控制器修改
TODO

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

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

相关文章

初识REDHAWK

文章目录 前言一、什么是 REDHAWK?1、概述2、REDHAWK 的应用 二、REDHAWK 的流程管理和交互方法1、流程管理2、数据传输 三、入门1、安装 REDHAWK2、IDE 快速入门①、启动 REDHAWK IDE②、打开 Chalkboard③、创建信号发生器④、测试组件的输入/输出响应 前言 REDHAWK 是一个…

Opencv 绘制线段、矩形、圆形、多边形操作

1、前言 OpenCV提供了许多用于绘制图形的方法 包括绘制线段的line()方法、绘制矩形的 rectangle()方法、绘制圆形的 circle()方法、绘制多边形的 polylines()方法和绘制文字的 putText()方法 本章将依次对上述各个方法进行讲解,并作出相应实验。 因为 OpenCV 中的…

简洁的链式思维(CCoT)提示

原文地址:Concise Chain-of-Thought (CCoT) Prompting 传统的CoT导致了输出令牌使用的增加,而CCoT提示是一种旨在减少LLM响应的冗长性和推理时间的提示工程技术。 2024 年 1 月 24 日 Areas where Chain-Of-Thought-like methodology has been introd…

【C/C++ 学习笔记】函数

【C/C 学习笔记】函数 视频地址: Bilibili 函数结构 返回值类型函数名参数列表函数体语句return 表达式 返回值类型 函数名 (参数列表) {函数体语句;return 表达式; }声明 在函数定义之前声明函数,可以声明多次,但是只能定义依次 返回值类型 函数名…

计算机考研|保姆级择校+资料+全年规划

本科211,研究生上岸某985 计算机考研备考过程中走了不少弯路,希望我的经验能够帮助大家少走弯路 大家决定考研之前,一定要认真思考自己考研的目的是什么,有的人是随大流,别人考研,就跟风考研,有…

JDK 17:Java生态系统的最新巨擘

JDK 17:Java生态系统的最新巨擘 🚀 JDK 17:Java生态系统的最新巨擘 🚀摘要 🌟引言 🌈模块一:性能优化与提升 🔧垃圾回收器的改进:JIT编译器的优化:其他性能优…

Visual Basic6.0零基础教学(2)—vb中类的介绍和基本控件的属性

Visual Basic 6.0中类的介绍和基本控件的属性 文章目录 Visual Basic 6.0中类的介绍和基本控件的属性前言一、对象的有关概念1.类2.对象3.对象的三要素4.5. VB程序的执行步骤 二、基本控件属性1.修改控件属性的练习案例 总结 前言 大家好,昨天我们学习了vb的简单介…

python实现生成树

生成树 生成树(Spanning Tree)是一个连通图的生成树是图的极小连通子图,它包含图中的所有顶点,并且只含尽可能少的边。这意味着对于生成树来说,若砍去它的一条边,则会使生成树变成非连通图;若给…

【学习】pytorch框架的数据管理—— 理解Dataloader

参考:https://spite-triangle.github.io/artificial_intelligence/#/./README 1.标准数据集 使用:以 CIFAR10 数据集为例,其他数据集类似。 # root:数据存放路径 # train:区分训练集,还是测试集 # trans…

前端加密面面观:常见场景与方法解析

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

vue项目部署服务器,因为跨域设置nginx.config要修改的配置

下面是我在vue项目中vite.config.js设置的配置代理 对于部署项目需要使用nginx进行vue项目的话,需要对nginx的配置文件进行如下修改即可

Linux:线程互斥与同步

目录 线程互斥 锁的初始化 加锁 解锁 锁的初始化 锁的原理 死锁 线程同步 方案一:条件变量 条件变量初始化 等待 唤醒 条件变量的代码示例 基于阻塞队列的生产消费模型 方案二:POSIX信号量 初始化信号量: 销毁信号量 等待信…

动态规划|【路径问题】|174.地下城游戏

题目 174. 地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健…

map和set(二)——AVL树的简单实现

引入 二叉搜索树有其自身的缺陷,假如往树中 插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此 map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。简…

可免费使用的AI平台汇总 + 常用赋能科研的AI工具推荐

赋能科研,AI工具助你飞跃学术巅峰!(推荐收藏) 文章目录 赋能科研,AI工具助你飞跃学术巅峰!(推荐收藏)一、可免费使用的AI平台汇总1. ChatGPT2. New Bing3. Slack4. POE5. Vercel6. 其他平台7. 特定功能平台8. 学术资源平台9. 中文…

14 OpenCv边缘处理

文章目录 卷积边界问题边缘处理copyMakeBorder 算子代码 卷积边界问题 图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘…

华为OD机试C卷“跳步-数组”Java解答

描述 示例 算法思路1 不断移动数组将元素删去(并未彻底删除,而是将数字元素前移实现“伪删除”)这样删除元素的位置就呈现一定规律,详细见下图(潦草的画) 答案1 import java.util.*;public class Main {…

蓝桥杯刷题5--GCD和LCM

目录 1. GCD 1.1 性质 1.2 代码实现 2. LCM 2.1 代码实现 3. 习题 3.1 等差数列 3.2 Hankson的趣味题 3.3 最大比例 3.4 GCD 1. GCD 整数a和b的最大公约数是能同时整除a和b的最大整数,记为gcd(a, b) 1.1 性质 GCD有关的题目一般会考核GCD的性质。   …

国家医保局开通异地就医备案办理功能,哪些人群适用?

2022年6月30日,国家医保局会同财政部印发《关于进一步做好跨省异地就医基本医疗保险直接结算工作的通知》(民保发〔2022〕30号)。 22号文(以下简称《通知》)。 《通知》明确,长期跨省异地居住或临时跨省外出…

PostgreSQL数据优化——死元组清理

最近遇到一个奇怪的问题,一个百万级的PostgreSQL表,只有3个索引。但是每次执行insert或update语句就要几百ms以上。经过查询发现是一个狠简单的问题,数据库表死元组太多了,需要手动清理。 在 PG 中,update/delete 语句…