Planner 跟 Controller 之間那條縫,才是 humanoid agent 真正的地獄
mode: internalize
最近一直在想一個問題:為什麼 humanoid robot 的上層規劃越來越強,但真正能在現實世界「好好動」的還是少數?
我覺得問題不在 LLM 不夠聰明,也不在 RL 訓練不夠多。問題在中間那一層,也就是 planner 發出指令之後,controller 到底能不能接得住。
這陣子讀了些 whole-body control 的論文,越來越確定這個感覺。高層 agent 可以用 GPT-4 做 task planning,低層控制器也可以用 RL 訓到很強,但中間那個 command space,就是 planner 用什麼語言跟 controller 說話,這件事大家好像都沒認真處理。
目前大多數做法是這樣的:planner 輸出目標位置、速度向量,或者直接輸出 joint torque。前者太粗略,後者又太底層,很難讓 planner 直接掌控全身協調動作,尤其是要同時走路又拿東西的時候。
真正難的是:三件事要同時發生
我一直覺得 whole-body control 最難的地方,是機器人要做的事情通常是「複合式」的。走路、平衡、拿東西這三件事在人類身上是同時發生的,但在 robot 系統裡,通常是三個分開訓練的 specialist controller 在負責。如果你想讓 planner 輸出「去桌上拿杯子」,它需要協調所有三個控制器,還要在不小心踩到什麼的時候自動 recovery,這個銜接問題沒解決,上層規劃再強也沒用。
一個直觀的解法是把三個 controller 合一,但這在實務上非常難訓練,因為你同時要優化的目標太多,很容易互相干擾。
蒸餾是個有趣的思路
我後來想到一個方向:如果你先分開訓練三個 specialist,讓每個人都達到自己領域的最佳狀態,再用 knowledge distillation 把這三個「老師」壓進一個「學生」 controller,會不會就可以在保留各自強項的同時,還讓 planner 可以用一個統一的介面來溝通?
關鍵是蒸餾的方式。不是直接用 behavior cloning 把三個老師的輸出平均,而是根據當前的狀態和任務,讓 gating mechanism 動態決定要 attend 哪個老師的知識。這樣學生 controller 在平地直走的時候偏向 locomotion specialist,遇到障礙的時候自動切到 fall recovery,同時拿東西的時候 manipulation 的 expertise 又出來。
這類設計從 mixture-of-experts 那邊借了不少概念,但拿來做 multi-specialist distillation 感覺特別合適,因為你的「專家」是真的有明確分工的,不是 soft 的。
task-space 介面才是真正解鎖的關鍵
不過 controller 合而為一之後,還有另一個問題:planner 要用什麼格式下指令?
如果 planner 還是要輸出 joint torque 或者關節角度,你用 LLM 做的 high-level planning 就沒有任何意義,因為 LLM 根本不知道怎麼輸出合理的關節控制序列。
我認為真正有意義的突破,是把 command space 設計成 task-space,也就是 planner 可以用接近自然語言或者 end-effector 位置的方式下指令,比如說「把右手移到桌面左邊 30cm,高度維持在腰部」,然後 controller 自己處理底層的 whole-body IK 和動態平衡。
這樣一來,上層 agent planner 不需要知道任何關於 joint space 的東西,就可以真的驅動一台實體 humanoid。更重要的是:這讓你可以直接把現有的 LLM-based planner 接上去,不用特別針對這台機器人做 fine-tuning。
這對我理解 agent + robotics 銜接的意義
在 NLP 的角度來看,這件事有點像是在解一個 interface alignment 的問題。LLM 輸出的是自然語言或 high-level structure,而機器人需要的是精確的物理控制訊號,這兩者之間的
gap 一直都存在,只是大家比較習慣用 tool use、function calling 這類方式來解決 digital 世界的版本。
但 physical world 的版本不一樣,因為錯誤的代價是機器人摔倒,或者東西被打翻。你沒辦法靠 retry 解決。所以 command space 的設計必須既讓 planner 容易表達意圖,又讓 controller 有足夠資訊做安全可靠的動作。
我覺得這個思路的重要性,不只在於讓 humanoid 可以更容易被 LLM 驅動。更深層的意義是:它讓 agent 跟 robot 的協作變得更模組化。你換一個 planner,controller 不用重新訓練;你換一台機器人,只要 controller 介面一致,planner 也可以直接復用。
未解的問題
當然這個方向還有很多沒解決的。multi-teacher distillation 的訓練穩定性是一個問題,特別是在 teacher 之間的 action space 本來就不一致的時候。task-space 指令的語意也很難完全標準化,畢竟「抓住那個杯子」在不同高度、不同重量的杯子面前,對 controller 的需求是不一樣的。
還有 generalization 的問題。在 sim2real transfer 裡,task-space 介面引入的 abstraction 層是否會讓 domain gap 更大還是更小,我目前還沒有直覺。
但至少方向是對的。解決 planner 跟 controller 之間的介面問題,遠比繼續疊 LLM 的 scale 更能推動 humanoid agent 真正落地。這是我讀這類論文之後最大的感受。
作者:陳思維