行為樹
行為樹是一張整潔的、會分岔的圖,機器人從上往下讀它,來逐時逐刻地決定下一步做什麼。把它想像成一棵倒過來的樹形流程圖:最底下是一個個具體的小動作和小檢查——「走到門口」「門開著嗎?」「把箱子拿起來」——而它們上方是一些簡單的樞紐節點,負責決定去嘗試哪一個、按什麼順序來。每一次時鐘跳動,機器人都從頂端出發、一路往下走,每個節點都會回報幾種簡單答案之一:成功、失敗,或仍在進行。這些答案再一層層往上傳,左右著下一步的選擇。
巧妙之處其實只在兩種樞紐。順序節點的意思是「按次序做這些,一旦有一個失敗就停下」——適合那些必須全部發生的步驟,比如先張開夾爪、再下移、再合攏夾爪。回退節點(或稱選擇節點)的意思是「一個一個地試,直到有一個成功為止」——適合帶有備選方案的計畫,比如先試前門,不行就試側門,再不行就向人求助。把順序和回退層層嵌套,你就能用這寥寥幾種簡單部件,搭出豐富而有層次的行為,而設計者讀起整棵樹來,幾乎就像在讀一句話。
機器人開發者偏愛行為樹,是因為它模組化、易於改動。由於每條分支都自成一體,你可以加上一項新技能、調換優先次序,或者在靠近頂端的位置嫁接一條緊急的「電量低就去充電」分支,而不必把其餘部分全都拆開重接——樹天生會先檢查高優先級的分支。正因如此,行為樹在遊戲角色和許多機器人身上,已基本取代了更老的有限狀態機風格:狀態機會把每一種情形都直接連到其他每一種情形,越長越亂成一團;而行為樹則讓邏輯保持井然有序、便於複用,哪怕機器人的本領越來越多也是如此。
一台巡邏機器人的樹,先檢查頂部那條「電量低就回基座」的回退分支;只有在電量沒問題時,它才會執行「前往下一個路點、掃描房間、記錄任何新情況」這一順序。
高優先級的安全分支放在靠近頂端的位置,因此每一次跳動都會最先被檢查。
節點回傳的信號通常是:成功、失敗、進行中;順序節點與回退(選擇)節點,是組合子節點的兩種基本方式。