【模型预测】A-4D战斗机姿态控制的模型预测控制方法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

飞行器姿态控制通过复杂的动力学来描述,这使得该系统的控制算法的设计变得困难。除此之外,战斗机尤其被设计成天生不稳定的,因为这使它们更加敏捷,能够进行侵略性机动。出于这个原因,需要先进的控制技术来确保飞机的稳定性和控制。目前在飞行器和航天器中,姿态控制的许多研究工作都集中在增量非线性动态反演上。

本文研究了一种应用于A-4D战斗机姿态控制的模型预测控制方法。MPC控制器中使用的动力学模型是飞机旋转动力学的线性化。本文考虑了两种类型的MPC控制,即基于状态的参考跟踪MPC和具有扰动抑制的基于输出的参考追踪MPC,并通过稳定性分析证明了跟踪问题的渐近闭环稳定性。

研究发现,A-4D战斗机的线性化姿态动力学是开环稳定的,无论预测地平线长度如何,都会导致稳定性。此外,还发现A-4D战斗机在跟踪特定俯仰角时能够抑制干扰。

📚2 运行结果

主函数部分代码:

clear all
clc
close all
​
%% Data
​
% states = [angle of attack, pitch rate, pitch angle]
​
dt = 0.1;    %time step
T=15;        %simulation time
Nsim = T/dt; %number of simulation steps
​
%Continuous-time model dynamics
​
A = [ -0.5507  1      0;
      -9.7621 -0.9983 0;
       0       1      0 ];              
B = [ -0.0545
      -14.494
      0 ];               
C = [ 0 1 0;
      0 0 1 ];
D = [ 0;  0 ];
​
%Discrete-time model dynamics
​
sys = ss(A, B, C, D);                       %state-space model
sys = c2d(sys, dt);                         %discrete state-space model
​
%LTI system definition
​
LTI.A = sys.A;
​
LTI.B = sys.B;
​
LTI.C = sys.C;
​
LTI.D = sys.D;
              
LTI.x0 = [ 0.0; 0; 0.0 ];
LTI.d = [ 0.0; 0.0 ];
LTI.yref = [ 0.0; 0.0 ];
​
%Definition of system dimension
​
dim.nx = 3;     %state dimension
dim.nu = 1;     %input dimension
dim.ny = 2;     %output dimension
dim.nd = 2;     %disturbance dimension
dim.N =  5;     %horizon
​
%Definition of quadratic cost function
​
weight.Q = diag([10, 10, 500]);                  %weight on output
weight.R = eye(dim.nu);                          %weight on input
weight.P = dare(sys.A,sys.B,weight.Q,weight.R);  %terminal cost
​
%% Observer gain and disturbance matrices
​
K = place(LTI.A',(LTI.C*LTI.A)',[0.85; 0.90; 0.55])';      %tuning gain matrix
L = [K; eye(2)];                                           %observer gain
LTI.Bd = K;
LTI.Cd = eye(2) - C*K;
​
%% Check observability condition
​
rank = rank([eye(dim.nx)-LTI.A -LTI.Bd; LTI.C LTI.Cd]);
disp(rank)
​
%% Augmented system dynamics
​
LTIe.A = [ LTI.A LTI.Bd; zeros(dim.nd,dim.nx) eye(dim.nd) ];
LTIe.B = [ LTI.B; zeros(dim.nd,dim.nu) ];
LTIe.C = [ LTI.C LTI.Cd ];
LTIe.x0 = [ LTI.x0; LTI.d ];
LTIe.yref = LTI.yref;
​
%Definition of system dimension
dime.nx = 5;     %state dimension
dime.nu = 1;     %input dimension
dime.ny = 2;     %output dimension
dime.N  = dim.N; %horizon
​
%Definition of quadratic cost function
weighte.Q = blkdiag(weight.Q, zeros(dim.nd));            %weight on output
weighte.R = weight.R;                                    %weight on input
weighte.P = blkdiag(weight.P, zeros(dim.nd));            %terminal cost

🎉3 参考文献

[1]孙秀云. 小型无人直升机自主飞行控制算法研究[D].南开大学,2013.

部分理论引用网络文献,若有侵权联系博主删除。

🌈4 Matlab代码实现

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

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

相关文章

力扣 695. 岛屿的最大面积

一、题目描述 给你一个大小为 m x n 的二进制矩阵 grid。 岛屿是由一些相邻的 1(代表土地)构成的组合,这里的相邻要求两个 1 必须在水平或者竖直的四个方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。…

[Nacos] Nacos Client获取所有服务和定时更新Client端的注册表 (三)

文章目录 1.Nacos Client获取所有服务1.1 Client如何获取所有服务1.2 Client获取服务方法getServices()详解 2.Nacos定时更新Client端的注册表2.1 Nacos和Eureka定时更新Client端的注册表的区别2.2 Client定时更新本地服务过程2.3 updateServiceNow方法解析2.4 定时更新本地注册…

40亿个QQ号,限制1G内存,如何去重?

40亿个QQ号,限制1G内存,如何去重? 40亿个unsigned int,如果直接用内存存储的话,需要: 4*4000000000 /1024/1024/1024 14.9G ,考虑到其中有一些重复的话,那1G的空间也基本上是不够…

OPPO哲库事件 “ 始末 ” ! 集体打哑谜?

1►OPPO哲库解散 2019 年,美国商务部以“科技网络安全”为由,将华为公司及其70家附属公司列入出口管制“实体名单”。与此同时,OPPO 创始人兼 CEO陈明永对外宣布,公司将为未来三年内投入 500 亿元用于前沿技术和深水区技术的探索…

安装编译PostgreSql15.3.0

一、下载源码 方式一 官网手动下载 https://www.postgresql.org/download/. 解压 tar -zxvf postgresql-14.2.tar.gz方式二 git clone git clone https://github.com/postgres/postgres.git解压或下载后计入postgres目录 cd postgres-15.3二、创建目录 用root账户创建 创建…

Apache Pulsar入门指南

1.概述 Apache Pulsar 是灵活的发布-订阅消息系统(Flexible Pub/Sub messaging),采用计算与存储分离的架构。雅虎在 2013 年开始开发 Pulsar ,于 2016 年首次开源,目前是 Apache 软件基金会的顶级项目。Pulsar 具有支…

C++系列六:运算符

C运算符 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 按位运算符5. 取地址运算符6. 取内容运算符7. 成员选择符8. 作用域运算符9. 总结 1. 算术运算符 算术运算符用于执行基本数学运算,例如加减乘除和取模等操作。下表列出了C中支持的算术运算符: 运算…

为什么要做问卷调查?企业获得用户心声的捷径

问卷调查作为一种重要的数据收集方法,在市场营销、社会学研究、用户研究等领域得到广泛应用。通过问卷调查,我们可以了解受访者的态度、行为、需求等信息,进而为企业和组织的决策提供支持。那么,为什么要做问卷调查呢?…

day5 - 利用阈值勾勒

阈值处理在计算机视觉技术中占有十分重要的位置,他是很多高级算法的底层逻辑之一。本实验将练习使用图像阈值处理技术来处理不同的情况的图像,并获得图像轮廓。 完成本期内容,你可以: 了解图像阈值处理技术的定义和作用 掌握各阈…

苏州狮山广场能耗管理系统

摘要:随着社会生活水平的提高,经济的繁荣发展,人们对能源的需求逐渐增长,由此带来的能源危机日益严重。商场如何实时的了解、分析和控制商场的能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗智能以月/季度/年为周期进行…

Autosar RTE S/R接口implicit与Explicit的实现与区别

文章目录 前言接口的代码implicitIReadIWrite ExplicitReadWrite 区别与使用场景总结 前言 Autosar官方文档阅读起来比较费劲,一般从实际应用中来了解更多规范中的内容。本文介绍最常用的RTE S/R接口的implicit隐式与Explicit显式两种方式的实现与差别 接口的代码…

Node.js

目录 Node.js是什么 入门案例 fs文件系统模块 案例 http模块 创建最简单的web服务器 网页跳转案例 模块化 模块化概念 模块化规范 Node.js 中模块的分类 加载模块 模块作用域 module对象 Node.js中的模块化规范 第三方模块 (包) 安装包的命令 卸载包的命令 …

oracle客户端的安装教程

文章目录 一、安装前的准备工作 1.1、百度网盘安装包的连接 1.2、百度网盘oracle11g软件包 二、oracle数据库客户端的安装与数据的准备 安装步骤 前言 本文主要讲解oracle客户端的安装与简单使用过程 一、安装前的准备工作 1.1、百度网盘安装包的连接 客户端的软件包 …

【Java EE 初阶】网络编程套接字UDP

目录 1.为什么需要网络编程? 2.什么是网络编程? 3.发送端和接收端 4.请求和响应 5.客户端和服务端 6.如何进行网络编程(Socket套接字) 1.如何进行网络编程 2.TCP与UDP的区别 1.流套接字:使用传输层TCP协议 2.…

面了一个测试工程师要求月薪23K,总感觉他藏了很多面试题...

最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

【前端知识】Cookie, Session,Token和JWT的发展及区别(四)

【前端知识】Cookie, Session,Token和JWT的发展及区别(四) 9. JWT9.1 JWT的背景及定义(1)JWT的字面理解(2)JWT与传统Token的区别 9.2 JWT的组成(1) Header(头部&#xff…

【负载均衡式在线OJ】 数据库

文章目录 41.使用Postman进行综合调试42.了解-前端预备52. 添加oj用户到MySQL53. 使用MySQL_Workbench创建表结构54. 测试录题功能55.重新设计oj_model56.编写oj_model具体代码57.MySQL综合测试58.结项与项目扩展思路 41.使用Postman进行综合调试 完善判题功能 先编译再测试 …

项目管理PMP好考吗,没有经验?

现在越来越多的产品经理和开发人员也投入到考PMP的大军中,在真实的项目中也会有很多产品经理兼任项目经理的职责,这点还是比较常见的,如果说产品或者开发人员考了PMP证书,本身也会让你在找工作的大军中更具有优势,俗话…

一文读懂selenium自动化测试(基于Python)

前言 我们今天来聊聊selenium自动化测试,我们都知道selenium是一款web自动化测试的工具,它应该如何去运用呢?我们接着看下去。 ​1、Selenium简介: 1.1 Selenium: Selenium是一款主要用于Web应用程序自动化测试的工具集合。Sele…

Vue事件

1,回顾js中的事件? 答:标签的状态变化或者被外物改变则称为事件。一般js中的事件都是由浏览器捕捉得到,然后传递给js引擎,浏览器检测到HTML页面中某个标签元素发生了指定的事件,而对应的DOM节点必须去调用回…