JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

PID 控制:修正误差的三个项

误差的现在、过去与将来如何组合成机器人领域最常用的控制器。

一个误差,三种反应

几乎每一次机器人运动都从一个差距开始。你告诉关节你想让它到哪里(即设定值),再量测它实际在哪里,两者之差就是误差。控制器的全部工作,就是通过决定要多用力推动电机,把这个误差驱动到零。难点在于:单凭一个数字——「此刻的误差」——并不足以做出明智的推动。

PID 控制给出了优雅的答案。它从这一个误差信号中构造出三种独立的修正,再把它们相加。P 关注当下的误差,I 累加过去的误差,D 则通过观察误差变化的快慢来预判将来。每个项回答一个不同的问题,而它们之和就是控制器发出的指令。这正是最实用形态的反馈控制

误差的现在、过去与将来

比例项对现在做出反应。它把当前误差乘以一个增益:你离目标越远,它推得越猛;越接近目标,它越放松。单独来看,P 就像一根把机器人拉向设定值的弹簧。但纯弹簧有个缺陷——它常常会差那么一点点就停下。当残余误差很小时,比例推力会变得太弱,无法克服摩擦或重力,于是留下一个小小的、永久的差距,称为稳态误差

积分项治好了这个毛病。它对过去的误差进行累加——把每一点残余、时时刻刻地加起来。只要还有任何误差存在,积分项就会持续增长,它的贡献也不断上升,直到连极微小的差距也最终被挤掉。积分是有耐心的记忆:它不容许一个小而顽固的偏差永远存在。代价是:过于急切的积分可能累积得太多,使机器人在修正之前先冲过目标。

微分项望向将来。它关注的不是误差本身,而是误差变化的快慢,并对快速的变化施加反向作用。如果机器人正冲向目标,微分看到误差在迅速缩小,便提前踩下刹车,让接近的过程变得平滑。这种阻尼减小了超调——也就是冲过目标再弹回来的倾向——帮助运动平静地稳定下来,而不是来回振荡。

公式,落在一根电机轴上

把它写出来,控制器不过是对同一个误差 e(t) 的三种读法做加权求和。每个权重都是你要整定的增益——Kp、Ki、Kd——它决定每个项的「嗓门」有多大。

error:   e(t) = target - measured

u(t) = Kp * e(t)              # present: how far off
     + Ki * integral(e dt)    # past: total leftover
     + Kd * d/dt e(t)         # future: how fast e changes

# u(t) is the command sent to the motor
PID 控制律:对同一个误差的三种加权读法,求和成一条电机指令。

想象一台伺服电机把机械臂的某个关节转到指令角度。调高 Kp,手臂会更快地扑向目标,但调得过高会让它超调并颤抖。加入 Ki,任何细小的残余角度——比如重力压在手臂上造成的——都会被缓缓抹去。加入 Kd,手臂到位时就不再抖动,而是滑行就位。这三个增益是一种平衡:P 与 I 带来积极性,D 带来沉稳。

为何机器人首选 PID

PID 在机器人领域无处不在,因为它对你几乎毫无要求。与更花哨的控制器不同,它不需要机器精确的数学模型——只需要一个可读的误差和一个可调的旋钮。同样的三项配方,可以控制无人机的高度、轮式机器人的速度、3D 打印头的温度,以及四足机器人的关节力矩。当你只需保持或跟踪某一个量时,PID 通常是你最先、也是最后拿起的工具。

实践中,许多真实机器人甚至并不会用全这三个项。速度环常常以 PI——比例加积分——的形式运行,因为几乎无需预判。运行在干净、低摩擦关节上的位置环,则可能以 PD 形式运行,因为没什么稳态偏差要消除,却有不少超调需要阻尼。把用不上的项去掉是很常见的做法,也能让整定更简单。PID 是一份菜单,而不是一道固定套餐。