《飞控数学与控制 · 新手入门连载》第 9 期|约束优化与二次规划:为 MPC 铺路
导读:第 8 期的梯度下降和牛顿法解的是"无约束"最优化——参数随便取。但真实飞控处处是约束:电机转速不能超过上限、PWM 输出有饱和区、姿态角不许乱翻、避障时位置有边界。本期讲约束优化:拉格朗日乘子法是怎么回事、**二次规划(QP)**为什么是飞控优化的事实标准,以及它和模型预测控制(MPC,第 18 期)的关系。读完你会看懂"混控器限幅"和"MPC 每步在解什么"。
一、为什么飞控离不开约束优化
约束优化的一般形式:
minxf(x)s.t.gi(x)≤0, hj(x)=0 \min_x f(x) \quad \text{s.t.} \quad g_i(x) \le 0,\; h_j(x) = 0xminf(x)s.t.gi(x)≤0,hj(x)=0
gi≤0g_i \le 0gi≤0是不等式约束,hj=0h_j = 0hj=0是等式约束。飞控实例:
- 电机转速:0≤ω≤ωmax0 \le \omega \le \omega_{\max}0≤ω≤ωmax(不等式约束);
- 姿态角:∣ϕ∣≤ϕmax|\phi| \le \phi_{\max}∣ϕ∣≤ϕmax(防翻转);
- 混控器输出:umin≤u≤umaxu_{\min} \le u \le u_{\max}umin≤u≤umax(PWM 限幅)。
没有约束时最优解可能在可行域外;有约束时最优点可能"卡"在边界上——这是本期要讲的几何直觉。
二、拉格朗日乘子法:等式约束的几何直觉
先看等式约束(技巧:从简单情况入手):
minxf(x)s.t.h(x)=0 \min_x f(x) \quad \text{s.t.} \quad h(x) = 0xminf(x)s.t.h(x)=0
2.1 几何直觉
h(x)=0h(x)=0h(x)=0在平面上是一条曲线。沿这条曲线移动xxx,fff的等高线会变化。最优点的特征:等高线恰好与约束曲线相切——此时∇f\nabla f∇f与∇h\nabla h∇h平行(技巧:相切 ⟹ 法线共线):
∇f(x∗)=−λ ∇h(x∗) \nabla f(x^*) = -\lambda\,\nabla h(x^*)∇f(x∗)=−λ∇h(x∗)
2.2 拉格朗日函数与推导
定义(技巧:把约束"罚"进目标):
L(x,λ)=f(x)+λ h(x) L(x, \lambda) = f(x) + \lambda\, h(x)L(x,λ)=f(x)+λh(x)
λ\lambdaλ叫拉格朗日乘子。最优性条件(技巧:对全部变量求导置零):
∂L∂x=∇f(x)+λ∇h(x)=0 \frac{\partial L}{\partial x} = \nabla f(x) + \lambda\nabla h(x) = 0∂x∂L=∇f(x)+λ∇h(x)=0
∂L∂λ=h(x)=0 \frac{\partial L}{\partial \lambda} = h(x) = 0∂λ∂L=h(x)=0
第一个式子就是"梯度平行"(∇f=−λ∇h\nabla f = -\lambda\nabla h∇f=−λ∇h),第二个式子把约束拉了回来。两个方程解出x∗x^*x∗和λ\lambdaλ——拉格朗日乘子法把"带约束的最优化"变成"无约束的方程组"。
2.3 不等式约束与 KKT 条件(简述)
对g(x)≤0g(x) \le 0g(x)≤0,最优性条件推广为 KKT(Karush–Kuhn–Tucker)条件,核心是互补松弛(技巧:记住"要么约束不紧、要么乘子为零"):
λg(x)=0,λ≥0 \lambda g(x) = 0, \quad \lambda \ge 0λg(x)=0,λ≥0
含义:约束不起作用(g<0g<0g<0)时λ=0\lambda=0λ=0;约束起作用(g=0g=0g=0,即"卡在边界")时λ>0\lambda>0λ>0。这解释了飞控限幅:电机没到上限时它不影响优化,一旦触到上限,最优解就贴在边界上。
三、二次规划 QP:飞控优化的事实标准
3.1 定义
目标函数为二次、约束为线性的优化问题(技巧:最"温和"的非线性优化):
minx12xTQx+cTxs.t.Ax≤b \min_x \frac{1}{2}x^T Q x + c^T x \quad \text{s.t.} \quad A x \le bxmin21xTQx+cTxs.t.Ax≤b
其中QQQ对称半正定(保证凸性,凸问题只有一个全局最优)。为什么飞控离不开 QP:
- 很多实际目标(误差平方和、能量最小)本身就是二次的;
- 线性约束能表达饱和、边界;
- 凸 QP 有成熟高效算法(内点法、主动集法、OSQP),微秒到毫秒级可解;
- MPC 每步控制都解一个 QP。
3.2 可行域几何
每个线性不等式aiTx≤bia_i^T x \le b_iaiTx≤bi是半空间,多个半空间相交成多面体(可行域)。无约束最优解如果在多面体内,直接取它;如果在外,最优解"投影"到边界上。
3.3 如何解 QP(直觉版)
- 主动集法:猜哪些不等式"卡住"(叫主动集),当作等式约束用拉格朗日解,再检查其他约束是否违反、乘子符号是否合法,迭代修正(技巧:本质是拉格朗日 + 猜边界);
- 内点法:把不等式用对数障碍函数−μ∑ln(bi−aiTx)-\mu\sum\ln(b_i-a_i^Tx)−μ∑ln(bi−aiTx)平滑掉,用牛顿法迭代、逐步让μ→0\mu\to 0μ→0。
四、飞控实例:电机混控推力分配(带饱和的 QP)
四旋翼的混控问题:已知期望的三轴力矩与总推力τdes∈R4\tau_{des} \in \mathbb{R}^4τdes∈R4,求四个电机转速平方u∈R4u \in \mathbb{R}^4u∈R4(ui=ωi2u_i = \omega_i^2ui=ωi2),使实际输出尽可能接近期望,同时转速有上下限:
minu12∥Bu−τdes∥2s.t.umin≤ui≤umax \min_u \frac{1}{2}\left\| B u - \tau_{des} \right\|^2 \quad \text{s.t.} \quad u_{\min} \le u_i \le u_{\max}umin21∥Bu−τdes∥2s.t.umin≤ui≤umax
其中BBB是4×44\times 44×4混控矩阵(技巧:由几何布局决定的常数矩阵)。展开目标(技巧:∥Bu−τ∥2=uTBTBu−2τTBu+const\|Bu-\tau\|^2 = u^TB^TBu - 2\tau^TBu + \text{const}∥Bu−τ∥2=uTBTBu−2τTBu+const):
12uT(BTB)⏟Qu−(BTτdes)⏟cu+const \frac{1}{2}u^T \underbrace{(B^TB)}_{Q} u - \underbrace{(B^T\tau_{des})}_{c} u + \text{const}21uTQ(BTB)u−c(BTτdes)u+const
正是标准 QP 形式,约束umin≤u≤umaxu_{\min} \le u \le u_{\max}umin≤u≤umax写成Au≤bA u \le bAu≤b。饱和发生时(某电机到上限),QP 的最优解会把多余的期望力矩重新分配给未饱和的电机——这就是飞控里"限幅但不失稳"的数学基础。再往前一步,把状态预测 N 步、每步带约束地解 QP,就是模型预测控制 MPC(第 18 期),滚动优化让无人机贴着性能边界飞行而不违反约束。
五、小结与下期预告
小结:
- 约束优化minf s.t. g≤0,h=0\min f \text{ s.t. } g\le0, h=0minfs.t.g≤0,h=0描述真实飞控的饱和与边界;
- 拉格朗日乘子法:最优处∇f\nabla f∇f与∇h\nabla h∇h平行,KKT 的互补松弛λg=0\lambda g=0λg=0解释"卡边界";
- QP = 二次目标 + 线性约束,凸、可高效求解,是 MPC 的每步子问题;
- 混控推力分配就是带饱和的 QP,饱和时最优解自动重分配力矩。
思考题:
- 为什么凸 QP 只有一个全局最优?(答案:凸函数 + 凸可行域)
- 电机没有饱和时,QP 解和无约束解一样吗?(答案:一样,约束不起作用 λ=0)
- MPC 为什么需要 QP 求解器足够快?(答案:每个控制周期都要在线解一次)
下期预告:第 10 期进入经典控制——传递函数、时域/频域分析与稳定性判据,飞控从"优化视角"转向"反馈视角"。
参考资源:
- 《Convex Optimization》Boyd & Vandenberghe(QP、KKT、内点法)
- 《Model Predictive Control》Rawlings & Mayne
- OSQP / qpOASES 求解器文档(嵌入式 QP 实现)