MPC 控制

randolf2022年8月9日
大约 5 分钟

MPC 控制

MPC 控制

定义

从 PID 控制引入问题

对 PID 控制而言,我们可以将其控制律写为如下形式:

可以发现,PID 具有如下的几个问题:

  • PID 控制器不具有“前瞻性”:参与计算的量存在当前的 error,上个控制周期的 error,以及之前所有的 error 累计和,但偏偏不存在未来的 error
  • PID 属于无模型控制:无模型控制导致对不同物理情形产生不了不同的控制信号,忽略了模型本身的性质

因此我们自然地思考到,需要引入对模型未来的分析,这必然需要得到物理系统的模型,得到了 MPC 控制的思路。

MPC 控制

物理问题

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

img

建立模型

首先建立动力学模型:

选取状态向量

,得到状态方程:

其中,

接下来对模型离散化方便计算。

使用前向欧拉法离散状态方程:

其中,

,T 代表控制周期。

预测控制

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

称为预测时域,括号中 代表在当前 k 时刻预测 k+j 时刻的系统状态。此外,预测动态系统未来状态时,还需要知道预测时域内的控制量

从当前状态的控制量开始,代表了我们需要优化的问题独立变量。

结合离散的控制方程,我们可以得到未来 p 个控制周期的系统状态:

因此整理为矩阵形式得到:

其中,

.

上面式子中的下三角形式,反映的是时间上的因果关系,即 时刻的输入对 时刻的输出没有影响。

优化

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

首先明确我们的控制目标:使得系统的状态跟踪期望的一条轨迹,因此我们定义预测时域内地参考值序列为:

可以发现,为了满足我们的优化目标,必然需要在预测时域内的轨迹信息,这是 MPC 的优越性也是问题所在。

我们希望找到一个最佳的控制量 ,使得预测时域内的状态向量和参考值越接近越好,那么我们定义这样一个优化函数:

这一优化问题前面一项代表预测状态向量与参考值之间的累计误差,后面一项代表对控制动作的正则项,减少控制动作。

因此这一控制问题可以描述为如下:

对优化函数进行展开得到:

其中式子 为常数项,因此舍去该项。对于这样二次型优化问题,使用 matlab 提供的优化函数 quadprog,得到:

求解问题为:

仿真

搭建 simulink 模型参考: Simulink 模型

模型跟踪效果为:

image-20210915223219016

需要注意的是,这里模型跟踪的序列是一个常数序列,因此实现起来较为简单,更复杂情形应该用实际期望轨迹实现。

参考

Loading...