Nao機器人-CABSL


原文地址:http://ahoj.cc/2019/04/Nao%E6%9C%BA%E5%99%A8%E4%BA%BA-CABSL/


這裏主要總結下最近看的關於 CABSL 的代碼和資料。

行爲規範語言 CABSL (有限狀態機)控制機器人在比賽中的行爲。B-Human 系統中執行動作選擇的部分稱爲行爲控制。

😁 下面這個圖放大其實還清楚,在官方文檔的 6.1 節。

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 的代碼。

Soccer.h

HandlePenaltyState.h

HandlePenaltyState.h的最後,我們可以看到:

  /** Play soccer! */
  state(playing)
  {
    action
    {
      PlayingState();
    }
  }

跟進到 PlayingState.h 中:

PlayingState.h

好吧,終於進來了,如上面所說,最終調用到Striker()這個前鋒Demo:

Demo.h

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 跳轉。

state

initial_state

initial_state 是進 option 中的初始化狀態,進入 option 後自動執行 initial_state 中的行爲。

action_done

action_done 表示 state 中的 action 執行完畢在 transition 中判斷 action_done 可以在 state 動作執行完後跳到別的 state 中。

action_aborted

action_aborted 表示動作未執行完或者意外終止。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章