1 生活中的启示

情景如下:你们团队每天早晨开一次例会,主要会议内容是你汇报工作进度,领导根据工作目标和工作进度,制定当天的工作计划,你领到工作计划后开始工作。每天都这样周而复始,从领导的角度看,这件工作实现了“闭环”,工作进度“可控”,这就是闭环控制系统。

图1 闭环控制系统

不同的领导(控制器)水平有高又低,按照介绍控制器先踩一脚PID的国际惯例,设:

则PID控制器的控制律为:

从该控制律中我们可以看到PID的两个问题:

1, PID控制器不具有“前瞻性”:参与计算的各个量,有当前的  ,上个控制周期的  ,以及之前所有的  累计和,偏偏没有未来的  。这个“领导”目光过于短浅,只求今天能完成任务,哪怕第二天公司就倒闭了,那也是第二天要解决的麻烦,今天该干啥干啥。

2, PID属于无模型控制。作为一个“领导”,PID仅仅通过工作目标和工作进度上的差距,以及三个近乎魔法般的数字,就制定了工作计划,完全不考虑你的工作能力和这项工作的难度,这是非常失职的。

为了提高工作的的可行性,经过思考,我们还可以有另一种方案:

  • 领导听完你的汇报后,根据工作进度(系统状态)、工作目标(参考值)、你的工作能力和任务难度(系统模型),制定了未来10天的工作计划,每一天要干什么都写得清清楚楚明明白白。
  • 领导将这十天计划里面第一天的计划交给你,剩下九天的计划销毁。
  • 第二天重复上述过程。

显然第二种方案更具有可行性,它能根据任务的完成情况及时调整工作计划,同时兼顾了未来的工作计划、你的工作能力和任务的难度,更符合我们的认知。

当然这种方案还有一点小缺陷,比如“剩下九天计划销毁”,领导看了这个方案肯定心里不舒服,辛辛苦苦做的计划凭什么销毁呢?为了弥补这个缺陷,我们提出了“控制时域”和“预测时域”的概念。控制时域是指领导做多少天的计划,预测时域是指领导思考多长远的进度。比如,领导考虑到计划跟不上变化,想太长远没意义,就先做了五天的计划(控制时域是五天),然后第6-10天的计划和第5天的计划一模一样,领导预测了下按照这样的十天计划,十天后进度完成的还算可以(预测时域是十天)。这样依然给你第一天的计划,销毁剩下九天的计划,领导的工作量却少了许多。

模型预测控制的基本思想就蕴含在上述过程中,它利用一个已有的模型、系统当前的状态和未来的控制量,来预测系统未来的输出,然后与我们期望的系统输出做比较,得到一个损失函数,即:

由于上式中模型、当前状态、期望输出都是已知的,因此只有未来控制量一个自变量。采用二次规划的方法求解出某个未来控制量,使得损失函数最小,这个未来控制量的第一个元素就是当前控制周期的控制量。

2 实际控制的例子

2.1 问题描述

在无限光滑的一维水平直线上有一个质量为  的滑块,初始位置与初始速度都为0,现需要设计控制器,在传感器测得滑块位置  的基础上,为滑块提供外力  ,使其跟随参考点 

图2 例图

2.2 预测模型

首先建立动力学方程:

选取状态向量  (除非特殊说明,后文中x表示状态向量,而不是滑块位置),构建系统状态方程为:

其中  。

2.3 预测模型离散化

采用前向欧拉法将状态方程离散化:

其中  ,T为控制周期。

2.4 预测

MPC方法的一个独特之处就是需要对未来系统状态进行预测,我们记未来  个控制周期内预测的系统状态为:

 称为预测时域,括号中  表示在当前  时刻预测  时刻的系统状态,以此类推。另外,预测动态系统未来状态时,还需要知道预测时域内的控制量  :

这是我们接下来将要求解的优化问题的独立变量。

现在,我们可以通过离散化状态方程依次对未来  个控制周期的系统状态进行预测:

整合成矩阵形式:

其中,psi :     ,             theta :  

上式中的下三角形式,直接反映了系统在时间上的因果关系,即  时刻的输入对  时刻的输出没有影响,  时刻的输入对  和  时刻没有影响,等等。

2.5 优化

这一节我们将求解预测时域内的控制输出  ,在求解优化问题之前,我们首先明确优化问题的数学描述。

我们的控制目标是使系统的状态跟踪期望的一条轨迹,通常称为参考值,定义预测时域内的参考值序列:

注意,在  时刻进行控制的时候,控制器就必须已经得到了  时刻到  时刻的参考值,而PID就不需要这么多信息,这是MPC的一个缺点。

我们希望寻找最佳的控制量  ,使得预测时域内的状态向量与参考值越接近越好,这是一个开环最优控制问题。为此,我们用预测状态向量与参考值之间的累计误差定义一个简单的优化目标函数:

经常地,我们不希望控制动作太大,优化目标函数再添加一项对控制量的约束:

因此,该优化问题可以描述如下:

我们将优化函数  展开后合并同类项:

注意::::::::

  在这里如果你仔细去化简上面的公式,会发现一个问题 2 ET* Q * thita * U是怎么来的,化简的结果应该是ET* Q * thita * UUT*thitaT*Q*E,为什么上面的结果是 2 ET* Q * thita * U,难道说ET* Q * thita * UUT*thitaT*Q*E相等不成,是的,这两个式子确实相等,但这两个是各自的转置后的形式啊(Q是对角矩阵,转置和原来一样这个应该没啥疑问),怎么相等呢,这和我们认知的矩阵转置一般不等于原矩阵不符啊,等等因为这个特殊呗,特殊形式中对角矩阵算一个,那这个是什么特殊情况呢?别急,我推导一遍你就清楚了。

上式中  是常数项,对“  为何值时  取得最小值”这一问题没有影响,因此直接舍去。

如图3,matlab输入 “help quadprog”查看二次型优化函数quadprog的说明文档,令:

可得最终优化目标函数,至此可直接调用matlab quadprog函数求解  ,将  的第一个元素提取出来,作为本控制周期的控制量。

图3 matlab quadprog函数

2.6 仿真

对于2.1中例子的动力学方程:

两边同时拉普拉斯变换:

可得传递函数:

在simulink中搭建仿真环境如图4,并编写MPC控制器(2.2—2.5):

图4 simulink中仿真

 1 function u = MPCcontroller(pos_ref, pos, vel)
2 %参数设置
3 m = 1.05; %滑块质量,增加了5%作为建模误差
4 T = 0.01; %控制周期10ms //采样时间
5 p = 45; %控制时域(预测时域)
6 Q = 10*eye(2*p); %状态误差权重 //因为Xk中有两个状态变量所以P乘以2以下道理相同
7 W = 0.0001*eye(p); %控制输出权重
8 umax = 100; %控制量限制,即最大的力
9 Rk = zeros(2*p,1); %参考值序列
10 Rk(1:2:end) = pos_ref;%参考位置由函数参数指定
11 Rk(2:2:end) = vel; %参考速度跟随实际速度
12 %构建中间变量
13 xk = [pos;vel]; %xk
14 A_ = [1 T;0 1]; %离散化预测模型参数A
15 B_ = [0;T/m]; %离散化预测模型参数B
16 psi = zeros(2*p,2); %psi
  %构建psi
17 for i=1:1:p
18 psi(i*2-1:i*2,1:2)=A_^i;
19 end
  %构建theta
20 theta = zeros(2*p,p); %theta
21 for i=1:1:p
22 for j=1:1:i
23 theta(i*2-1:i*2,j)=A_^(i-j)*B_;
24 end
25 end
26 E = psi*xk-Rk; %E
27 H = 2*(theta'*Q*theta+W); %H
28 f = (2*E'*Q*theta)'; %f
29 %优化求解
30 coder.extrinsic('quadprog');
31 Uk=quadprog(H,f,[],[],[],[],-umax,umax);
32 %返回控制量序列第一个值
33 u = 0.0; %指定u的类型
34 u = Uk(1); %提取控制序列第一项

p=40,仿真结果

p=60,仿真结果

参考文献

陈虹. 模型预测控制[M]. 科学出版社, 2013.

龚建伟, 姜岩, 徐威. 无人驾驶车辆模型预测控制[M]. 北京理工大学出版社, 2014.

转自:https://zhuanlan.zhihu.com/p/141871796?utm_source=wechat_session

一个模型预测控制(MPC)的简单实现的更多相关文章

  1. 【控制】模型预测控制 MPC 【合集】Model Predictive Control

    1.模型预测控制--运动学模型 2.模型预测控制--模型线性化 3.模型预测控制--模型离散化 4.模型预测控制--预测 5.模型预测控制--控制律优化二次型优化 6.模型预测控制--反馈控制 7.模 ...

  2. 模型预测控制 MPC

    使用MPC的原因:

  3. MATLAB模型预测控制(MPC,Model Predictive Control)

    模型预测控制是一种基于模型的闭环优化控制策略. 预测控制算法的三要素:内部(预测)模型.参考轨迹.控制算法.现在一般则更清楚地表述为内部(预测)模型.滚动优化.反馈控制. 大量的预测控制权威性文献都无 ...

  4. 无人驾驶——4.控制之MPC模型预测控制

    源自:<无人驾驶无人驾驶车辆模型预测控制>——龚建伟 参考:https://wenku.baidu.com/view/8e4633d519e8b8f67c1cb9fa.html 0.车辆模 ...

  5. Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数

    11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11 ...

  6. ASP.NET MVC 5 - 添加一个模型

    在本节中,您将添加一些类,这些类用于管理数据库中的电影.这些类是ASP.NET MVC 应用程序中的"模型(Model)". 您将使用.NET Framework 数据访问技术En ...

  7. Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型

    Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 在这一节中,你将添加用于管理数据库中电影的类.这些类是ASP.NET MVC应用程序的模型部分. 你将使用.NET Framewo ...

  8. Rails 增加一个模型(model)

      之前我们已经看到用脚手架运行的model程序.现在是时候第二个model了. 第二个model用来处理post的评论. 7.1 新建一个模型 Rails模型使用一个单一的的名称,其相应的数据库表使 ...

  9. [转]ASP.NET MVC 5 - 添加一个模型

    在本节中,您将添加一些类,这些类用于管理数据库中的电影.这些类是ASP.NET MVC 应用程序中的"模型(Model)". 您将使用.NET Framework 数据访问技术En ...

随机推荐

  1. vmware启动后虚拟机无法联网

    搜索services.msc打开服务 确认VMware NAT service和VMware DHCP service服务处于启动状态:开启自动启动,下次就会自动联网了. VMware Authori ...

  2. 在shell中变量的赋值有五种方法!

    转至:https://blog.csdn.net/weibo1230123/article/details/82085226 在shell中变量的赋值有五种 :使用 read 命令,直接赋值,使用命令 ...

  3. JZ-017-树的子结构

    树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目链接: 树的子结构 代码 /** * 标题:树的子结构 * 题目描述 * 输入两棵 ...

  4. PHP实现二维数组(或多维数组)转换成一维数组

    1 array_reduce函数法 用array_reduce()函数是较为快捷的方法: $result = array_reduce($user, function ($result, $value ...

  5. insert一个表的数据到另外一个表

    insert into a(real_name,is_main,mobile,password,property_id,create_time) select linkman as real_name ...

  6. 浏览器中 Http缓存

    分类: web缓存主要有:数据库缓存.服务器缓存(代理服务器缓存.CDN缓存),浏览器缓存. 数据库缓存 当web应用的关系比较复杂,数据库中的表很多的时候,如果频繁进行数据库查询,很容易导致数据库不 ...

  7. 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  8. freeswitch tts_commandline模块介绍

    概述 freeswitch是开源.免费的VOIP软交换平台,自带了很多功能各异的模块. mod_tts_commandline模块,本身没有TTS能力,而是通过调用TTS引擎的命令生成语音文件,tts ...

  9. office online在线预览服务与https的tls证书兼容问题

    问题现象:k8s环境配置证书后,无法调用office online 服务,附件无法预览 问题原因:ingress默认启用得是tls1.2,不兼容以下版本 k8s环境解决方法:增加ingress配置,兼 ...

  10. oracle 11g生成ASH报告操作过程

    1.ASH (Active SessionHistory) ASH以V$SESSION为基础,每秒采样一次,记录活动会话等待的事件.不活动的会话不会采样,采样工作由新引入的后台进程MMNL来完成. v ...