
为了将算法知识真正转化为解决问题的能力,我们开设了《算法详解》专栏。每一期我们都会深度拆解一个核心算法,不只讲公式,更讲原理、局限,以及它们在真实系统里怎么落地。
假设让一架无人机从地面升到10 m。最直觉的做法是:不断看它离10 m还差多少,差得多就多给点推力,差得少就少给点。但真这么干,无人机大概率会冲过10 m,再掉回来,在目标高度附近反复振荡。
问题出在哪?同样是距离目标高度0.2 m,无人机可能在快速上升,也可能被一阵持续向下的风压住。前者需要提前收力,后者反而要继续增加推力。只看“现在还差多少”——信息不够。
PID 比纯比例控制多想两件事:误差持续了多久,以及它变化得有多快。

图1| 同样是距离目标⾼度 0.2 m,左侧⽆⼈机正在快速上升,需要提前收力;右侧无人机受到持续向下的风,需要增加补偿。图源:作者自制。©【深蓝 AI】编译
-
目标值:希望无人机到达的高度,也就是 10 m; -
测量值:传感器测到的实际高度; -
误差:目标高度与实际高度之差; -
控制量:控制器为了缩小误差给出的推力修正。

PID 的连续形式为:
右侧三项最终都要落到同一种控制量上,才能相加。
P:偏得越远,纠正得越用力
无人机刚离开地面时,误差很大,P项会给出较强的向上修正;越接近目标,P项越“温柔”。说白了,当前差多少,就按一定比例纠正多少。
增大后,系统通常会响应得更快,但控制动作也会更激进。真实系统存在惯性和延迟,控制器看到误差变小的时候,无人机可能还在继续向上运动。 过大,结果往往不是更快停在 10 m,而是超调甚至振荡。
但有些系统维持目标状态本身就需要额外控制量。假设持续向下的风需要增加 5 N 推力才能抵消,而 P 只有在存在高度误差时才会给出这 5 N。结果可能是无人机停在 9.8 m:0.2 m 的误差刚好换来抵消风力的推力,误差却不再继续缩小。这就是稳态误差。
I:小误差⼀直不消失,就继续累积补偿
I 项单看公式不太直观,继续看刚才那阵风。如果无人机长期停在 9.8 m,每个控制周期都有 0.2 m 的正误差。⼀次不大,但它连续存在 1s、2s、3s,积分值就会不断增加,直到补偿足以把无人机推回10m。
所以 I 不只是模糊地“记住过去”,它是在算⼀笔账:
这份没有被解决的误差,累计起来到底有多少?
当误差回到 0 时,P 项输出也会回到 0;I 项此前积累的控制量却可以保留下来,用于抵消持续风力。这正是积分能够消除稳态误差的原因。
积分也可能记得太多。例如电机已经达到最⼤推力,无人机仍然无法上升,误差就会持续存在。如果积分器还在累加,等外部限制消失后,过⼤的控制量会把无人机猛地推过目标。这就是积分饱和,也叫 windup。
⼯程里常用条件积分、积分限幅、积分分离和反计算等⽅法处理它。
注意:简单粗暴地给积分项限幅有时能用,但不等于所有 anti-windup 方法都只是“加⼀个限幅”。
D:误差还没归零,也可能已经该收力了
如果误差仍定义为 ,并且目标值在这一小段时间内不变,那么:
因此,对测量值求微分时要带负号:
-
P 简单直接; -
PI 多了消除持续偏差的能力,在速度、转速、温度等控制中很常见; -
PD 更关注运动趋势,常用于增加阻尼、减少超调; -
完整 PID 则要同时处理积分饱和、微分噪声和参数耦合。
前馈利用已知信息提前动作,反馈负责收拾模型不准、外部扰动和执行误差。
至于调参,我不太赞成只记“先 P、再 D、最后 I”这一类口诀。
它可以作为某些系统的起点,却不是通用流程。至少要先弄清输入输出、量纲、控制周期、执行器范围和评价指标,再决定观察什么曲线、增加哪一项。 否则参数调了半天,最后可能只是用 PID 在补偿错误的符号、延迟的信号,甚至一张不准确的标定表。
实际程序以控制周期 运行。用最直观的前向差分写法,PID 可以离散成:
这只是便于理解的一种写法。真实代码可能用梯形积分、带滤波的微分,还要对 和 做 anti-windup 与限幅。


位置外环先计算纵向位置误差:
它的输出不是油门,而是速度修正量:
这里先用最简单的P位置环说明。更完整的实现也可以是PI、PID,或者带限幅和增益调度的控制器。车辆落后2 m时,如果外环比例增益取,便得到的速度修正:
注意:这里不是PID把“米”神奇地变成了“米每秒”,也不是对位置误差求了一次导数,而是控制器增益承担了量纲和时间尺度的映射。
速度修正量与规划参考速度相加,形成新的目标速度:
速度内环再计算目标速度与实际速度的误差:
经过速度控制器后得到反馈加速度:
这里同样先写成最简单的 P 形式。如果速度环采用 PI 或 PID,还要加上速度误差的积分项和微分项。在本文定义的“速度误差输入、加速度修正输出”下,比例增益 的单位为 ,因此可以把 的速度误差映射成 的加速度修正:
-
位置外环判断车辆在道路进度上落后或超前多少; -
速度内环负责让车辆尽快、稳定地跟上修正后的速度目标。

-
车辆上坡起步出现后溜,究竟是坡度补偿不足、制动释放过早,还是驱动建立得太慢?
-
低速跟车出现顿挫,是速度环参数太激进、标定表不连续,还是油门与制动切换逻辑有问题?
-
无人机在阵风中高度抖振,是 D 项放大了传感器噪声、D 项加的低通滤波不够,还是前馈没有及时补偿风速变化?
真正有用的不是背下三个公式,而是看到一个控制现象后,知道沿着哪条信号继续往下找。这也决定了一个系统只是"能动",还是足够平顺、稳定。
PID告诉我们的核心道理是:不建模,也能控。但问题随之而来——如果手里有了系统的模型,能不能控得更好、更省力?
~【深蓝学院】技术交流群~
?致力于帮助各位朋友「打破隐形的墙」,共建一个更自由、更有深度、更有价值的交流生态社区!在各大企业工作的,可以相互内推,互通有无;在学校读研读博的,可以交流想法,携手合作。
扫码添加阿蓝,选择想要加入的交流群即可
(按照提交顺序邀请,请尽早选择)
?
