第14篇:MPC控制案例——无人机高度控制

你是否遇到过?

调试无人机定高算法时,是不是总被物理硬约束 搞得束手无策?想让无人机精准悬停在目标高度,却频繁出现电机推力超限、升降速度失控,甚至因超调过大砸向地面;换成经典LQR控制器,虽说稳态响应平稳,却完全做不到提前规避约束,只能在控制量计算完成后强行限幅,最终导致控制失效、轨迹抖动、定高精度暴跌。本篇聚焦多旋翼无人机高度闭环控制这一工控与机器人领域的典型场景,手把手拆解MPC处理多约束的核心逻辑,带你从零搭建Python仿真模型,吃透预测区间、采样时间等关键参数的工程调参法则,彻底摆脱"理论懂了、工程落地难"的困境,快速掌握带约束最优控制的实战思路。

核心内容:从LQR短板到MPC实战,无人机高度控制全拆解

一、先看痛点:LQR控制无人机高度的天生缺陷

在切入MPC实战之前,我们先复盘经典**线性二次型调节器(LQR)**在无人机高度控制中的应用表现,找准其工程落地的核心短板,才能真正理解MPC的优势与必要性。

无人机高度控制的本质是调节旋翼推力,克服重力实现定高、匀速升降,简化后属于典型的单输入单输出(SISO)线性系统:控制输入为电机推力增量,系统输出为无人机实时高度、升降速度。LQR通过最小化状态误差与输入能耗的二次型代价函数,求解全局最优反馈增益,控制曲线平滑、闭环稳定性强,但在工程实际中存在两个致命短板

  • 无法主动约束系统状态:LQR算法设计阶段完全不纳入高度上限、安全高度、升降速度限值等状态约束,控制器只专注计算理论最优控制量,一旦系统逼近物理边界(如最大上升速度、最低禁飞高度),控制器无任何预判能力,极易触发危险飞行状态。

  • 输入约束后置强制执行:LQR先完成控制量求解,再通过限幅函数粗暴截断超限推力,相当于"先全速行驶、临近障碍再急刹",会直接破坏最优控制轨迹,引发稳态误差、持续振荡,严重时甚至导致闭环系统失稳。

生活化类比:LQR更像是"闭眼跑最优路线",只盯着终点忽略路况与限速,撞到护栏才刹车;而MPC是"睁眼预判行驶",提前观测前方路况、限速要求,每一步都在约束范围内选择最优动作,全程不越界、不超限。

二、MPC控制器:带约束的无人机高度控制方案

1. 无人机高度系统建模(物理意义优先,拒绝纯数学抽象)

我们先建立离散化状态空间模型,这是MPC算法运算的基础,所有数学符号均先明确物理含义,杜绝歧义:

  • 状态变量 : x=[hh˙]x = \begin{bmatrix} h \\ \dot{h} \end{bmatrix}x=[hh˙] ,其中 hhh 表示无人机实时高度(单位:m), h˙\dot{h}h˙ 表示高度变化率(即升降速度,单位:m/s)

  • 控制输入 : uuu 表示旋翼推力增量(单位:N),受电机物理约束: umin≤u≤umaxu_{min} \leq u \leq u_{max}umin≤u≤umax (推力不能为负,且不得超过电机最大功率对应的额定推力)

  • 状态约束 :高度约束 hmin≤h≤hmaxh_{min} \leq h \leq h_{max}hmin≤h≤hmax (防止撞地或超出飞行量程),升降速度约束 h˙min≤h˙≤h˙max\dot{h}{min} \leq \dot{h} \leq \dot{h}{max}h˙min≤h˙≤h˙max (避免急升急降,保证飞行平稳性)

基于采样时间 TsT_sTs 的离散化状态方程:

x(k+1)=Ax(k)+Bu(k)x(k+1) = A x(k) + B u(k)x(k+1)=Ax(k)+Bu(k)

其中: A=[1Ts01]A = \begin{bmatrix} 1 & T_s \\ 0 & 1 \end{bmatrix}A=[10Ts1] , B=[0Ts/m]B = \begin{bmatrix} 0 \\ T_s/m \end{bmatrix}B=[0Ts/m] , mmm 为无人机整机质量(单位:kg),此处忽略空气阻力做简化建模,贴合工程入门仿真需求。

2. MPC核心逻辑:滚动优化+约束满足,三步实现合规控制

MPC的核心是预测-优化-滚动执行闭环机制,完美解决约束控制难题,拆解为三步更易理解:

  1. 预测未来状态 :基于当前时刻采集的系统状态,预测未来 NpN_pNp 个采样周期(预测时域)内的系统状态变化趋势,提前感知约束风险;

  2. 在线优化求解 :在严格满足高度、速度、输入推力约束的前提下,最小化高度跟踪误差与控制能耗,求解未来 NcN_cNc 个周期(控制时域)的最优控制序列;

  3. 滚动执行更新:仅施加当前时刻的第一个最优控制量,下一时刻重新采集状态、重复预测-优化流程,实时适配阵风、质量偏移等外部扰动。

与LQR相比,MPC将约束条件直接嵌入优化目标函数,每一步输出的控制量都符合物理限制,从根源杜绝超限问题,兼顾最优性与安全性。

3. Python仿真验证(纯实操导向,可直接复现)

我们采用Python+NumPy+CVXPY凸优化库搭建仿真环境,直观对比LQR与MPC的定高控制效果,参数与代码均可直接复现:

  • 仿真基础参数 :无人机质量m=1kg,采样时间 Ts=0.1sT_s=0.1sTs=0.1s ,预测时域 Np=20N_p=20Np=20 ,控制时域 Nc=10N_c=10Nc=10 ;约束条件:高度0-10m,升降速度-1~1m/s,推力0-20N;

  • 仿真测试场景:设置目标高度阶跃指令,从2m跃迁至5m,对比两种控制器的响应曲线、约束 compliance 情况;

  • 仿真结果结论:LQR出现明显速度超限、高度超调,稳态波动大;MPC全程贴合所有约束,无超调、响应平滑,稳态误差趋近于0,遭遇阵风扰动时收敛速度更快、抗扰性更强。

python 复制代码
# 无人机高度MPC控制核心仿真代码(简化可复现版)
import numpy as np
import cvxpy as cp

# 1. 定义无人机高度系统矩阵
Ts = 0.1    # 采样时间/s
m = 1       # 无人机质量/kg
A = np.array([[1, Ts], [0, 1]])          # 状态矩阵
B = np.array([[0], [Ts/m]])              # 输入矩阵

# 2. MPC核心参数与约束配置
Np = 20  # 预测时域:展望未来20个周期
Nc = 10  # 控制时域:优化未来10个周期控制量
# 物理约束(工程实际限值)
u_min, u_max = 0, 20        # 推力增量约束/N
h_min, h_max = 0, 10        # 高度约束/m
dh_min, dh_max = -1, 1      # 升降速度约束/m/s

# 3. 在线凸优化求解
u = cp.Variable((Nc, 1))                # 控制变量序列
x = cp.Variable((Np+1, 2))             # 状态预测序列
cost = 0                               # 代价函数初始化
constr = [x[0] == x_current]           # 初始状态约束

for t in range(Np):
    # 状态预测方程
    constr += [x[t+1] == A @ x[t] + B @ (u[t] if t < Nc else u[-1])]
    # 代价函数:侧重高度跟踪精度
    cost += cp.sum_squares(x[t][0] - h_ref)
    # 状态约束嵌入
    constr += [h_min <= x[t][0], x[t][0] <= h_max]
    constr += [dh_min <= x[t][1], x[t][1] <= dh_max]

# 输入推力约束嵌入
constr += [u_min <= u, u <= u_max]

# 求解最优控制并执行首个控制量
prob = cp.Problem(cp.Minimize(cost), constr)
prob.solve()
u_opt = u.value[0]  # 仅执行当前时刻最优控制量

三、关键参数工程调优:预测时域+采样时间

1. 预测时域 NpN_pNp 设计法则(工程经验优先)

预测时域决定了MPC的"预判视野长度",直接平衡控制性能与算力消耗,调优核心要点:

  • 时域过短:预判视野不足,无法提前感知远期约束,控制滞后、高度超调加剧,失去MPC核心优势;

  • 时域过长:优化变量数量暴增,算力开销指数级上升,嵌入式平台难以实现实时求解;

  • 工程经验取值 :覆盖系统上升时间的1~1.5倍,无人机高度控制属于慢动态系统, NpN_pNp 取20~50即可兼顾性能与算力。

2. 采样时间 TsT_sTs 选型准则(实时性与算力平衡)

采样时间是MPC嵌入式落地的核心参数,直接决定控制实时性与求解可行性,调优核心要点:

  • 采样时间过小:控制频率过高,嵌入式芯片算力不足,导致优化求解超时、控制滞后;

  • 采样时间过大:控制更新太慢,无法及时抑制外部扰动,高度跟踪精度大幅下降;

  • 工程经验取值:无人机高度控制推荐0.05~0.2s,既能保证动态响应速度,又能给优化求解预留充足时间。

本篇总结

LQR控制器可实现无人机高度的理论最优控制,但无法主动处理状态与输入约束,仅能事后限幅导致控制性能大幅衰减。MPC依托滚动优化机制,将高度、速度、推力等硬约束直接嵌入优化目标,从根源解决约束超限问题,兼顾控制精度与工程安全性。Python仿真结果直观验证,MPC在带约束场景下响应更平滑、无超调、抗扰能力更突出。预测时域需匹配系统动态特性,采样时间要平衡实时性与算力开销,这两大参数是MPC工程落地的关键。掌握这套MPC约束控制思路,可快速迁移至机器人、自动驾驶、工业伺服等多变量约束控制场景。

思考题

  1. 实际无人机飞行中会遭遇气流扰动、载荷偏移等不确定性干扰,结合本篇MPC框架,思考如何加入扰动观测器鲁棒优化项,进一步提升定高稳定性与抗扰性?

  2. 如果将无人机单维度高度控制拓展为三维位置控制(多输入多输出系统),MPC的预测模型、约束条件、代价函数需要做哪些针对性修改,才能实现多自由度协同控制?

相关推荐
2401_891482172 小时前
C++中的事件驱动编程
开发语言·c++·算法
吐个泡泡v2 小时前
Python 开发“设计模式”指南
python·设计模式
sw1213892 小时前
C++与Rust交互编程
开发语言·c++·算法
Huyuejia2 小时前
self-attention代码
算法
梦想的初衷~2 小时前
无人机多光谱-生态三维建模全流程实战——基于Python与AI辅助技术
人工智能·python·无人机·生态·遥感·多光谱
2401_857918292 小时前
模板编译期机器学习
开发语言·c++·算法
亥时科技2 小时前
2026 低空经济政策红利释放!开源 AI 无人机平台成产业落地新引擎
开源·无人机
MadPrinter2 小时前
Attention Residuals 代码实现:从原理到 PyTorch 实战(第 2 篇)
人工智能·pytorch·python·ai·自动化·openclaw
JMet2 小时前
AI测试用例生成脚本
人工智能·python·源码