这里主要总结下最近看的关于 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
的最后,我们可以看到:
1 | /** Play soccer! */ |
跟进到 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 表示动作未执行完或者意外终止。