当前位置: 首页 > news >正文

无人机|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

相关文章:

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

前言 LQR全称Linear Quadratic Regulator(线性二次调节器),顾名思义用于解决形如 x ˙ A x B u y C x D u \begin{aligned}\dot{x}&AxBu\\y&CxDu\end{aligned} x˙y​AxBuCxDu​ 线性时不变系统的一种线性控制方法,…...

ubuntu环境下docker容器详细安装使用

文章目录 一、简介二、ubuntu安装docker1.删除旧版本2.安装方法一3. 安装方法二(推荐使用)4.运行Docker容器5. 配置docker加速器 三、Docker镜像操作1. 拉取镜像2. 查看本地镜像3. 删除镜像4. 镜像打标签5. Dockerfile生成镜像 四、Docker容器操作1. 获取…...

vue2源码分析-vue入口文件global-api分析

文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…...

Javascript原型 ,原型链如何理解使用 ?有什么特点?

文章目录 图解原型原型链总结有需要的请私信博主,还请麻烦给个关注,博主不定期更新,或许能够有所帮助!!请关注公众号 图解 原型 常被描述为 — 种基于原型的语言–每个对象拥有一个原型对象 当试图访问 一个对象的属性…...

Flutter混合栈管理方案对比

1.Google官方(多引擎方案) Google官方建议的方式是多引擎方案,即每次使用一个新的FlutterEngine来渲染Widget树,存在的主要问题是每个引擎都要有比较大的内存等资源消耗,虽然Flutter 2.0之后的FlutterEngineGroup通过在…...

Asp .Net Core 集成 Newtonsoft.Json

简介 Newtonsoft.Json是一个在.NET环境下开源的JSON格式序列化和反序列化的类库。它可以将.NET对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为.NET对象。这个类库在.NET开发中被广泛使用,因为它功能强大、易于使用,并且有良好的性能。 使用Newtonsoft.Json,…...

GPT对话知识库——ARM-Cortex架构分为哪几个系列?每个系列有几种工作模式?各种工作模式之间的定义和区别?每种架构不同的特点和应用需求?

目录 1,问: 1,答: 2,问: 2,答: Cortex-A系列 Cortex-R系列 Cortex-M系列 3,问: 3,答: ARM Cortex-A架构 ARM Cortex-R架构…...

795. 前缀和(acwing)

文章目录 795.前缀和题目描述前缀和 795.前缀和 题目描述 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数&a…...

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 这是教程中的一个函数,通过汇编来实现的。注释部分以及结合后面的讲解部分,可能还是有一点点细节的地方让初学者疑惑。我结合我自己的理解…...

图论练习5

Going Home Here 解题思路 模板 二分图最优匹配,前提是有完美匹配(即存在一一配对)左右集合分别有顶标,当时,为有效边,即选中初始对于左集合每个点,选择其连边中最优的,然后对于每…...

[C++] Volatile 和常量Const优化

Volatile的作用 volatile 表明某个变量的值可能在外部被改变&#xff0c;因此对这些变量的存取不能缓存到寄存器&#xff0c;每次使用时需要重新存取。 Const 和 Volatile的示例 示例1 int main() {const int a 1;int* pa const_cast<int*>(&a);*pa 4;cout &l…...

嵌入式学习day32 网络

htons()&#xff1b;//host to network short 将端口号转换为网络通信中的大端存储 eg:htons(50000); ntohs()&#xff1b;//host to network short 将大端存储转换为主机端口号 inet_addr();将IP地址转换为二进制 eg:inet_addr(192.168.1.170)&#xff1b; inet_ntoa()…...

算法D33 | 贪心算法3 | 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果

1005.K次取反后最大化的数组和 本题简单一些&#xff0c;估计大家不用想着贪心 &#xff0c;用自己直觉也会有思路。 代码随想录 Python: class Solution:def largestSumAfterKNegations(self, nums: List[int], k: int) -> int:nums.sort(keylambda x: abs(x), reverseT…...

html地铁跑酷

下面是一个简单的HTML代码来展示一个地铁跑酷游戏&#xff1a; <!DOCTYPE html> <html> <head><title>地铁跑酷</title><style>#player {position: absolute;top: 0;left: 0;width: 50px;height: 50px;background-color: red;}</style…...

利用GPT开发应用001:GPT基础知识及LLM发展

文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下&#xff0c;您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子&#xff1f;您可以创建哪些应用程序&#xff1f;这正是OpenAI正在助力构建的世界&#x…...

Golang Ants 构建协程池

构建的协程池实现两个目标&#xff1a; 1、限制协程池里开启的协程数量 2、当任务数大于协程数时&#xff0c;一个协程可以同时处理多个任务 3、监控是哪个协程ID处理了具体的任务 package mainimport ("fmt""runtime""strconv""string…...

【金三银四】面试题汇总(持续编写中)

Java八股文面试题汇总&#xff08;持续编写中~&#xff09; Java基础集合JUCJVM 数据库MySQLRedis 框架篇SSMSpringBoot 数据结构与算法数据结构与算法--汇总篇27道基础算法题&#xff0c;学完让你对算法有豁然开朗的感觉&#xff08;推荐小白&#xff09; 消息中间件RabbitMQK…...

Hive的数据存储

Hive的数据存储在HDFS的&#xff1a;/user/hive/warehouse中 The /user folder in HDFS is a directory typically used to store user-specific data and configurations. It serves as the home directory for Hadoop users, analogous to the /home directory in Unix-like …...

ORACLE 如何使用dblink实现跨库访问

dbLink是简称&#xff0c;全称是databaselink。database link是定义一个数据库到另一个数据库的路径的对象&#xff0c;database link允许你查询远程表及执行远程程序。在任何分布式环境里&#xff0c;database都是必要的。另外要注意的是database link是单向的连接。在创建dat…...

Sentinel 面试题及答案整理,最新面试题

Sentinel的流量控制规则有哪些&#xff0c;各自的作用是什么&#xff1f; Sentinel的流量控制规则主要包括以下几种&#xff1a; 1、QPS&#xff08;每秒查询量&#xff09;限流&#xff1a; 限制资源每秒的请求次数&#xff0c;适用于控制高频访问。 2、线程数限流&#xf…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...