2、MPC核心思想:模型预测控制的基本原理,滚动优化与反馈校正

好,咱们接着聊。上一章我们把PID的底裤都扒干净了,它的优缺点你心里应该有数了。那MPC到底是个什么玩意儿?凭什么它能成为飞控算法升级的“扛把子”?

说白了,MPC和PID最大的区别在于——它是个“有远见”的控制器。PID是“事后诸葛亮”,看到误差了才去调整。MPC呢?它会提前看未来几步,然后算出一个最优的“走法”。

我个人习惯把MPC比作下棋。PID像个新手,走一步看一步,被对手牵着鼻子走。MPC像个高手,提前算好了后面三五步的棋路,每一步都为了全局最优。嗯,这个比喻你记住,后面会反复用到。

2.1 模型预测控制的三板斧

MPC的核心思想,其实就三个步骤,我管它叫“三板斧”:

  1. 预测模型:用数学模型预测系统未来的行为。
  2. 滚动优化:在每个控制周期,求解一个有限时域的最优控制问题。
  3. 反馈校正:只执行第一个控制量,然后重新预测、重新优化。

听起来有点绕?别急,我一个一个拆开给你看。

2.1.1 预测模型:你得知道“未来”长啥样

MPC的第一步,就是需要一个“水晶球”——也就是系统的数学模型。这个模型能告诉你:如果我给一个控制量u,未来N步的系统状态x会变成什么样?

在飞控里,这个模型通常是状态空间方程。比如四旋翼的简化模型:

x(k+1) = A * x(k) + B * u(k)
y(k)   = C * x(k)

这里x是状态(位置、速度、姿态角),u是控制输入(电机转速、舵面偏角)。A和B矩阵描述了系统的动力学特性。

关键点:模型不需要100%精确,但必须能捕捉系统的主要动态特性。我在项目中遇到过,模型太粗糙会导致预测不准,但模型太精细又算不动。这是个trade-off。

2.1.2 滚动优化:算一笔“未来账”

有了预测模型,我们就可以“算账”了。在每个控制周期k,MPC会做这样一件事:

求解一个优化问题,目标是让未来N步的“代价”最小。这个代价函数通常长这样:

J = Σ (参考轨迹 - 预测轨迹)^2 + Σ (控制量变化)^2

第一项是跟踪误差,第二项是控制量惩罚(防止你猛打舵)。优化变量就是未来N步的控制序列:u(k), u(k+1), ..., u(k+N-1)。

你想想看,这就像你开车去一个目的地。PID是“看到偏了再打方向”,MPC是“提前看前方200米的路况,算好方向盘角度,然后一把打过去”。

我的经验:预测时域N的选择很关键。N太小,MPC就退化成类似PID的效果;N太大,计算量爆炸,而且模型误差会累积。我一般从N=10开始调,根据实际响应速度调整。

2.1.3 反馈校正:别太相信模型

模型总是不完美的。你算得再准,实际系统也会有扰动、有噪声。怎么办?

MPC的聪明之处在于:它只执行优化结果中的第一个控制量u(k)。然后到了下一个周期k+1,它会用最新的测量值重新预测、重新优化。

这就叫“滚动时域”。每次只走一步,但每一步都是基于最新信息重新算过的。说白了,就是“计划赶不上变化,那我就每步都重新计划”。

避坑指南:我曾经在一个项目中,把预测时域设得特别长,结果模型误差一累积,控制效果反而变差。后来我缩短了预测时域,并加入了反馈校正,效果立竿见影。记住:反馈校正是MPC的“安全网”,千万别省。

2.2 MPC vs PID:一张表看懂区别

特性 PID MPC
控制逻辑 基于当前误差 基于未来预测
模型需求 不需要模型 需要系统模型
约束处理 困难(需额外限幅) 天然支持(直接加入优化)
计算量 极低 较高(需在线求解优化)
最优性 局部最优 全局最优(在预测时域内)
适用场景 简单、快速系统 复杂、多约束系统

看到没?MPC最大的优势就是能处理约束。比如电机转速不能超过上限、舵面偏角不能太大——这些在PID里只能靠限幅硬切,在MPC里可以直接写进优化问题里,让算法自己去找“不越界”的最优解。

2.3 核心逻辑流程图

下面这张图,是我手绘的MPC核心逻辑。你盯着看30秒,基本就能理解整个流程了。

MPC核心逻辑:预测 → 优化 → 执行 → 反馈 参考轨迹 r(k) 期望的位置/姿态 滚动优化求解 min J = Σ(e² + Δu²) 执行 u(k) 只执行第一个控制量 四旋翼/固定翼 实际物理系统 状态测量 y(k) IMU/GPS/视觉 预测模型 x(k+1)=Ax(k)+Bu(k) 实线:控制流程 虚线:信息传递

这张图你看懂了吗?核心就是那个“滚动”的循环:预测未来 → 求解最优 → 执行一步 → 测量反馈 → 再预测未来……周而复始。

2.4 一个简单的例子:无人机悬停

假设你的四旋翼要悬停在高度5米处。PID的做法是:看到高度误差了,就增加或减少油门。MPC的做法是:

  1. 预测:如果我现在给油门50%,未来3秒的高度会怎么变化?
  2. 优化:算一算,给多少油门能让高度在3秒后刚好到5米,而且过程中不超调、不震荡?
  3. 执行:好,先按算出来的油门值飞0.1秒。
  4. 反馈:0.1秒后,看看实际高度是多少,重新预测、重新优化。

你看,每一步都是“算好了再动”。这就是MPC的底气所在。

核心总结:MPC不是“看到问题再解决”,而是“提前预判问题,然后优雅地避开”。它用模型预测未来,用优化选择最优,用反馈修正偏差。这三者缺一不可。

嗯,到这里你应该对MPC的核心思想有个整体认识了。下一节我们会深入具体的数学推导和代码实现,到时候你会看到,这些思想是如何变成一行行C代码的。


专注资料整理