2、控制算法基础:PID控制原理、前馈控制、自适应控制、鲁棒控制、模型预测控制(MPC)的适用场景对比
做运动控制这些年,我见过太多人在算法选型上栽跟头。有人拿着PID硬怼大滞后系统,有人把MPC用在了简单的恒速控制上。说白了,没有万能的算法,只有合适的场景。今天我就把这几种主流控制算法的底牌翻给你看。
2.1 PID控制:最经典的“老黄牛”
PID控制,我习惯叫它“看误差干活”。你偏离目标多少,我就按比例、积分、微分三个方向去拉你回来。公式很简单:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
其中 e(t) 是当前误差,Kp、Ki、Kd 分别是比例、积分、微分系数。
适用场景:
- 系统模型简单或难以建模(比如温度控制、电机速度环)
- 对稳态精度要求不高,允许小幅超调
- 实时性要求极高(采样周期在毫秒级甚至微秒级)
- 成本敏感,不想上太复杂的硬件
2.2 前馈控制:给PID找个“预言家”搭档
前馈控制说白了就是“提前补偿”。你知道系统接下来会受到什么扰动,或者知道目标轨迹会怎么变化,那就提前输出一个控制量,让PID少操点心。
公式形式:
u_ff(t) = K_ff * r_dot(t) (速度前馈)
u_ff(t) = M * a_des(t) (加速度前馈,M为等效惯量)
适用场景:
- 轨迹跟踪精度要求高(比如数控机床、机器人关节)
- 已知扰动规律(比如重力补偿、摩擦力补偿)
- 系统带宽受限,靠PID硬追会滞后
核心要点: 前馈不能单独用,必须和反馈(PID)配合。前馈负责“粗调”,反馈负责“精修”。我见过有人只加前馈不加反馈,结果模型一偏,系统直接飞车。
2.3 自适应控制:能“自我调节”的聪明算法
自适应控制,你想想看,系统参数变了(比如负载变重了、电机老化导致力矩系数下降),它能自己调整控制器参数。常见的有模型参考自适应(MRAC)和自整定调节器(STR)。
举个MRAC的例子:
// 参数更新律(梯度法)
theta_dot = -gamma * phi * e
// 其中theta是待调参数,phi是回归向量,e是跟踪误差
适用场景:
- 系统参数时变(比如无人机飞行中重心变化、机械臂抓取不同重量的物体)
- 难以离线精确建模
- 对鲁棒性要求高,但又不希望控制器太保守
2.4 鲁棒控制:给系统穿上“防弹衣”
鲁棒控制的核心思想是:我不指望模型有多准,但我保证在最坏情况下系统依然稳定。H∞控制、μ综合是典型代表。它通过设计控制器,让系统对模型不确定性(比如未建模动态、参数摄动)有最大的容忍度。
设计目标通常写成:
||W_s * S||_∞ < 1 且 ||W_t * T||_∞ < 1
// S是灵敏度函数,T是补灵敏度函数,W_s和W_t是加权函数
适用场景:
- 模型不确定性大(比如柔性机械臂、飞行器在大攻角下的气动参数变化)
- 安全关键系统(比如手术机器人、核工业机械手)
- 外部扰动频段已知但幅值不确定
2.5 模型预测控制(MPC):有“远见”的优化大师
MPC和其他算法最大的区别是:它不光看当前误差,还预测未来几步的系统行为,然后在线求解一个优化问题,找到最优的控制序列。说白了,它是个“走一步看三步”的算法。
标准MPC的优化问题:
min Σ (y_k+i - r_k+i)^T Q (y_k+i - r_k+i) + Σ u_k+i^T R u_k+i
s.t. x_k+i+1 = A x_k+i + B u_k+i
u_min ≤ u_k+i ≤ u_max
y_min ≤ y_k+i ≤ y_max
适用场景:
- 多变量系统(比如四轴飞行器的姿态+位置控制)
- 有显式约束(比如电机电流不能超限、机械臂不能撞到关节限位)
- 大滞后系统(比如化工过程、温度控制)
- 对最优性有要求(比如能耗最小、时间最优)
2.6 五种算法对比:一张表说清楚
| 算法 | 模型依赖度 | 实时性 | 抗干扰能力 | 处理约束 | 典型应用 |
|---|---|---|---|---|---|
| PID | 低 | 极高 | 中 | 弱(需额外限幅) | 电机速度环、温度控制 |
| 前馈+反馈 | 中(需知道模型结构) | 高 | 中高 | 弱 | 数控机床、机器人轨迹跟踪 |
| 自适应控制 | 中(需参数化模型) | 中高 | 高(参数收敛后) | 中 | 无人机、变负载机械臂 |
| 鲁棒控制 | 中(需不确定性界) | 高 | 极高 | 弱 | 飞行器、精密定位 |
| MPC | 高 | 低(取决于预测时域) | 高 | 强(天然支持) | 化工过程、自动驾驶、四轴飞行器 |
2.7 知识体系总览
下面这张图是我自己梳理的,把五种算法的核心逻辑和适用边界画在了一起。你看一眼就能明白它们各自的位置。
2.8 我的选型心法
说了这么多,最后分享一个我自己的决策流程。遇到一个控制问题,我会按这个顺序问自己:
- 模型好不好建? 不好建 → PID或前馈+反馈;好建 → 往下看
- 有没有硬约束? 有(比如电流限幅、位置限位)→ MPC;没有 → 往下看
- 参数会不会变? 会变 → 自适应控制;不变 → 往下看
- 安全要求高不高? 高 → 鲁棒控制;一般 → PID或前馈+反馈
嗯,这套流程帮我避过不少坑。你下次选型的时候,也可以拿它当个参考。记住,算法没有高低之分,只有合不合适。