Matlab MPC toolbox tutorial 1

1.Introduction

MPC的基础原理并不复杂,在深入原理之前,借用Matlab MPC toolbox熟悉MPC控制架构。

1.1 MPC modeling

MPC关于模型的定义如下:
在这里插入图片描述
用simulink 表示上面的关系:
在这里插入图片描述
根据matlab对MPC处理的介绍:

The MPC controller performs all estimation and optimization calculations using a discrete-time, delay-free, state-space system with dimensionless input and output variables.

M P C 对 输 入 输 出 的 d e l a y 做 了 处 理 : \color{red}{MPC对输入输出的delay做了处理}: MPCdelay

Delay removal — If the discrete-time model includes any input, output, or internal delays, the absorbDelay command replaces them with the appropriate number of poles at z = 0, increasing the total number of discrete states. The InputDelay, OutputDelay, and InternalDelay properties of the resulting state-space model are all zero.

控制对象的模型(可以看成是开环模型):
在这里插入图片描述
输入扰动模型(闭环模型的一部分):
在这里插入图片描述
输出扰动模型(闭环模型的一部分)
在这里插入图片描述
测量噪声扰动模型(闭环模型的一部分)
在这里插入图片描述

1.2 MPC State Prediction

MPC是闭环控制模型,控制器状态,不仅只考虑开环模型的状态变量,还需要考虑各种扰动和测量误差,用于预测系统的下一个状态。
在这里插入图片描述
MPC控制器用于后续计算的状态方程稍不同于控制对象的状态方程:
在这里插入图片描述

  • 控制器的状态变量由下面的状态变量组成:
    在这里插入图片描述
  • 控制器的输入变量:
    在这里插入图片描述
  • 更新后的状态矩阵如下:
    在这里插入图片描述
  • 加上状态观测器
    在这里插入图片描述
    在这里插入图片描述

1.3 quadratic program

MPC将线性模型转换成二次优化问题,基本的组成元素有:
在这里插入图片描述
cost的组成
在控制系统设计的时候,需要综合考虑各种指标,因而cost也是由多个项组合而成
在这里插入图片描述

  • out reference tracking: 跟踪的精度
    在这里插入图片描述
    在这里插入图片描述
  • Manipulated Variable Tracking
    输入权重,系统希望控制器输出的控制量越小越好(耗能更小…),如LQR控制器中的cost中有 u R u T uRu^T uRuT项。下面的公式中,往往 u j , t a r g e t = 0 u_{j,target}=0 uj,target=0
    在这里插入图片描述
    在这里插入图片描述
  • Manipulated Variable Move Suppression
    很多系统中倾向于控制变量的改变要比较smooth,尽量不出现较大的波动
    在这里插入图片描述
    在这里插入图片描述
  • softening constraints
    s o f t e n i n g   能 解 决 特 殊 情 况 下 需 要 突 破 c o n s t r a i n t s 的 情 况 \color{red}{softening \, 能解决特殊情况下需要突破constraints的情况} softeningconstraints
    在这里插入图片描述
    在这里插入图片描述

完整的形式:
在这里插入图片描述
其中 V j , m i n 和 V j , m a x V_{j,min}和V_{j,max} Vj,minVj,max是ECR value
在这里插入图片描述
QR的矩阵
假设状态转移矩阵如下:
在这里插入图片描述
转移矩阵如下:
在这里插入图片描述
在prediction horizon上y的预测数值:
在这里插入图片描述
简化这个公式:
在这里插入图片描述
系数矩阵为:
在这里插入图片描述
公式中 Δ u \Delta_u Δu需要转换成控制变量 z i z_i zi
在这里插入图片描述
举例:如果控制变量 z i 和 Δ u z_i和\Delta_u ziΔu的关系如下图。
在这里插入图片描述
设置 Δ u ( 0 ) = z 0 , Δ u ( 2 ) = z 1 , Δ u ( 5 ) = z 2 \Delta u(0)=z0, \Delta u(2)=z1, \Delta u(5)=z2 Δu(0)=z0,Δu(2)=z1,Δu(5)=z2
在这里插入图片描述
将状态方程进行简化:
在这里插入图片描述
在这里插入图片描述
化成二次优化的标准形式:
在这里插入图片描述
相关权重则表示为:
在这里插入图片描述
各种限制:
在这里插入图片描述

2. MPC Designer

2.1 流程

以matlab cstr(continuous stirred-tank reactor)[1]为例。反应外界环境的温度Tc是输入控制量,输入液体浓度 C A i C_{Ai} CAi可能有一定的波动(并且没有办法去测量);水箱中的温度T是可观测的输出量, C A C_A CA是无法观测的输出量;并且水箱温度T和 C A C_A CA也是状态变量。
在这里插入图片描述
在这里插入图片描述
用一阶线性微分方程近似这个模型:
在这里插入图片描述

  • step1:构建状态空间模型并设置模型具体结构
    在这里插入图片描述
    设置具体结构:
    在这里插入图片描述
  • step2:定义每个状态的物理意义
    在这里插入图片描述
  • step3:设置限制和权重,hard constraints 和softening constraints 在二次优化方程中的形式如下。
    在这里插入图片描述
    在这里插入图片描述
  • step4: 设置目标函数中的权重系数
    注意输出变量 C A C_A CA因为观测变量,所以权重为0.
    在这里插入图片描述
  • step5: 设置输入信号,对控制器进行调试
    • 1.输入阶跃信号
      在这里插入图片描述
    • 2.测试系统抗扰动的能力
      输入一个阶跃的输入扰动,系统很快适应下来。
      在这里插入图片描述
  • step6: 调试MPC控制器参数
    同样的根据[2],prediction horizon 定义process error的权重,control horizon 定义输入权重。
    本例中,control horizon 是 prediction horizon的 1 / 5 1/5 1/5,在process weigh的设置的时候,给process error的权重0.3。
    在这里插入图片描述

2.2 samples

2.2.1 单输入单输出样例

构建一个单输入单输出的二阶惯性模型:
在这里插入图片描述
在matlab里面,只要配置好相关的输入输出,模型和限制就可以。

plant = tf(1,[1 0 0]);
Ts = 0.1;   
p = 10;
m = 3;
mpcobj = mpc(plant, Ts, p, m);
mpcobj.MV = struct('Min',-1,'Max',5);   % 因为只有一个输入变量,只需要设置该变量的限制
mdl = 'mpc_doubleint';
open_system(mdl)
sim(mdl)

其他的内容:包括卡尔曼估计隐藏状态,以及matlab如何构建QP equation是看不到的。
在这里插入图片描述

对比PID控制器和MPC控制器的效果,单输入单输出模型,MPC的优势并不是太大。(下图中红色的是MPC,蓝色是PID)
在这里插入图片描述
比较MPC和PID控制器的输出指令,下图中(黄色的是PID 蓝色的是MPC)。
在这里插入图片描述

2.2.2 多输入单输出

假设多输入多输出的状态转移矩阵为:
在这里插入图片描述

% 设置MPC模型
sys = ss(tf({1,1,1},{[1 .5 1],[1 1],[.7 .5 1]}));
Ts = 0.2;
model = c2d(sys,Ts);   
model = setmpcsignals(model,'MV',1,'MD',2,'UD',3);  % 3个输入变量,5个状态变量
% 设置MPC控制器
mpcobj = mpc(model,Ts,10,3);  % 控制器参数设置
mpcobj.MV = struct('Min',0,'Max',1,'RateMin',-10,'RateMax',10);   % 设置输入限制
% 设置其他通道
mpcobj.Model.Disturbance = tf(sqrt(1000),[1 0]);   % 噪声模型
% 设置sim
Tstop = 30;                                       % simulation time
Tf = round(Tstop/Ts);                        % number of simulation steps
r = ones(Tf,1);                                  % reference signal
v = [zeros(Tf/3,1);ones(2*Tf/3,1)];   % measured disturbance signal,如何作用在系统上
sim(mpcobj,Tf,r,v)
% 让仿真的效果更接近实际
SimOptions = mpcsimopt(mpcobj);   % 设置MPC的相关参数
d = [zeros(2*Tf/3,1);-0.5*ones(Tf/3,1)];        
SimOptions.Unmeas = d;                          % unmeasured input disturbance signal
SimOptions.OutputNoise=.001*(rand(Tf,1)-.5);    % output measurement noise
SimOptions.InputNoise=.05*(rand(Tf,1)-.5);      % noise on manipulated variables
% 手动修改kalman filter 用于估计无法直接观测的变量
[L,M,A1,Cm1] = getEstimator(mpcobj);
e = eig(A1-A1*M*Cm1)
poles = [.8 .75 .7 .85 .6 .81];
L = place(A1',Cm1',poles)';
M = A1\L;
setEstimator(mpcobj,L,M);

上面这个系统用simulink模拟如下图:
在这里插入图片描述
打印出模型的详细信息:
在这里插入图片描述
输 入 扰 动 M D 和 U D 是 如 何 作 用 在 这 个 系 统 上 的 \color{red}{输入扰动MD和UD是如何作用在这个系统上的} MDUD

2.2.3 非线性的多输入多输出问题

传递模型是一个非线性模型,采用EKF的思路,将当前时刻下的状态线性处理:
在这里插入图片描述
在这里插入图片描述

plant = linearize('mpc_nonlinmodel');
plant.InputName = {'Mass Flow';'Heat Flow';'Pressure'};  
plant.OutputName = {'Temperature';'Level'};
plant.InputUnit = {'kg/s' 'J/s' 'Pa'};
plant.OutputUnit = {'K' 'm'};
Ts = 0.2;                          
p = 5;
m = 2;
mpcobj = mpc(plant,Ts,p,m);
mpcobj.MV = struct('Min',{-3;-2;-2},'Max',{3;2;2},'RateMin',{-1000;-1000;-1000});
mpcobj.Weights = struct('MV',[0 0 0],'MVRate',[.1 .1 .1],'OV',[1 1]);
outdistmodel = tf({1 0;0 1},{[1 0 0 0],1;1,[1 0 0 0]});
setoutdist(mpcobj,'model',outdistmodel);
mdl2 = 'mpc_nonlinear_setoutdist';
open_system(mdl2)
sim(mdl2)

Reference

[1] https://www.youtube.com/watch?v=J6RqQ9qDDeU
[2] https://www.youtube.com/watch?v=gMOcBSmjdkQ

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: MATLAB Pyr toolbox是一个用于图像金字塔处理的工具包。图像金字塔是一种用于多尺度表示和图像处理的技术。该工具包提供了一系列函数和工具,用于生成和操作图像金字塔。 MATLAB Pyr toolbox的功能非常丰富,可以用于各种图像处理任务。它可以用于图像的分辨率降低和放大,以及图像的平滑和增强。通过生成图像金字塔,可以在不同的尺度上分析图像,并提取图像中的各种特征和结构。例如,可以通过金字塔来检测边缘、纹理和角点等特征。 MATLAB Pyr toolbox还提供了一些用于图像融合的函数和工具。可以将多个金字塔进行融合,从而获得更丰富的图像信息。这对于图像合成、图像修复和图像增强等应用非常有用。 此外,MATLAB Pyr toolbox还提供了一些可视化和展示的功能。可以通过该工具包生成图像金字塔的可视化结果,并进行交互式操作和分析。可以通过可视化结果来理解图像金字塔的特性,并调整金字塔的参数和尺度。 总之,MATLAB Pyr toolbox是一个强大的工具包,用于图像金字塔的生成、处理和分析。它提供了丰富的功能和工具,可以用于各种图像处理和计算机视觉任务。无论是学术研究还是工程应用,MATLAB Pyr toolbox都是一个非常有用的工具。 ### 回答2: MATLAB PYR Toolbox是一个用于处理图像金字塔的工具箱。图像金字塔是一种用于多尺度分析和处理图像的技术,它可以将图像的不同尺度和频率信息拆分开来,从而实现对图像的更细致和全面的处理。 MATLAB PYR Toolbox提供了一系列用于创建、分解和重建图像金字塔的函数和工具。用户可以使用这些函数来生成不同大小和不同层级的图像金字塔,实现图像的缩放和平滑处理。此外,工具箱还提供了用于不同图像金字塔层级之间的图像插值、图像融合和图像拼接的功能。 MATLAB PYR Toolbox还提供了一些特征提取和图像分析的函数,可以用于从图像金字塔中提取特定的频率和尺度特征,比如边缘、纹理等。这些特征提取函数可以帮助用户实现一些计算机视觉和图像处理的任务,比如目标检测、图像识别等。 此外,MATLAB PYR Toolbox还提供了一些用于图像显示和可视化的函数,可以帮助用户展示和分析图像金字塔的结果。用户可以使用这些函数来显示不同层级和不同尺度的图像金字塔,以及进行图像的比较和分析。 总之,MATLAB PYR Toolbox是一个功能强大的工具箱,它为用户提供了处理图像金字塔的各种函数和工具,可以帮助用户实现对图像的多尺度分析和处理。无论是进行图像缩放、平滑处理,还是进行特征提取和图像分析,MATLAB PYR Toolbox都可以提供有效的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值