紙面上的模型,與房間裡的機器人
在本章前面,我們搭建的控制器都重度依賴機器人的模型。比如計算力矩控制和回授線性化,它們會按機器人的慣性矩陣和重力項精確算出所需力矩,先把機器人自身的動力學抵消掉,再在上面疊加一個乾淨的、教科書式的響應。模型正確時,這招很漂亮。麻煩在於,模型從來都不完全正確。
想像一條空載時調好的機械臂,現在被要求拎起一整罐油漆。它的有效質量陡然增加,於是先前精心抵消的重力項就算錯了,機械臂往下沉。再加上隨潤滑脂升溫而變化的關節摩擦、用了一年後出現曠量的齒輪,以及感測器的緩慢漂移,紙面與現實的差距只會越拉越大。本篇要講的,正是那些一開始就預料到模型有誤、卻仍能保持穩定的控制器。
兩條出路:把未知量學出來,或為它們披上鎧甲
適應控制走的是樂觀路線:如果某個參數不確定,就讓機器人一邊執行一邊把它學出來。控制器內部維護一個不斷更新的估計值,比如負載質量,觀察實際運動如何偏離預測運動,再把這個估計值往上或往下微調,以縮小誤差。拎起油漆罐,一兩秒內控制器就自我說服到了更重的質量,下沉隨之消失——無需人工重調。
強健控制走的是悲觀路線:別去釘死那個未知量,直接按最壞的合理情形來設計。你告訴控制器質量落在 1 到 5 公斤之間,要求給出一個固定的設計,在整個區間內都保持穩定。結果是一個永遠不必學習、也永遠不會被打個措手不及的控制器——代價是當實際條件其實很溫和時它會顯得保守,就像在最後晴了的日子裡穿了雨衣。
滑模控制是強健家族裡最激進的成員。它在誤差空間裡定義一個目標面——比如「位置誤差加上速度誤差等於零」——然後讓控制量又快又猛地來回切換,把系統狠狠按到這個面上並釘住。一旦機器人落在面上,數學就保證它會朝目標滑去,與確切的質量或摩擦無關。它對模型誤差極不敏感。
選哪條路是實打實的工程取捨。當不確定性很大但變化緩慢、且你能容忍一小段學習過渡時,適應控制最出彩。當你需要從第一毫秒就有保證、又能容忍一些保守或抖振時,強健控制與滑模控制最出彩。許多量產系統會把兩者混用——慢變的部分靠學習,快變的部分靠鎧甲。
看見測不到的東西:狀態觀測器
第二種「出錯」是測量的缺失。現代控制喜歡作用於機器人的完整狀態——每個關節的位置和速度,也許還有內部磁通或溫度——但真實機器人很少能把這些全部測到。編碼器給你位置;乾淨的速度往往得靠推斷,而像力控關節內部彈性變形這類量,可能壓根沒有感測器。那麼,在看不見完整狀態時,你又怎麼做全狀態回授呢?
狀態觀測器從你能測到的輸出裡重建隱藏狀態。龍伯格觀測器是最乾淨的例子:在軟體裡並行跑一份機器人模型的副本,餵給它同樣的指令,讓它預測感測器應當讀到什麼。把這個預測與真實讀數比對;一旦兩者不一致,就把差值回授回去修正內部模型。這份副本會收斂到真實的隱藏狀態,於是你就有了估計出的速度和內部變數,可以送進全狀態回授。
# Luenberger observer, one update step x_hat = x_hat + dt * (A @ x_hat + B @ u) # predict from the model copy y_hat = C @ x_hat # what the sensors SHOULD read x_hat = x_hat + L @ (y_meas - y_hat) # correct by the measurement gap # L is the observer gain; bigger L trusts the sensor, smaller L trusts the model
觀測器能成立,前提是隱藏狀態確實在輸出上留下了「指紋」——這一性質叫可觀測性。如果兩種不同的內部情形會永遠產生完全相同的感測器讀數,那任何觀測器都無法區分它們,重建也就失敗了。在信任觀測器之前先檢查可觀測性,就像在開車過橋之前先確認橋能承重一樣,是最基本的。
還有一個把本節與全章勾連起來的實用手段:增益排程。不用單一的固定控制器(或觀測器),而是預先調好幾套,再根據工況——機械臂是伸展還是收攏、是慢是快——在它們之間切換或混合。它是適應控制的一個輕量級表親:你並不線上學習新增益,但確實會隨著機器人有效動力學的變化,切換當前生效的那套預設增益。
把它們組裝起來——並望向邊界之外
沒有哪台真實機器人會孤立地只用其中一種。在一台行走的人形機器人上,本章講的一切會同時疊進一個全身控制器裡:觀測器估計身體的速度和質心去向,最佳化器在一次求解中同時統籌平衡、伸手和關節限位,而強健或適應項則在底層默默吸收摩擦與負載的變化。本篇的這些方法並非彼此競爭——它們是同一個堆疊裡的不同層。
留意貫穿整章的那個反覆出現的模式:先寫下你能寫出的最好模型,再加上一套機制來扛住你弄錯的那部分。阻抗控制扛住了你無法預測的接觸;適應與強健控制扛住了你無法釘死的參數;觀測器扛住了你無法測量的狀態。「優雅地處理模型誤差」大概就是進階控制的那條貫穿主線。
前沿把這個想法推得更遠。基於學習的控制用從資料中學到的模型取代手寫模型——一個視覺-語言-動作模型,或一個由模仿學習訓練出的策略,能捕捉到任何方程式都沒刻畫的、雜亂的摩擦與接觸效應。再往外,腦機介面讓人的神經訊號成為控制器要追蹤的參考,把機械肢體變成意圖的延伸。那個誠實的內核始終不變:模型一定會錯,所以要造出能與之共處的控制。