一、课程导论:多旋翼避障为什么需要MPC?

大家好,我是你们这门课的主讲人。在飞控这个行当摸爬滚打了十几年,从最早的PID调参调到怀疑人生,到后来接触LQR觉得终于上道了,再到现在几乎每个项目都离不开MPC——这条路我走得挺有感触的。

今天这第一讲,咱们不急着写代码,也不急着推公式。我想先聊聊一个核心问题:多旋翼避障,为什么非得用MPC? PID和LQR不香吗?

1.1 避障场景下的“老将”们:PID和LQR的局限

先说PID。PID这东西,说白了就是个“纠错器”。你给它一个目标位置,它根据当前误差算出力矩。简单、可靠、调参经验丰富——我早期做飞控时,光靠PID也能让飞机飞得挺稳。

但避障不一样。避障不是“飞到某个点”,而是“在动态环境中规划一条安全路径”。PID看不到未来,它只盯着眼前的误差。当障碍物突然出现在路径上,PID的反应往往是:先冲过去,再猛拉回来。结果就是震荡、超调,甚至撞上。

我在一个物流无人机项目里遇到过这种情况。飞机前方突然出现一根电线,PID控制的飞机直接冲了过去,虽然最后拉回来了,但那个瞬间的过冲差点把桨叶打坏。嗯,从那以后,我对PID在避障场景下的表现就持保留态度了。

再说LQR。LQR比PID聪明一点,它考虑了系统的状态方程,能给出一个最优的反馈增益。但LQR有个硬伤:它处理不了约束。什么叫约束?比如电机转速有上限、飞行速度不能太快、离障碍物必须保持安全距离——这些在LQR框架里很难直接塞进去。

你想想看,避障的本质是什么?就是在约束条件下找一条可行路径。LQR做不到这一点,它只能假设所有状态都是无界的。这在理论分析时很漂亮,但实际飞起来,电机饱和、位置超限,分分钟出事。

1.2 MPC的核心优势:预见未来、处理约束

MPC(模型预测控制)为什么能解决这些问题?说白了,它有三个核心能力:

  • 预测能力:MPC会基于当前状态和系统模型,向前预测未来N步的状态轨迹。它能看到“如果我现在这样控制,未来会怎样”。
  • 约束处理:MPC把所有的限制条件(速度上限、位置边界、障碍物距离)直接写进优化问题里。求解器会保证输出的控制量一定满足这些约束。
  • 滚动优化:每控制周期,MPC都会重新求解一次优化问题,用最新的状态更新预测。这就保证了实时性和鲁棒性。

一句话总结:PID是“看脚下”,LQR是“看一步”,MPC是“看十步,还知道哪里不能踩”。

我记得有一次做室内避障测试,飞机需要在狭窄的走廊里穿行。用PID时,飞机总是贴着墙走,稍微有点风就撞上了。换成MPC后,飞机自动规划出一条居中的路径,即使有扰动也能及时调整回来。那种感觉,就像从开手动挡换成了自动驾驶。

1.3 三种控制器的对比

特性 PID LQR MPC
是否需要模型 不需要 需要线性模型 需要模型(可非线性)
约束处理 不支持 不支持 原生支持
预测能力 有(滚动时域)
计算量 极低 较高(需在线求解)
避障适用性 一般 优秀
调参难度 中等(经验依赖) 较低(Riccati方程) 较高(权重+预测时域)

个人建议:如果你刚开始接触MPC,不要试图一步到位。我习惯先在仿真里调通一个简单的线性MPC,再逐步加入非线性模型和避障约束。这样出了问题,你知道是模型的问题还是求解器的问题。

1.4 课程整体项目框架

这门课不是纯理论课。我们会从零开始,一步步搭建一个完整的MPC避障系统。整个项目分为以下几个模块:

  1. 多旋翼动力学建模:建立四旋翼的12维状态方程,推导离散化模型。这是MPC的基础,模型不准,预测就是瞎猜。
  2. MPC核心算法实现:从线性MPC到非线性MPC,从无约束到有约束。我们会手写优化问题的构建过程,而不是直接调库。
  3. 避障约束建模:如何把障碍物(点、线、面)写成数学约束?如何保证求解的实时性?这里有很多工程技巧。
  4. 实时求解器选型与部署:OSQP、ACADO、CasADi...哪个适合嵌入式?怎么在STM32或NVIDIA Jetson上跑起来?
  5. 仿真与真机测试:在Gazebo中搭建避障场景,然后移植到真机上。我会分享我在真机测试中踩过的坑。

注意:MPC的计算量是PID的几十倍甚至上百倍。我曾经在一个低端MCU上尝试跑MPC,结果一个控制周期要算200ms,飞机早就炸了。所以硬件选型很重要,我们后面会专门讲。

1.5 学习路径建议

这门课的内容有一定门槛。如果你之前只接触过PID,我建议你按这个顺序来:

  • 第一步:先搞懂多旋翼的动力学模型。不用太深,能写出状态空间方程就行。
  • 第二步:理解MPC的基本原理——预测、优化、滚动。不要一上来就看复杂的非线性MPC。
  • 第三步:在MATLAB或Python里跑通一个简单的线性MPC例子。感受一下“预测”和“约束”到底是怎么回事。
  • 第四步:加入避障约束,从二维场景开始,再扩展到三维。
  • 第五步:移植到嵌入式平台,做真机测试。

我个人习惯是:先仿真,再真机。仿真里炸一百次都没事,真机炸一次就够你心疼的。

1.6 本章知识体系

下面这张图展示了本章的核心逻辑和整个课程的知识结构。你可以把它当作一张地图,随时回来看看自己走到哪了。

MPC多旋翼避障课程知识体系 MPC模型预测控制 预测能力 约束处理 滚动优化 PID:无模型,无约束 LQR:有模型,无约束 MPC:有模型,有约束 动力学建模 12维状态方程 MPC算法实现 线性→非线性 避障约束建模 点/线/面约束 求解器部署 OSQP/CasADi 最终目标:实现真机MPC避障飞行

1.7 写在前面的话

这门课不会让你成为MPC的理论大师,但会让你成为一个能把MPC跑在真机上的工程师。这两者是有区别的。理论大师可以推导几十页的公式,但可能不知道OSQP的求解器在STM32上会因为内存不足而崩溃。而我希望你学完这门课后,能真正让飞机飞起来、避开障碍物、稳稳落地。

嗯,这就是第一讲的全部内容。下一讲,我们会从多旋翼的动力学模型开始,一步步搭建MPC的基础。准备好了吗?


专注资料整理