行為樹 vs 狀態機:機器人任務邏輯該用哪一種架構

2026-09-02

同樣是「決定機器人下一步該做什麼」,兩種思路差在哪

機器人執行任務時,需要一套邏輯決定「現在該做什麼、什麼條件下該切換到別的行為」,這類任務邏輯傳統上用有限狀態機(Finite State Machine)描述,但本站在 Nav2 行為樹 一文中介紹過的現代導航堆疊,普遍改用行為樹(Behavior Tree)架構——兩者要解決的問題相同,但組織邏輯的方式與可擴充性有本質差異。

狀態機:直觀但轉移關係會隨規模爆炸

有限狀態機的結構是一組狀態節點,加上狀態之間的轉移條件——機器人目前處在某個狀態,符合特定條件就轉移到另一個狀態。這個模型的優勢是直觀:對簡單任務(例如機械手臂的「待機、抓取、放置、返回」四狀態循環),狀態圖清楚呈現整個任務流程,一目了然。

問題在於規模化——當任務邏輯需要處理的異常情況與分支愈來愈多,狀態之間潛在的轉移路徑數量會快速增長:任何一個狀態理論上都可能因為某種異常條件轉移到任何另一個狀態,狀態數量增加時,需要考慮的轉移組合會以接近平方的速度成長,整張狀態圖很快就變得難以完整檢視與維護,這也是複雜機器人系統(尤其是需要處理大量異常與恢復邏輯的自主導航)逐漸捨棄純狀態機架構的核心原因。

行為樹:把邏輯組織成可組合的樹狀結構

行為樹把任務邏輯組織成樹狀階層,樹的葉節點是具體的行為(移動到某個點、清除代價地圖、發出警示音),內部節點則是控制邏輯的組合子——最常見的是 Sequence(依序執行子節點,任何一個失敗就整體失敗)與 Fallback(依序嘗試子節點,任何一個成功就整體成功)。複雜行為透過組合這些簡單節點逐層搭建而成,新增一個行為只需要在樹的適當位置插入節點,不需要重新檢視所有既有節點之間的關係,這種局部可修改性,正是行為樹在任務邏輯複雜度隨系統迭代持續增長時,維護成本明顯低於狀態機的關鍵。

Nav2 的行為樹導航恢復邏輯是一個典型案例——當機器人在導航過程中卡住,系統依序嘗試多種恢復策略(清除局部代價地圖、原地旋轉重新掃描環境、退避後重新規劃路徑),這種「依序嘗試多種備援方案,任何一種成功就停止」的邏輯,正好對應 Fallback 節點的語意,且未來要新增第四種、第五種恢復策略,只需要在樹上多掛一個節點,不需要重新設計整套狀態轉移關係。

選擇的核心:任務邏輯會不會隨時間持續變複雜

行為樹相對狀態機的優勢,本質上是一種為「長期可擴充性」付出「初期學習與框架整合成本」的取捨——如果任務邏輯簡單、且預期不會頻繁擴充新行為,狀態機的直觀性仍然是合理選擇;但只要任務邏輯預期會隨系統迭代持續增加新的異常處理與備援策略(多數走向商用部署的自主機器人系統都是如此),行為樹的模組化架構帶來的長期維護效益,通常能抵銷初期導入的學習成本,這也是為什麼行為樹已經成為現代機器人導航與任務規劃框架的主流選擇。

常見問題

faq_01.log
狀態機明明比較直觀好懂,為什麼 Nav2 這類現代導航系統要改用行為樹,不會反而增加理解難度嗎?
對於狀態數量少(幾個到十幾個)的簡單任務,狀態機確實比行為樹更直觀——狀態圖一目了然,狀態之間的轉移條件清楚標示在連接線上。但當任務邏輯變複雜、狀態數量成長到數十甚至上百個時,狀態機的轉移數量會以接近平方的速度增長(因為任意兩個狀態之間理論上都可能需要一條轉移路徑),整張狀態圖很快就會變成難以閱讀維護的「義大利麵狀態圖」。行為樹把邏輯組織成樹狀的階層結構,複雜行為是由簡單行為組合而成,新增一個行為只需要在樹的適當位置插入一個新節點,不需要重新檢視所有既有狀態之間的轉移關係,這種模組化的可擴充性,是行為樹在複雜任務規模下比狀態機更好維護的核心原因,短期學習曲線的落差,會被長期維護成本的差異抵銷。
faq_02.log
行為樹裡的「Fallback」節點跟程式裡常見的 if-else 邏輯是同一回事嗎?
概念上相通但語意更明確。Fallback 節點(有時稱為 Selector)會依序嘗試執行底下的每個子節點,只要有一個子節點回傳成功就立刻停止並回報成功,全部子節點都失敗才回報整體失敗——這確實對應 if-else 鏈「依序嘗試多個條件,第一個成立的就採用」的邏輯。但行為樹的優勢在於這個邏輯是宣告式的樹狀結構,而不是命令式程式碼裡層層嵌套的 if-else,這讓非工程背景的機器人系統設計者(例如場域整合工程師)也能透過視覺化編輯工具直接理解與調整任務邏輯,不需要閱讀程式碼,這也是為什麼行為樹在機器人與遊戲 AI 領域都被廣泛採用——它同時服務了程式執行效率與人類可讀性兩個需求。
faq_03.log
什麼情況下狀態機仍然是更好的選擇,不需要為了追求新技術硬套行為樹?
如果任務邏輯本身狀態數量少、轉移關係固定且不太可能頻繁擴充(例如一個只有「待機、執行、暫停、錯誤」四個狀態的簡單機構控制邏輯),狀態機的直觀性與較低的實作複雜度仍然是更務實的選擇,行為樹框架本身的學習與整合成本,在這種簡單場景下可能反而不划算。行為樹真正的價值要在任務邏輯複雜、且預期會隨系統演進持續擴充新行為的場景才能發揮,例如 Nav2 的導航恢復行為(遇到障礙物卡住時依序嘗試清除代價地圖、原地旋轉、退避重新規劃等多種恢復策略),這類會隨系統迭代不斷新增新恢復策略的場景,正是行為樹模組化擴充優勢真正發揮價值的地方。

相關術語

訂閱 RoboTech Lab 電子報

每週一封,整理新的教學、論文導讀與機器人業界動態。隨時可以取消訂閱。