跳到正文

Wiki

有限狀態機FSM與行為樹BT

約 3 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

1.用 FSM 和 BT 組織機器人任務

機器人導航、等待、充電、取消與異常恢復都需要明確的執行順序。FSM 和 BT 都能組織任務;選擇時先看任務關係,再看當前工程採用的庫和介面。

組織方式 先回答什麼 常見表達
FSM,有限狀態機 當前在哪個階段,什麼事件使它進入下一階段 待機 → 導航 → 等待 → 完成
BT,行為樹 當前條件允許執行哪些操作,先選哪個方案,怎樣組合結果 條件檢查 → 導航;失敗後選擇備用方案

FSM 也能組織複雜任務,BT 也需要維護持續動作的狀態。決定可維護性的因素包括任務分解、事件處理、取消方式與資料邊界,不是換一種圖形就能自動解決。

2.按當前專案選擇學習路線

你的情況 建議順序
首次學習機器人任務決策 有限狀態機 → v4 基本概念 → v4 程式設計實踐 → Groot2
專案正在使用 BehaviorTree.CPP 3.x v3.8.7 教程 → Groot1;需要升級時再看遷移篇
已學完本組 v3 教程 版本區別與遷移 → v4 指令碼和資料更新 → Groot2;按需回看 v4 基礎實踐
準備接入已有 ROS 2/Nav2 工程 先核對現有包、外掛及其依賴版本,再決定使用哪條教程路線

也就是優先學習bt4而不是bt3

v3、v4 是兩套庫版本,Groot1、Groot2 是配套編輯與觀察工具。ROS 2 發行版、BT 庫版本和 Groot 版本需要分別核對。獨立 v4 程式執行成功,不代表現有 Nav2 和自定義外掛已經升級。

3.把能力實現與任務組織分開

任务决策层:选择目标、组织步骤、处理失败与取消
    ├── 可以采用 FSM
    └── 可以采用 BT
            ↓ 调用
能力模块:导航、定位、电量、传感器与执行器
            ↓
底层模块内部还可以使用自己的 FSM

例如,上層 BT 選擇導航任務,導航節點內部用 FSM 管理“等待接受 → 正在執行 → 請求取消 → 結束”。這裡描述的是軟體職責,不表示 FSM 是行為樹中一種新的節點類別。

一條任務結束時,要區分“動作已經成功”“任務失敗”“執行中被取消”。取消實際導航、清理臨時資源的職責必須落實到具體模組;僅改變樹節點狀態不會讓外部裝置自動停止。

4.本組實踐的共同約定

使用通用移動機器人示例,以計數和資料更新模擬導航、充電及任務結果。工程沿用 C++20、現有 CMake 模板與 VSCode CMake Tools。每個完整程式說明檔案位置、API 引數和返回值,並給出執行及斷點觀察步驟。

按“當前程式能夠構建執行 → 對照執行過程 → 增加下一項功能”的方式推進。文中截圖預留由學習時補齊;真實 ROS 2 Action、導航反饋和實車接入屬於後續整合工作。