行為樹 vs 狀態機:機器人任務邏輯該用哪一種架構
2026-09-02
同樣是「決定機器人下一步該做什麼」,兩種思路差在哪
機器人執行任務時,需要一套邏輯決定「現在該做什麼、什麼條件下該切換到別的行為」,這類任務邏輯傳統上用有限狀態機(Finite State Machine)描述,但本站在 Nav2 行為樹 一文中介紹過的現代導航堆疊,普遍改用行為樹(Behavior Tree)架構——兩者要解決的問題相同,但組織邏輯的方式與可擴充性有本質差異。
狀態機:直觀但轉移關係會隨規模爆炸
有限狀態機的結構是一組狀態節點,加上狀態之間的轉移條件——機器人目前處在某個狀態,符合特定條件就轉移到另一個狀態。這個模型的優勢是直觀:對簡單任務(例如機械手臂的「待機、抓取、放置、返回」四狀態循環),狀態圖清楚呈現整個任務流程,一目了然。
問題在於規模化——當任務邏輯需要處理的異常情況與分支愈來愈多,狀態之間潛在的轉移路徑數量會快速增長:任何一個狀態理論上都可能因為某種異常條件轉移到任何另一個狀態,狀態數量增加時,需要考慮的轉移組合會以接近平方的速度成長,整張狀態圖很快就變得難以完整檢視與維護,這也是複雜機器人系統(尤其是需要處理大量異常與恢復邏輯的自主導航)逐漸捨棄純狀態機架構的核心原因。
行為樹:把邏輯組織成可組合的樹狀結構
行為樹把任務邏輯組織成樹狀階層,樹的葉節點是具體的行為(移動到某個點、清除代價地圖、發出警示音),內部節點則是控制邏輯的組合子——最常見的是 Sequence(依序執行子節點,任何一個失敗就整體失敗)與 Fallback(依序嘗試子節點,任何一個成功就整體成功)。複雜行為透過組合這些簡單節點逐層搭建而成,新增一個行為只需要在樹的適當位置插入節點,不需要重新檢視所有既有節點之間的關係,這種局部可修改性,正是行為樹在任務邏輯複雜度隨系統迭代持續增長時,維護成本明顯低於狀態機的關鍵。
Nav2 的行為樹導航恢復邏輯是一個典型案例——當機器人在導航過程中卡住,系統依序嘗試多種恢復策略(清除局部代價地圖、原地旋轉重新掃描環境、退避後重新規劃路徑),這種「依序嘗試多種備援方案,任何一種成功就停止」的邏輯,正好對應 Fallback 節點的語意,且未來要新增第四種、第五種恢復策略,只需要在樹上多掛一個節點,不需要重新設計整套狀態轉移關係。
選擇的核心:任務邏輯會不會隨時間持續變複雜
行為樹相對狀態機的優勢,本質上是一種為「長期可擴充性」付出「初期學習與框架整合成本」的取捨——如果任務邏輯簡單、且預期不會頻繁擴充新行為,狀態機的直觀性仍然是合理選擇;但只要任務邏輯預期會隨系統迭代持續增加新的異常處理與備援策略(多數走向商用部署的自主機器人系統都是如此),行為樹的模組化架構帶來的長期維護效益,通常能抵銷初期導入的學習成本,這也是為什麼行為樹已經成為現代機器人導航與任務規劃框架的主流選擇。
- behavior-tree
- state-machine
- task-planning
- nav2
- robot-architecture