【Nao机器人】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的最后,我们可以看到:

1
2
3
4
5
6
7
8
/** 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 表示动作未执行完或者意外终止。