原文地址:http://ahoj.cc/2019/04/Nao%E6%9C%BA%E5%99%A8%E4%BA%BA-CABSL/
這裏主要總結下最近看的關於 CABSL 的代碼和資料。
行爲規範語言 CABSL (有限狀態機)控制機器人在比賽中的行爲。B-Human 系統中執行動作選擇的部分稱爲行爲控制。
😁 下面這個圖放大其實還清楚,在官方文檔的 6.1 節。
執行順序
機器人比賽執行的策略文件都在Modules/BehaviorControl/BehaviorControl/Options
下,Roles 中包含了Bhuman 源碼中自帶的一個Striker Demo。
Soccer.h 是 Bhuman 代碼執行的根目錄,Nao開機後就會執行 Soccer.h 中的代碼。
在註釋中觸發實際足球行爲的主要狀態,這裏調用的是Modules/BehaviorControl/BehaviorControl/Options/GameControl/HandlePenaltyState.h
,對應的狀態爲:按一次胸口 Nao 站起來(upright),兩次進入懲罰模式(penalized),三個非懲罰(notPenalized),開始執行 Striker 的代碼。
在HandlePenaltyState.h
的最後,我們可以看到:
/** Play soccer! */
state(playing)
{
action
{
PlayingState();
}
}
跟進到 PlayingState.h
中:
好吧,終於進來了,如上面所說,最終調用到Striker()
這個前鋒Demo:
CABSL
在 CABSL 中,使用了以下的基本元素:options(選項), states(狀態), transitions(轉換), actions(動作)。一個行爲由一組在選項圖中排列的選項組成。有一個單一的啓動選項,所有其他選項都被調用;這是選項圖的root。每個選項都是有限狀態機,它述了一個特定的行爲部分,比如機器人的技能或頭部運動,或者它結合了這樣的基本特徵。每個選項都以它的 intital_state 開始。在一個狀態中,可以執行的動作可以調用另一個選項,並執行任何 c++代碼,例如修改行爲控制供的 representations。此外,在每個狀態內都有一項關於轉換到另一個狀態(在選項內)的決定。像動作一樣,轉換能夠執行 c++代碼。【譯 6.1】
option
common_transition
option 可以理解爲機器娃的一套動作。
在每一個 option 中 common_transition
是**全局的(此option)**不停運行的邏輯判斷,優先級別最高,不論當前執行到哪一個 state,只要滿足了 common_transition
中的條件,就會跳出,goto 到指定的另一個 option。
如下圖中,當攝像頭不 ok 他就一直 sitDown。
state
state 是一種狀態,只能通過 goto 進入。state 中有普通的 transition(不是必須有) 和 action。
action 是執行的一些動作,可以是某些函數或者跳到別的地方。transition 是在這個 state 中一直在判斷,當滿足條件就 goto 跳轉。
initial_state
initial_state 是進 option 中的初始化狀態,進入 option 後自動執行 initial_state 中的行爲。
action_done
action_done 表示 state 中的 action 執行完畢在 transition 中判斷 action_done 可以在 state 動作執行完後跳到別的 state 中。
action_aborted
action_aborted 表示動作未執行完或者意外終止。