【MPC-Simulink】EX03 基于非线性系统线性化模型MPC仿真(MIMO)

【MPC-Simulink】EX03 基于非线性系统线性化模型MPC仿真(MIMO)

参考 Matlab 官网提供的 Model Predictive Control Toolbox - Getting Started Guide,以零初始状态条件下的非线性系统在线性化后得到的多输入多输出(MIMO)预测模型为例,使用 Simulink 闭环仿真模型预测控制(MPC)。

1. 线性化非线性系统

  1. 非线性模型使用 Matlab 自带的模型,

    直接使用 open 打开。注意这是一个三输入两输出的非线性系统,三个传递函数模块的初始状态均为0。

    open('mpc_nonlinmodel')
    

    请添加图片描述

  2. 使用 Simulink Control Design 的 linearize 命令,在默认工作点下(传递函数模块的初始状态均为零)对系统进行线性化。得到的线性化模型作为 MPC 控制器中的被控对象模型,用来预测。

    plant = linearize('mpc_nonlinmodel')
    

    请添加图片描述

  3. 为输入和输出变量分配名称:

    plant.InputName = {'Mass Flow'; 'Heat Flow'; 'Pressure'};
    plant.OutputName = {'Temperature'; 'Level'};
    plant.InputUnit = {'kg/s', 'J/s', 'Pa'};
    plant.OutputUnit = {'K', 'm'};
    

2. 设计 MPC 控制器

创建 MPC 控制,可参考

【MPC-Simulink】EX02 高阶线性系统MPC仿真与调试(LTI-MISO)-CSDN博客

  1. 实例化 MPC 控制器对象

    由于未定义任何可测或不可测量的干扰信号,也未定义任何不可测量的输出,因此基于 plant 创建MPC控制器时,默认情况下所有系统输入均被视为可控输入(MV),所有系统输出均被视为可测量输出(MO)。

    mpcobj = mpc(plant, 0.2, 5, 2);
    
    • 采样时间 0.2 秒
    • prediction horizon 5 步
    • control horizon 2 步
  2. 为控制变量指定硬约束。

    mpcobj.MV = struct('Min',{-3; -2; -2}, 'Max',{3; 2; 2}, 'RateMin',{-1000; -1000; -1000});
    
  3. 定义控制变量和输出信号的权重。

    mpcobj.Weights = struct('MV', [0 0 0], 'MVRate', [0.1 0.1 0.1], 'OV', [1 1]);
    

    代价函数定义参考

    [Optimization Problem

    • MATLAB & Simulink
    • MathWorks 中国](https://ww2.mathworks.cn/help/mpc/ug/optimization-problem.html)
  4. 显示 MPC 控制器属性

    mpcobj
    

    请添加图片描述

3. 跟踪阶跃信号

  1. 打开示例的 Simulink 模型进行闭环仿真。

    该系统模型与线性化时使用的模型相同,MPC 控制器将基本工作区中的 MPC 对象 mpcobj 作为参数。输出1的参考信号为阶跃信号,仿真开始时从0上升到1。输出2的参考信号也使用阶跃信号。注意仿真被控对象使用的是非线性模型。

    mdl1 = 'mpc_nonlinear';
    open_system(mdl1)
    

    请添加图片描述

  2. 运行仿真

    sim(mdl2,12)
    

    可测量输出与参考信号

    请添加图片描述

    三个可控输入

    请添加图片描述

4. 跟踪斜坡信号

  1. 为了在补偿非线性因素的同时跟踪斜坡信号,需要在两个输出上定义一个三阶积分的干扰模型(如果没有非线性,用二阶积分就足够了)。

    outdistmodel = tf({1 0; 0 1}, {[1 0 0 0], 1; 1, [1 0 0 0]})
    setoutdist(mpcobj, 'model', outdistmodel);
    getoutdist(mpcobj)
    

    请添加图片描述

  2. 打开预设的Simulink模型进行闭环仿真。该模型与先前的闭环模型相同,但第一输出的参考信号不再是阶跃信号,而是在3秒后以0.2的斜率上升的斜坡信号。

    mdl2 = 'mpc_nonlinear_setoutdist';
    open_system(mdl2);
    
  3. 仿真

    sim(mdl2,12)
    

    请添加图片描述

    请添加图片描述

5. 无约束条件下的仿真

当约束不激活时,MPC 控制器的行为类似于线性控制器。为了说明这一点,可以在闭环中仿真两个无约束MPC控制器的版本。

  1. 移除可控输入约束

    mpcobj.MV
    

    请添加图片描述

    mpcobj.MV = [];
    
  2. 然后将输出干扰模型重置为默认值(仅在下一步中获取更简化的线性 MPC 控制器版本时使用):

    setoutdist(mpcobj, 'integrators');
    
  3. 将无约束的MPC控制器转换为线性时不变 (LTI) 状态空间动态系统,输入向量为 [ym; r],其中 ym 是测量的输出信号向量(在给定时间步),r 是输出参考信号向量(在相同时间步)。

    LTI = ss(mpcobj,'r'); % use reference as additional input signal
    
  4. 打开预设的Simulink模型以进行闭环仿真。

    • “references” 块包含两个阶跃信号(分别在4秒和0秒后生效),作为参考信号。
    • “MPC control loop” 块等效于第一个闭环,不同之处在于该参考信号作为输入提供。
    • “Linear control loop” 块等效于 “MPC control loop” 块,不同的是控制器为LTI块,其参数为工作区中的状态空间对象 LTI
    refs = [1;1]; % set values for step signal references 
    mdl3 = 'mpc_nonlinear_ss'; 
    open_system(mdl3)
    

    请添加图片描述

    MPC 控制器的闭环系统和之前的类似,线性化控制器如下

    请添加图片描述

    sim(mdl3)
    

    可测量输出

    请添加图片描述

    请添加图片描述

    可控输入

    请添加图片描述

    请添加图片描述

    输入和输出信号在两个闭环系统中看起来是相同的。此外,注意可控输入不再受先前约束的限制(为了对比线性化控制器,之前将 MPC 控制器的约束移除了)。

  5. 比较

    fprintf('Compare output trajectories: ||ympc-ylin|| = %g\n',norm(ympc-ylin)); 
    

    控制性能接近

    Compare output trajectories: ||ympc-ylin|| = 1.53023e-14
    

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

期权开户难不难?期权开户成功后当天是否能交易

期权开户难不难?这取决于投资者的准备情况和所选的开户途径。对于满足一定资金和经验要求的投资者来说,通过正规期货公司或期权交易平台进行开户,虽然流程相对复杂,但只要遵循步骤,仍然可以顺利完成,下文为…

沈阳乐晟睿浩科技有限公司引领新潮流

在当今数字化浪潮汹涌的时代,电子商务以其独特的魅力和无限潜力,正深刻改变着人们的消费习惯与商业模式。沈阳乐晟睿浩科技有限公司(以下简称“乐晟睿浩”),作为电商领域的一颗璀璨新星,凭借其深厚的技术实…

【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?

**说明:**本文所涉及的AI运动识别、计时、计数能力,都是基于云智「Ai运动识别引擎」实现。云智「Ai运动识别」插件识别引擎,可以为您的小程序或Uni APP赋于原生、本地、广覆盖、高性能的人体识别、姿态识别、10余种常见的运动计时、计数识别及…

Python栈--深度优先搜索(迷宫问题)

给一个二维列表,表示迷宫(0表示给出算法,求通道,1表示围墙)。 给出算法,求一条走出迷宫的路径。 maze [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 0, 1, 0, 1], […

安卓主板_基于联发科MTK MT8788平台平板电脑方案_安卓核心板开发板定制

联发科MT8788安卓核心板平台介绍: MTK8788设备具有集成的蓝牙、fm、wlan和gps模块,是一个高度集成的基带平台,包括调制解调器和应用处理子系统,启用LTE/LTE-A和C2K智能设备应用程序。该芯片集成了工作在2.0GHz的ARM Cortex-A73、最…

LabVIEW 版本控制

在软件开发中,版本控制系统(VCS) 是管理代码版本变化的核心工具。对于 LabVIEW 用户,虽然图形化编程带来高效开发体验,但由于其特有的二进制 VI 文件格式,传统文本比较工具无法直接用于 LabVIEW 项目。这时…

centos7.9部署oracle19c教程

1.安装前准备 1.1关闭防火墙和selinux systemctl stop firewalld systemctl disable firewalldvi /etc/selinux/config1.2 安装依赖 yum install -y unzip compat-libcap1 compat-libstdc-33 gcc-c ksh libaio-devel libstdc-devel elfutils-libelf-devel fontconfig-devel …

034集——JIG效果实现(橡皮筋效果)(CAD—C#二次开发入门)

可实现效果如下(对象捕捉F3需打开,否则效果不好): public class CircleJig : EntityJig{public static void DraCJig(){PromptPointResult ppr Z.ed.GetPoint("a");if (ppr.Value null) return;Point3d pt ppr.Value…

Softing工业将在纽伦堡SPS 2024上展示Ethernet-APL现场交换机

今年,Softing工业将在纽伦堡SPS贸易展览会上展示aplSwitch Field —— 一款先进的过程自动化解决方案。这款16端口以太网高级物理层(APL)现场交换机的防护等级高达IP30,可提供从应用到现场级别的无缝以太网连接,专为Ex…

鸿蒙UI开发——小图标的使用

1、前 言 鸿蒙SDK中为我们提供了大量的高质量内置图标,图标详见(https://developer.huawei.com/consumer/cn/design/harmonyos-symbol/) 图标资源一览: 除了基本的图标图形外,我们还可以支持图标的多种填充模式(单色、多色、分层…

python3的基本数据类型:Dictionary(字典)的创建

一. 简介 本文开始简单学习一下 python3中的一种基本数据类型:Dictionary(字典)。 字典(dictionary)是Python中另一个非常有用的内置数据类型。 二. python3的基本数据类型:Dictionary(字典&…

2024 年使用 Postman 调用 WebService 接口图文教程

使用 Postman 调用 WebService 接口图文教程

设计字符串类 运算符重载 C++实现 QT环境

问题&#xff1a;设计字符串类&#xff0c; 支持下面的操作 MyString s1; // 默认构造函数 MyString s2("hello"); // 含参构造函数 MyString s3(s1); // 传参构造函数 MyString s4(5, c); // 自定义构造函数 // 运算符重载 ! > < // 运算符重…

链表循环及差集相关算法题|判断循环双链表是否对称|两循环单链表合并成循环链表|使双向循环链表有序|单循环链表改双向循环链表|两链表的差集(C)

判断循环双链表是否对称 设计一个算法用于判断带头节点的循环双链表是否对称 算法思想 让left从左向右扫描&#xff0c;right从右向左扫描&#xff0c;直到它们指向同一个节点&#xff1a;left right 或相邻left->next right&#xff0c;或right->prev left&#x…

基于STM32的智能声控分类垃圾桶(论文+源码)

1系统的功能及方案设计 本次课题为基于STM32的智能声控分类垃圾桶&#xff0c;其系统整体架构如图2.1所示&#xff0c;整个系统包括了stm32f103单片机主控制器&#xff0c;LU-ASR01语音识别模块&#xff0c;WT588语音播报模块&#xff0c;舵机等器件&#xff0c;用户可以通过语…

华大单片机跑历程IO口被写保护怎么解决

一&#xff0c;说明 使用的单片机是HC32F460KETA华大单片机&#xff0c;使用的代码历程是小华单片机历程&#xff0c;具体历程在小华官网都可以找到。   在使用小华历程跑模拟IIC时&#xff0c;SCL时钟是有的&#xff0c;但是IO输入被LOCK了&#xff0c;所以在跑历程进行断点…

网络与通信实验一 网络协议分析

Wireshark的安装 https://www.wireshark.org/&#xff08;下载链接&#xff09; 具体安装步骤参考 安装步骤 点击即可自动跳转 安装后打开 输入ipconfig 选择ipv4网卡存在的设备&#xff08;我的电脑选择WiFi&#xff09; 过滤条件选择 icmp cmd下输入 ping www.baidu.com…

电脑网络丢包怎么排查优化

上网已经成为必不可少的一部分,无论是看视频、玩游戏还是办公,网络的稳定性直接影响到我们的体验。然而有时候会遇到一些问题,比如网页加载慢、视频卡顿、游戏掉线等。这些问题的背后,往往是因为网络丢包。 网络丢包检测工具分享 什么是网络丢包? 网络丢包,简单来说,就是…

从0开始学习Linux——进程管理

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…

QT6.5+qt-quick+qml+cmake的Item布局学习

Item 是一个基础元素&#xff0c;它本身不会渲染任何东西&#xff0c;也不会提供一个窗口来显示其内容。Window 是一个可以显示内容的顶级元素&#xff0c;它通常会包含一个或多个子元素来构建用户界面。Item是全部QML可视化对象的根&#xff0c;所有可视化类型都由该类型派生出…