狀態觀測器(龍伯格觀測器)
狀態觀測器是一段軟體,當你無法直接測量一台機器的全部內部情況時,它能把那些看不見的內部狀態推算出來。許多控制器都需要知道機器人完整的內部狀態——每個關節的角度,以及每個關節轉動的快慢——但感測器往往昂貴、笨重又帶雜訊,所以你常常只能測到其中一部分,比如只測得到角度,卻測不到速度。觀測器負責把剩下的補齊。它在電腦裡執行一份機器人數學模型的小副本,盯著你手頭那幾個真實的測量值,不斷修正它對其餘一切的猜測,直到這台「想像出來的機器人」動得和真機器人一模一樣。
它的核心藏著一個巧妙的竅門:觀測器的內部模型會預測感測器「應該」讀出什麼數;接著它把這個預測和感測器「實際」讀出的數作比較,兩者之間的差距——也就是預測誤差——再被回饋回來,把猜測往正確的方向輕輕一推。如果模型以為手臂應該在某個位置,而真實感測器說它稍稍越過了那裡,觀測器就會同時修正它對位置和那個測不到的速度的估計。龍伯格觀測器以大衛·龍伯格命名,他在 20 世紀 60 年代提出了它,這是用來選取觀測器增益——也就是「這個修正該使多大勁」——的經典做法,目的是讓估計的誤差既能快速收斂到零,又不會衝過頭。
這對機器人為什麼重要呢?因為良好的控制通常取決於知道每個關節的速度,可是把速度測準卻很難——直接讀出的速度往往抖動得很厲害。與其給每個關節都買一個速度感測器,不如只測位置,再讓觀測器把速度平滑地估算出來。同樣的思路還能讓機器人在某個感測器失靈時繼續工作,讓無人機憑有限的讀數感知自己的傾斜,並讓控制器即使無法看到全部,也能像看得見一切那樣去動作。
一台兩輪平衡機器人用感測器測出自己的傾斜角度,卻沒有乾淨的辦法讀出它倒下的快慢;龍伯格觀測器僅憑這個角度就估算出倒下的速度,控制器再同時用上這兩者來保持直立。
只測一樣,估算其餘——然後就像看得見一切那樣去控制。
觀測器有一個前提:系統必須是「可觀測的」——也就是你確實測到的那幾個訊號裡,要含有足夠的資訊來重建那些隱藏的狀態;如果資訊不夠,再好的觀測器也無法把它們還原出來。