Behavior Tree
- 又稱: BT, behavior tree architecture, behaviour tree
- 類別: Planning & manipulation › Task-level
- 標籤: behavior-tree, decision-making, software-architecture
階層式控制架構,把機器人決策組織成由動作、條件與複合節點構成的模組化樹狀結構。
定義
行為樹(BT)是一種階層式控制架構,把機器人的決策與動作執行組織成由模組化節點構成的樹狀結構。行為樹最初是為遊戲 AI 開發,用來控制非玩家角色;如今已成為取代有限狀態機、用來建構複雜機器人行為的主流方案,具有更好的模組化、可重用性與可讀性。
行為樹由四種節點組成。動作節點(葉節點)執行特定的機器人行為,例如移動到某個位置、抓取物體、說出一句話。條件節點(葉節點)檢查環境的狀態,例如門是否開著?電量是否高於 20%?序列節點(複合節點)由左到右執行子節點,只有在所有子節點都成功時才算成功,類似 AND 運算子。後備/選擇節點(複合節點)依序嘗試子節點,任何一個子節點成功就算成功,類似 OR 運算子。其他節點類型還包括並行節點(同時執行子節點),以及修改子節點行為的裝飾節點(重複、反轉、逾時)。
行為樹以固定頻率被「tick」(通常為 10–100 Hz)。每次 tick 時,執行從根節點往下流動,每個節點回傳三種狀態之一:成功(Success)、失敗(Failure)或執行中(Running,仍在進行)。這種以 tick 為基礎的評估讓行為樹天生具有反應性:如果條件在兩次 tick 之間改變,樹會立即把執行導向適當的分支。
行為樹解決了有限狀態機難以處理的關鍵問題。在有限狀態機中,新增狀態需要手動定義它與每個既有狀態之間的轉移,導致複雜度呈指數成長(即「狀態爆炸」問題)。在行為樹中,只要插入子樹就能加入新行為,不必修改既有節點。這種模組化代表一個「導航到某點」的子樹可以不經修改,直接重用於「取物」、「巡邏區域」與「返回充電站」等行為。
在 ROS 2 中,BehaviorTree.CPP 函式庫與 Nav2 導航堆疊都以行為樹作為主要控制架構。Nav2 的預設行為樹在單一、可讀的樹狀結構中協調路徑規劃、避障、恢復行為(原地旋轉、後退、等待)與目標監控,使用者可以替換或新增節點來自訂。
研究前沿包括從示範中學習行為樹(從觀察到的行為自動建構樹狀結構)、整合 LLM 以從自然語言任務描述生成行為樹結構,以及把行為樹與強化學習結合:由樹提供結構,強化學習則最佳化節點內的參數。
為何重要
行為樹已成為在量產系統中建構複雜機器人行為的標準架構。它在反應性(立即回應變化的條件)與審慎規劃(執行規劃好的動作序列)之間取得恰當的平衡。它的模組化讓機器人行為可以由團隊建構、測試與維護,每位開發者都能獨立處理各自的子樹。特別是在 ROS 2 生態系中,行為樹已深度內建:Nav2 導航堆疊、操作流程,以及許多商用機器人應用程式,都以 BehaviorTree.CPP 作為決策核心。
主要應用
- 自主導航:Nav2 使用行為樹為移動機器人協調規劃、路徑跟隨、避障與恢復行為
- 操作任務排序:把取放、組裝與分揀任務組織成可重用的行為樹模組
- 多機器人協調:每台機器人執行自己的行為樹,並與車隊層級的任務分配協調
- 服務型機器人:為必須妥善處理中斷的接待、導覽與配送機器人建構複雜的互動流程
- 工業自動化:以錯誤恢復與條件分支編排多步驟的製造流程
- 遊戲 AI 與模擬:在訓練環境與數位孿生中控制模擬代理與 NPC
實際應用
ROS 2 的 Nav2 導航堆疊以行為樹作為核心協調者。機器人收到導航目標時,預設的行為樹會依序 tick:計算全域路徑、以局部控制器跟隨路徑,並監控進度。如果控制器回報機器人卡住,後備分支會觸發恢復行為:先是受控的原地旋轉以清除局部代價地圖中的殘影,接著後退,再來是較長時間的等待。每個恢復行為本身都是可以依機器人自訂的子樹。使用者透過編輯定義樹狀結構的 XML 檔案來修改導航行為,例如把預設的路徑規劃器換成自訂的規劃器,或加入一個在偵測到附近有人時暫停導航的條件節點。
常見誤解
- 行為樹只是花俏的狀態機:關鍵差異在於模組化;行為樹透過插入子樹組合,不必修改既有節點,而有限狀態機則需要明確管理所有狀態之間的轉移
- 行為樹只能處理反應式行為:透過序列節點與執行中狀態,行為樹既能處理反應式回應,也能處理長時間的審慎動作,並不限於刺激-反應模式
- 撰寫行為樹需要寫程式:視覺化行為樹編輯器(BehaviorTree.CPP 的 Groot2)讓非程式設計師也能以拖放節點的方式建構與修改機器人行為
- 行為樹一定是確定性的:行為樹可以在節點內納入機率式選擇、以效用為基礎的評分與學習得到的參數,產生自適應、非確定性的行為
誰需要了解
- 建構自主導航或操作系統的 ROS 2 開發者
- 設計行為與決策層的機器人軟體架構師
- 結合結構化規劃與學習行為的 AI 研究人員
- 測試複雜機器人行為序列的 QA 工程師
- 開發 NPC AI 與模擬代理的遊戲開發者
相關技術
- BehaviorTree.CPP
- Nav2
- Groot2 視覺化編輯器
- py_trees
- 有限狀態機
- HTN 規劃
- SMACH
相關術語
相關專案
- BehaviorTree.CPP: C++ behavior tree library for robot task planning, powering Nav2 and ROS 2 systems
影片
- 5 minute Behavior Tree tutorial: Petter Ögren
- Behavior Trees in Robotics (Part 1 - Concept): Hummingbird