雜訊與偏差:一塊靶子和一把箭
想像一位弓箭手朝靶心射箭。靶心是你希望測到的真值;每一支箭都是一次感測器讀數。完美的感測器會把每一支箭都疊在正中央。真實的感測器從不如此——而箭散開的方式,恰好告訴你正在面對哪一種「謊言」。
感測器雜訊是隨機抖動:箭鬆散地濺落在靶心四周,時高時低,毫無規律。取足夠多次的平均,它們大致相互抵消,落點接近中央。雜訊就是每次讀數中那種不可預測的晃動——電子元件的熱閃爍、細微振動、永遠停不下來的末位數字。
偏差則完全是另一回事:一個固定的偏移。設想弓箭手的瞄具被掰彎了,於是每一支箭都緊密成簇——卻總落在靶心左側兩環處。射擊既一致、甚至精密,卻系統性地偏離了真值。一個總是偏高讀出 3 kPa 的壓力感測器,或一個靜止不動卻報告出微小轉速的陀螺儀,都帶有偏差。
漂移:微小的偏差如何無止境地累積
當你開始把讀數隨時間累加起來時,偏差才真正變得危險。這正是漂移的核心,也是慣性測量單元(IMU)無法長時間告訴你它身在何處的原因。罪魁禍首是積分:把一個速率累加成一個總量。
陀螺儀測量的是轉動速率,而非角度。要知道朝向,你得把所有速率累加:角度 = Σ(速率 × 時間步長)。現在假設陀螺儀有 0.01 度/秒的偏差——在單次讀數裡小到根本察覺不到。積分十分鐘,這個看不見的偏移就悄悄變成了六度的航向誤差,穩步增長,再也回不來。
加速度計更糟,因為位置需要對加速度積分兩次。那裡的恆定偏差不是線性增長,而是隨時間的平方增長——誤差曲線會向上彎。這正是為什麼航位推算(僅憑自身運動感測器、不借助任何外部參照來估計位姿)會偏離真值,並在單獨使用時最終變得毫無用處。
gyro bias = 0.01 deg/s (looks harmless) after 10 s -> 0.1 deg error after 100 s -> 1.0 deg error after 600 s -> 6.0 deg error (heading is now wrong) accel bias integrated TWICE -> position error grows like t^2 small bias, short time -> fine small bias, long time -> meters off, and accelerating
校準:先測出誤差,再把它減掉
感測器校準是一項嚴謹的工作:在受控條件下測出感測器的已知誤差,再在軟體裡加以修正。最簡單也最常見的形式是把偏差歸零:把感測器放在你已經知道真實答案的情境中,看它實際報出什麼,把差值存為修正量。
- 給靜止的陀螺儀歸零:讓 IMU 完全靜止,此時真實轉速恰為零。對幾百次讀數取平均;得到的任何非零值就是偏差。從此後每次讀數中減去它。
- 修正比例因子:感測器還可能系統性地把數值按某個固定百分比放大或縮小。施加一個已知輸入(在力感測器上放精確砝碼、在轉台上施加已測轉動),算出讓讀數對上的乘數。
- 考慮工況:由於偏差隨溫度漂移,良好的校準往往會在多個溫度下記錄修正量,或在機器人每次開機且確知靜止時重新給陀螺儀歸零。
同樣的思路遠不止用於 IMU。給旋轉編碼器設定一個原點,使其計數對應到真實的關節角度;對深度相機進行校準,使其測距為真;就連力/力矩感測器也要在不受載時歸零,免得把夾爪自身的重量誤當作推力。
誠實的期待:校準只解決一半問題
這裡有個初學者常常忽略的關鍵。校準去除的是誤差中系統性的部分——偏差和比例因子,即那些可預測、可重複的部分。它對隨機部分無能為力。你無法減掉雜訊,因為按定義你就預測不了它。完美校準之後,箭重新以靶心為中心,卻依舊四散。
正是這殘留的散佈,催生了另外兩件工具。低通濾波透過隨時間求平均來平滑吵雜訊號,以一點回應速度換取更穩的數值。而感測器融合把多個不完美的感測器結合起來,讓它們各自獨立的誤差部分抵消——把會漂移的陀螺儀與像GNSS/GPS接收機這樣的絕對參照配對,就能得到陀螺儀的平滑,又不帶它那無界的漂移。
知道某個感測器以哪種誤差為主,就知道該伸手去拿哪種修正手段。下面的清單把常見的機器人感測器與它們最易犯的毛病配在一起——這是一張地圖,幫你判斷何時該校準、何時該濾波、何時該融合。
- 陀螺儀:以偏差與漂移為主。讀數本身相當安靜,但積分會讓微小偏差滾雪球。頻繁歸零;與絕對參照融合。
- 加速度計:短期吵雜,長期有偏差。用濾波馴服抖動;切勿單獨對它積分兩次來求位置。
- 輪式編碼器 / 里程計:雜訊很小,但來自打滑和輪徑誤差的系統性偏差,會隨行進而累積。
- GNSS/GPS:沒有長期漂移(它是絕對定位),但瞬時吵雜、跳變,且在室內會失效。是與陀螺儀融合的絕佳搭檔。
- LiDAR 與深度相機:主要是雜訊加校準偏移;沒有隨時間累積的漂移,因為每一次掃描都是對周遭環境的全新絕對測量。