转自:https://blog.csdn.net/qq_40241332/article/details/105023605

(公式:预测域P和控制域M大小不同,且有常干扰)

在本文中,主要是针对线性无约束系统,设计模型预测控制算法。首先给出一个离散的数学模型,再根据模型预测控制“三步走”战略,实现控制器的设计

(相比原文,修改了一个小小的错)

“三步走”策略

预测系统未来动态
求解优化问题
解第一个元素作用于系统

模型:

我们引入离散时间的状态空间模型,如下:


其中 x(k) 为系统内部状态变量;A 为系统矩阵;Bu 为控制输入矩阵;u(k) 为控制输入变量;Bd 为外部干扰输入矩阵;d(k) 为可测外部干扰变量。

预测方程:

将模型改成增量模型


两式相减得:
其中 Δ x ( k ) = x ( k ) − x ( k − 1 ) Δx(k)=x(k)-x(k-1) Δx(k)=x(k)−x(k−1) , Δ u ( k ) = u ( k ) − u ( k − 1 ) Δu(k)=u(k)-u(k-1) Δu(k)=u(k)−u(k−1) , Δ d ( k ) = d ( k ) − d ( k − 1 ) Δd(k)=d(k)-d(k-1) Δd(k)=d(k)−d(k−1) 。

那输出y可由:



合并得:

以最新测量值为初始条件,预测时域为p,控制时域为m,并且有以下两个假设:


则:

其中 Δ x ( k + 1 ∣ k ) Δx(k+1|k) Δx(k+1∣k) 表示第k个时刻对第k+1个时刻的状态预测,那么接下来预测域 p p p长个状态表示为:。





进一步输出方程可以为







定义以下向量:


那么,对系统未来p步预测的输出:


其中:


这里 I I I中ne指的是: C ∗ A ∗ B C*A*B C∗A∗B矩阵的维度,是为了能够将 y ( k ) y(k) y(k)和其他项能够合并。

优化问题描述:

对于此优化问题考虑两个方面,一是输出跟踪上参考输入;二是尽可能减少控制幅度。目标函数选择如下:


其中 Γ y , i = def  d i a g ( Γ y 1 , i \Gamma_{y,i}\stackrel{\text { def }}{=}diag(\Gamma_{y_1,i} Γy,i​= def diag(Γy1​,i​, Γ y 2 , i , ⋯ , Γ y n c , i ) \Gamma_{y_2,i},\cdots,\Gamma_{y_{n_c},i}) Γy2​,i​,⋯,Γync​​,i​), Γ u , i = def  d i a g ( Γ u 1 , i \Gamma_{u,i}\stackrel{\text { def }}{=}diag(\Gamma_{u_1,i} Γu,i​= def diag(Γu1​,i​, Γ u 2 , i \Gamma_{u_2,i} Γu2​,i​, ⋯ , Γ u n u , i ) \cdots,\Gamma_{u_{n_u},i}) ⋯,Γunu​​,i​)。 Γ y j , i \Gamma_{y_j,i} Γyj​,i​是第i步预测的第j个输出的误差的加权因子, Γ u j , i \Gamma_{u_j,i} Γuj​,i​是第i步预测对控制增量第j个分量的加权因子。改写为矩阵形式:


其中: Γ y = d i a g ( Γ y , 1 \Gamma_y=diag(\Gamma_{y,1} Γy​=diag(Γy,1​, Γ y , 2 \Gamma_{y,2} Γy,2​, ⋯ , Γ y , p ) \cdots,\Gamma_{y,p}) ⋯,Γy,p​), Γ u = d i a g ( Γ u , 1 \Gamma_u=diag(\Gamma_{u,1} Γu​=diag(Γu,1​, Γ u , 2 \Gamma_{u,2} Γu,2​, ⋯ , Γ u , p ) \cdots,\Gamma_{u,p}) ⋯,Γu,p​),参考输入序列为


问题可以被描述为: min ⁡ Δ U ( k ) J ( x ( k ) , Δ U ( k ) , m , p ) \min _{\Delta U(k)} J(x(k), \Delta U(k), m, p) minΔU(k)​J(x(k),ΔU(k),m,p)
满足动力学模型: Y p ( k + 1 ∣ k ) = S x Δ x ( k ) + I y c ( k ) + S d Δ d ( k ) + S u Δ U ( k ) Y_p(k+1|k)=S_x\Delta x(k)+\mathcal {I} y_c(k)+S_d\Delta d(k)+S_u\Delta U(k) Yp​(k+1∣k)=Sx​Δx(k)+Iyc​(k)+Sd​Δd(k)+Su​ΔU(k)

定义一个辅助变量

将预测方程带入可得


其中:

E p ( k + 1 ∣ k ) = R ( k + 1 ) − S x Δ x ( k ) − I y c ( k ) − S d Δ d ( k ) E_{p}(k+1 | k)=R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k) Ep​(k+1∣k)=R(k+1)−Sx​Δx(k)−Iyc​(k)−Sd​Δd(k)
因此 min ⁡ z ρ T ρ = ( A z − b ) T ( A z − b ) \min _{z} \rho^{\mathrm{T}} \rho=(\mathcal{A}z-b)^T(\mathcal {A}z-b) minz​ρTρ=(Az−b)T(Az−b)的极值解为 z ∗ = ( A T A ) − 1 A T b z^*=(\mathcal A^T\mathcal A)^{-1}\mathcal A^Tb z∗=(ATA)−1ATb。(充要条件自证)

最优控制序列为:

解第一个元素

Δ u ( k ) = [ I n u × n u 0 ⋯ 0 ] 1 × m Δ U ∗ ( k ) \Delta u(k)=\left[\begin{array}{cccc} I_{n_{u} \times n_{u}} & \mathbf{0} & \cdots & \mathbf{0} \end{array}\right]_{1 \times m} \Delta U^{*}(k) Δu(k)=[Inu​×nu​​​0​⋯​0​]1×m​ΔU∗(k)
定义 K m p c = [ I n u × n u 0 ⋯ 0 ] 1 × m ( S u T Γ y T Γ y S u + Γ u T Γ u ) − 1 S u T Γ y T Γ y K_{\mathrm{mpc}}=\left[\begin{array}{cccc} I_{n_{u} \times n_{u}} & \mathbf{0} & \cdots & \mathbf{0} \end{array}\right]_{1 \times m}\left(\mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} \mathcal{S}_{u}+\Gamma_{u}^{\mathrm{T}} \Gamma_{u}\right)^{-1} \mathcal{S}_{u}^{\mathrm{T}} \Gamma_{y}^{\mathrm{T}} \Gamma_{y} Kmpc​=[Inu​×nu​​​0​⋯​0​]1×m​(SuT​ΓyT​Γy​Su​+ΓuT​Γu​)−1SuT​ΓyT​Γy​,因此控制增量可以写为

Δ u ( k ) = K m p c E p ( k + 1 ∣ k ) \Delta u(k)=K_{\mathrm{mpc}} E_{p}(k+1 | k) Δu(k)=Kmpc​Ep​(k+1∣k)

理解:

将 E p ( k + 1 ∣ k ) = R ( k + 1 ) − S x Δ x ( k ) − I y c ( k ) − S d Δ d ( k ) E_{p}(k+1 | k)=R(k+1)-\mathcal{S}_{x} \Delta x(k)-\mathcal{I} y_{c}(k)-\mathcal{S}_{d} \Delta d(k) Ep​(k+1∣k)=R(k+1)−Sx​Δx(k)−Iyc​(k)−Sd​Δd(k)带入 Δ u ( k ) = K m p c E p ( k + 1 ∣ k ) \Delta u(k)=K_{\mathrm{mpc}} E_{p}(k+1 | k) Δu(k)=Kmpc​Ep​(k+1∣k),可得

Δ u ( k ) = K m p c R ( k + 1 ) − K m p c ( S x + I C c ) Δ x ^ ( k ) − K m p c I y ^ c ( k − 1 ) − K m p c S d Δ d ( k ) \begin{aligned} \Delta u(k)=& K_{\mathrm{mpc}} R(k+1)-K_{\mathrm{mpc}}\left(\mathcal{S}_{x}+\mathcal{I} C_{c}\right) \Delta \hat{x}(k) -K_{\mathrm{mpc}} \mathcal{I} \hat{y}_{c}(k-1)-K_{\mathrm{mpc}} \mathcal{S}_{d} \Delta d(k) \end{aligned} Δu(k)=​Kmpc​R(k+1)−Kmpc​(Sx​+ICc​)Δx^(k)−Kmpc​Iy^​c​(k−1)−Kmpc​Sd​Δd(k)​

K m p c R ( k + 1 ) K_{\mathrm{mpc}} R(k+1) Kmpc​R(k+1)相当于未来参考输入的前馈补偿;
− K m p c S d Δ d ( k ) -K_{\mathrm{mpc}} \mathcal{S}_{d} \Delta d(k) −Kmpc​Sd​Δd(k)相当于可预测扰动的前馈补偿;
− K m p c ( S x + I C c ) Δ x ^ ( k ) − K m p c I y ^ c ( k − 1 ) -K_{\mathrm{mpc}}\left(\mathcal{S}_{x}+\mathcal{I} C_{c}\right) \Delta \hat{x}(k) -K_{\mathrm{mpc}} \mathcal{I} \hat{y}_{c}(k-1) −Kmpc​(Sx​+ICc​)Δx^(k)−Kmpc​Iy^​c​(k−1)相当于状态反馈补偿。

初学,转发保存。

模型预测控制(MPC)的公式推导与理解 (转)相关推荐

  1. 【附C++源代码】模型预测控制(MPC)公式推导以及算法实现,Model Predictive control介绍

    2022年的第一篇博客,首先祝大家新年快乐! 提示:本篇博客主要集中在对MPC的理解以及应用.这篇博客可以作为你对MPC控制器深入研究的一个开始,起到抛砖引玉,带你快速了解其原理的作用. 这篇博客将介 ...

  2. 模型预测控制_模型预测控制(MPC)算法之一MAC算法

    引言 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热,模型预测控制(MPC)算法作为一种先进的控制算法,其应用范围与领域得到了进一步拓展与延伸.目前提出的模型预测控制算法主要有基于非参数模型的 ...

  3. Apollo代码学习(六)—模型预测控制(MPC)

    Apollo代码学习-模型预测控制 前言 模型预测控制 预测模型 线性化 单车模型 滚动优化 反馈矫正 总结 前言 非专业选手,此篇博文内容基于书本和网络资源整理,可能理解的较为狭隘,起点较低,就事论 ...

  4. 无人车系统(十一):轨迹跟踪模型预测控制(MPC)原理与python实现【40行代码】

    前面介绍的PID,pure pursuit方法,Stanley方法都只是利用当前的系统误差来设计控制器.人们对这些控制器的设计过程中都利用了构建模型对无人车未来状态的估计(或者说利用模型估计未来的运动 ...

  5. 【控制control】机器人运动控制器----基于模型预测控制MPC方法

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.模型预测控制(MPC)的介绍及构成 1.介绍 2.构成 二.模型 ...

  6. Apollo代码学习(六)—模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

    Apollo代码学习(六)-模型预测控制(MPC)_follow轻尘的博客-CSDN博客_mpc代码

  7. 基于模型预测控制(MPC)的悬架系统仿真分析

    目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.2.1 随机C级路面 2.2.2 正弦路面 2.3 结论 3 总结 前言 模型预测控制是无 ...

  8. 基于扩展卡尔曼滤波EKF和模型预测控制MPC,自动泊车场景建模开发

    基于扩展卡尔曼滤波EKF和模型预测控制MPC,自动泊车场景建模开发,文复现. MATLAB 基于扩展卡尔曼滤波EKF和模型预测控制MPC,自动泊车场景建模开发,文复现. MATLAB(工程项目线上支持 ...

  9. 差分轮移动机器人模型预测控制MPC

    模型预测控制(MPC)与PID.纯追踪法相比有更好的路径跟踪效果,在自动驾驶领域有广泛应用.本文将以运动学为基础详细推导差分轮移动机器人模型预测控制(MPC) 运动学模型 根据移动机器人的运动学结构可 ...

最新文章

  1. 【Linux】linux中删除指定文件外所有其他文件(夹)的问题
  2. 译 | 使用Roslyn分析器高效编写更好的代码
  3. .net core实践系列之短信服务-架构优化
  4. bzoj2547 [Ctsc2002]玩具兵 dp+二分匹配
  5. h5 video 手机 显示第一帧_【图像处理二】HDMI显示(一)
  6. php机器人聊天对话框,仿机器人聊天窗口(热身)
  7. HTTP协议详细介绍~超详细
  8. Python统计磁盘代码文件行数
  9. Guava学习笔记之Maps(1):Maps.uniqueIndex(Iterable, Function)
  10. pivot sqlserver 条件_SqlServer行转列(PIVOT),列转行(UNPIVOT)总结
  11. Excel 有哪些可能需要熟练掌握而很多人不会的技能
  12. 专科计算机专业软件工程,软件工程专业专科学校都有哪些?
  13. 新浪云python示例_在新浪云安装Python应用
  14. excel熵值法计算权重_一文讲清楚分散投资(下)——让很多人顿悟的“熵增定律”在投资中的应用...
  15. 《数独游戏的设计与实现》
  16. uniapp ui框架——uView 及其可视化搭建工具
  17. cf 1144G 贪心
  18. 我们分析了金庸小说中出现的1367个人物名字,发现了一些相当惊人的事情
  19. 计算机辅助翻译专业院校,中国翻译学专业高校排名
  20. 戴尔7040linux改装win7,戴尔OptiPlex 3060台式机win10改win7系统(完美支持usb)

热门文章

  1. solr中英文分词模糊查询
  2. 谁再瞧不起搬砖的我。。
  3. Mask Scoring R-CNN[详解]
  4. Linux配置Redis主从
  5. MATLAB中的积分运算
  6. Java集合框架是什么?说出一些集合框架的优点?
  7. 节点重要度 matlab,复杂网络节点重要度常用指标及其计算
  8. Word 中给公式自动编号
  9. 小白c++ C6386缓冲溢出问题请教
  10. java的 violate 和 synchronize