MATLAB - 利用非线性模型预测控制(Nonlinear MPC)来控制四旋翼飞行器

系列文章目录


前言

本示例展示了如何利用非线性模型预测控制(MPC)为四旋翼飞行器设计一个跟踪轨迹的控制器。


一、四旋翼模型

四旋翼飞行器有四个向上的旋翼。从四旋翼飞行器的质量中心出发,旋翼呈等距离的正方形排列。四旋翼飞行器动力学数学模型采用欧拉-拉格朗日方程 [1]。

四旋翼飞行器的十二种状态为

[x,y,z,\phi,\theta,\psi,\dot{x},\dot{y},\dot{z},\dot{\phi},\dot{\theta},\dot{\psi}],

其中

  • [x,y,z]表示惯性参考系中的位置。
  • 角度位置[j,θ,ψ]分别表示滚动、俯仰和偏航。
  • 其余状态为位置和角度的速度。

四旋翼飞行器的控制输入(也称为操纵变量,用 MV 表示)是四个旋翼的角速度平方:

[\omega_{1}^{2},\omega_{2}^{2},\omega_{3}^{2},\omega_{4}^{2}].

这些控制输入可在机身 Z 轴方向产生力、扭矩和推力。在此示例中,每个状态都是可测量的,控制输入范围限制为:

\left[0,10\right]\,\left(\dfrac{\mathrm{rad}}{s}\right)^{2} 

非线性模型预测控制器使用的预测模型包括一个状态函数(表示作为当前状态和输入函数的状态导数)和一个状态雅各布函数(分别表示状态函数相对于状态和输入的导数)。这两个函数都是通过 Symbolic Math Toolbox™ 软件建立和导出的。更多详情,请参阅为非线性模型预测控制推导四旋翼飞行器动力学(符号数学工具箱)。

调用脚本 getQuadrotorDynamicsAndJacobian 生成状态及其雅各布函数并写入文件。

getQuadrotorDynamicsAndJacobian;

getQuadrotorDynamicsAndJacobian 脚本生成以下文件:

  • QuadrotorStateFcn.m - 状态函数
  • QuadrotorStateJacobianFcn.m - 状态雅各布函数

有关任一函数的详细信息,请打开相应文件。

二、设计非线性模型预测控制器

创建一个具有 12 个状态、12 个输出和 4 个输入的非线性 MPC 对象。默认情况下,所有输入均为操纵变量 (MV)。

nx = 12;
ny = 12;
nu = 4;
nlmpcobj = nlmpc(nx, ny, nu);
Zero weights are applied to one or more OVs because there are fewer MVs than OVs.

 使用函数名称指定预测模型状态函数。也可以使用函数句柄指定函数。

nlmpcobj.Model.StateFcn = "QuadrotorStateFcn";

最佳做法是为预测模型提供分析雅各布。这样做可以大大提高仿真效率。使用函数句柄指定返回状态函数雅各布的函数。

nlmpcobj.Jacobian.StateFcn = @QuadrotorStateJacobianFcn;

 修复随机发生器种子,实现可重复性。

rng(0)

要检查 nlobj 的预测模型函数是否有效,请使用 validateFcns 对状态输入空间中的一个随机点进行检查。

validateFcns(nlmpcobj,rand(nx,1),rand(nu,1));
Model.StateFcn is OK.
Jacobian.StateFcn is OK.
No output function specified. Assuming "y = x" in the prediction model.
Analysis of user-provided model, cost, and constraint functions complete.

指定采样时间为 0.1 秒,预测范围为 18 步,控制范围为 2 步。

Ts = 0.1;
p = 18;
m = 2;
nlmpcobj.Ts = Ts;
nlmpcobj.PredictionHorizon = p;
nlmpcobj.ControlHorizon = m;

 将所有四个控制输入限制在 [0,10] 范围内。同时将控制输入变化率限制在 [-2,2] 的范围内,以防止突然和粗暴的移动。

nlmpcobj.MV = struct( ...Min={0;0;0;0}, ...Max={10;10;10;10}, ...RateMin={-2;-2;-2;-2}, ...RateMax={2;2;2;2} ...);

 非线性 MPC 的默认代价函数是标准二次代价函数,适用于参考跟踪和干扰抑制。在本例中,要求前 6 个状态 [x,y,z,ϕ,θ,ψ] 遵循给定的参考轨迹。由于 MV 的数量(4 个)少于参考输出轨迹的数量(6 个),因此没有足够的自由度来独立跟踪所有输出的轨迹。

nlmpcobj.Weights.OutputVariables = [1 1 1 1 1 1 0 0 0 0 0 0];

在此示例中,MV 也有额定目标(稍后为模拟设置)。这些目标是在不需要跟踪时为保持四旋翼飞行器漂浮而设置的平均值,可能会导致 MV 和 OV 参考跟踪目标之间的冲突。要优先考虑 OV 目标,可将平均 MV 跟踪优先级设置为低于平均 OV 跟踪优先级。

nlmpcobj.Weights.ManipulatedVariables = [0.1 0.1 0.1 0.1];

此外,通过指定 MV 变化率的调整权重,惩罚过于激进的控制行动。

nlmpcobj.Weights.ManipulatedVariablesRate = [0.1 0.1 0.1 0.1];

三、闭环模拟

按照目标轨迹对系统进行 20 秒钟的模拟。

% Specify the initial conditions
x = [7;-10;0;0;0;0;0;0;0;0;0;0];% Nominal control target (average to keep quadrotor floating)
nloptions = nlmpcmoveopt;
nloptions.MVTarget = [4.9 4.9 4.9 4.9]; 
mv = nloptions.MVTarget;

使用 nlmpcmove 函数模拟闭环系统,使用 nlmpcmove 对象指定模拟选项。

% Simulation duration in seconds
Duration = 20;% Display waitbar to show simulation progress
hbar = waitbar(0,"Simulation Progress");% MV last value is part of the controller state
lastMV = mv;% Store states for plotting purposes
xHistory = x';
uHistory = lastMV;% Simulation loop
for k = 1:(Duration/Ts)% Set references for previewingt = linspace(k*Ts, (k+p-1)*Ts,p);yref = QuadrotorReferenceTrajectory(t);% Compute control move with reference previewingxk = xHistory(k,:);[uk,nloptions,info] = nlmpcmove(nlmpcobj,xk,lastMV,yref',[],nloptions);% Store control moveuHistory(k+1,:) = uk';lastMV = uk;% Simulate quadrotor for the next control interval (MVs = uk) ODEFUN = @(t,xk) QuadrotorStateFcn(xk,uk);[TOUT,XOUT] = ode45(ODEFUN,[0 Ts], xHistory(k,:)');% Update quadrotor statexHistory(k+1,:) = XOUT(end,:);% Update waitbarwaitbar(k*Ts/Duration,hbar);
end% Close waitbar 
close(hbar)

四、可视化和结果

绘制结果图,并比较计划和实际的闭环轨迹。

plotQuadrotorTrajectory;

 

 

由于 MV 的数量少于参考输出轨迹的数量,因此没有足够的自由度来独立跟踪所有 OV 的理想轨迹。

如图所示,状态 [x,y,z,j,θ,ψ] 和控制输入、

  • 状态[x,y,z]在 7 秒内与参考轨迹非常吻合。
  • 状态 [j,θ,ψ]在 9 秒内被驱动到零点附近。
  • 控制输入在 10 秒钟左右被驱动到目标值 4.9。

您可以将四旋翼飞行器的轨迹制成动画。在 7 秒内,四旋翼飞行器靠近沿参考轨迹飞行的 "目标 "四旋翼飞行器。之后,四旋翼飞行器将紧跟参考轨迹。动画在 20 秒时结束。

animateQuadrotorTrajectory;

 

五、结论

本例展示了如何设计用于四旋翼飞行器轨迹跟踪的非线性模型预测控制器。四旋翼飞行器的动力学和 Jacobian 是通过 Symbolic Math Toolbox 软件得出的。四旋翼飞行器能紧密跟踪参考轨迹。 

参考资料

[1] Raffo, Guilherme V., Manuel G. Ortega, and Francisco R. Rubio. "An integral predictive/nonlinear ℋ∞ control structure for a quadrotor helicopter". Automatica 46, no. 1 (January 2010): 29–39. https://doi.org/10.1016/j.automatica.2009.10.018.

[2] Tzorakoleftherakis, Emmanouil, and Todd D. Murphey. "Iterative sequential action control for stable, model-based control of nonlinear systems." IEEE Transactions on Automatic Control 64, no. 8 (August 2019): 3170–83. https://doi.org/10.1109/TAC.2018.2885477.

[3] Luukkonen, Teppo. "Modelling and control of quadcopter". Independent research project in applied mathematics, Aalto University, 2011.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uboot工作原理介绍

uboot其实和电脑的BIOS是一个原理,它主要做两件事: (1)初始化硬件; (2)将系统文件(或者说是内核)从flash中读出来加载到DDR里面执行。 给大家解释下面几个问题: 为什么…

zabbix6.4设置网络设备端口流量P95

P95概念: p95函数写法: 需要监控P95的设备如下: 先找到原来的端口接收发送速率的监控项: 可以看到他们归属于自动发现规则:端口表UP 找到自动发现规则: 点击创建监控项原型: 公式如下&#xff…

吴恩达-从人类反馈中进行强化学习RLHF

吴恩达-从人类反馈中进行强化学习RLHF https://www.bilibili.com/video/BV1R94y1P7QX?p1&vd_sourcee7939b5cb7bc219a05ee9941cd297ade 1、公开的LLM,Llama2, 使用LLM对同一个提示产生多个不同输出,然后人类评估这些输出。评估方法是对比…

数据结构【树+二叉树】

目录 线性表和非线性表 树的概念 树的存储表示 二叉树的概念 特殊二叉树 满二叉树 完全二叉树 二叉树的性质 二叉树的存储结构 顺序存储 链式存储 本篇我们开始进入数据结构中【树】的学习。 线性表和非线性表 逻辑结构:人想象出来的物理结构&#xf…

【昕宝爸爸小模块】浅谈之创建线程的几种方式

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

JVM实战(14)——Young GC调优

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

C++学习笔记——用C++实现树(区别于C)

树是一种非常重要的数据结构,它在计算机科学中的应用非常广泛。在本篇博客中,我们将介绍树的基本概念和C中如何实现树。 目录 一、树的基本概念 2.C中实现树 2.1创建一个树的实例,并向其添加节点 2.2三种遍历方式的实现代码 3.与C语言相…

B端产品经理学习-版本规划管理

首先我们回顾一下用户故事,用户故事有如下特点: PRD文档的特点则如下: B端产品中用户角色不同,需求侧重也不同 决策人——公司战略需求:转型升级、降本增效、品牌提升等 管理负责人——公司管理需求:提升…

翼龙-2H无人机

一、概述 翼龙-2,是成都飞机工业集团研制的无人驾驶飞行器,是空中侦察、精确打击和应急通讯的平台。成都飞机工业集团于2015年9月的北京国际航空航天展览会上介绍了翼龙-2的概念。在2016年珠海航展期间,翼龙-2的原型机首次向公众展示。 因为…

c#异形窗体遮罩效果

c#异形窗体遮罩效果,移动,关闭,最大化,最小化,还原操作 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D…

构建Python随机密码生成器:保障账户安全的简易工具

密码安全是当前数字时代的一个重要议题。在保护个人信息和账户安全方面,安全且可靠的密码是至关重要的。本文将带您逐步了解如何使用Python创建一个随机密码生成器,以生成高强度、难以猜测的密码。 导言 在网络环境中,密码是保护个人账户和…

Linux网络文件共享服务1(基于FTP文件传输协议)

目录 一、了解FTP 1、FTP的相关概念 2、FTP的两种模式及工作原理 2.1 主动模式 2.2 被动模式 3、vsftpd 软件介绍 3.1 基础操作 4、vsftpd服务常见配置 4.1 修改默认命令端口 4.2 主动模式端口 4.3 被动模式端口 4.4 使用当地时间 4.5 匿名用户登录 4.6 匿名用户上…

c语言-库函数strstr()、strtok()、strerror()介绍

文章目录 前言一、库函数strstr()1.1 strstr()介绍1.2 strstr()模拟实现 二、库函数strtok()2.1 strtok()介绍 三、库函数strerror()3.1 strerror()介绍 总结 前言 本篇文章介绍c语言库函数strstr()、strtok()、strerror()的使用。 一、库函数strstr() 1.1 strstr()介绍 str…

基于ssm的线上旅游体验系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

Hive导入数据的五种方法

在Hive中建表成功之后,就会在HDFS上创建一个与之对应的文件夹,且文件夹名字就是表名; 文件夹父路径是由参数hive.metastore.warehouse.dir控制,默认值是/user/hive/warehouse; 也可以在建表的时候使用location语句指定…

x-cmd pkg | duf - df 命令的现代化替代品

目录 简介用户首次快速实验指南技术特点竞品和相关作品进一步探索 简介 Duf (Disk Usage/Free Utility)是一个磁盘分析工具。其直观的输出和多样化的自定义选项,帮助用户更好地管理和优化存储资源。 用户首次快速实验指南 使用 x duf 即可自…

考研经验总结——目录

文章目录 一、写作顺序二、个人情况说明三、读评论四、一些小牢骚五、一些注意事项(持续更新) 一、写作顺序 我将准备从三个阶段开始介绍吧 考研前考研中考研后(也就是现在我的这种情况) 考研前我会分为:数学、专业…

spring Security源码分析-13种过滤器详解

13种核心过滤器 spring security的13个核心过滤器(按执行顺序陈列): WebAsyncManagerIntegrationFilterSecurityContextPersistenceFilterHeaderWriterFilterLogoutFilterUsernamePasswordAuthenticationFilterDefaultLoginPageGeneratingFilterDefaultLogoutPageGeneratingF…

java获取已经发送谷歌邮件的打开状态

1.前言 现在网上的方案都是在邮件里面插入一张图片的地址,当收件人打开之后,就会发送请求到指定路径的服务器上,然后在请求的controller里面处理邮件的状态,这个方案确实是行得通的,本文章只是给大家避个坑&#xff0…

HNU-模式识别-作业1-视频监控系统

模式识别-作业1 计科210X 甘晴void 202108010XXX 【评分:98/100】 题目: 查阅相关技术资料,根据自己家庭相应的情况,设计一个视频监控系统。要求: 系统功能说明系统布线图及说明系统软硬件配置说明 饱和式自家用…