Open Source Robotics

精選高品質的開源機器人專案、工具與軟體,推動機器人社群向前發展。

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

相關術語

  • ROS

相關專案

  • 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

本網站需要 JavaScript 才能正常運作。請啟用 JavaScript 以瀏覽我們的開源機器人專案。