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 是一份菜單,而不是一道固定套餐。