【Nao机器人】Modules/BehaviorControl/BehaviorControl

记录下。。。

pwd

1
BHumanCodeRelease-coderelease2017/Src/Modules/BehaviorControl/BehaviorControl/

tree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
.
├── BehaviorControl.cpp
├── BehaviorControl.h
├── Options
│   ├── DemoOptions
│   │   ├── Demo.h
│   │   └── Waving.h
│   ├── GameControl
│   │   ├── HandleGameState.h
│   │   ├── HandlePenaltyState.h
│   │   ├── PlayingState.h
│   │   └── ReadyState.h
│   ├── HeadControl
│   │   ├── HeadControl.h
│   │   └── LookForward.h
│   ├── Output
│   │   ├── Activity.h
│   │   ├── Annotation.h
│   │   ├── HeadMotionRequest
│   │   │   └── SetHeadPanTilt.h
│   │   ├── MotionRequest
│   │   │   ├── GetUpEngine.h
│   │   │   ├── InWalkKick.h
│   │   │   ├── SpecialAction.h
│   │   │   ├── Stand.h
│   │   │   ├── WalkAtAbsoluteSpeed.h
│   │   │   ├── WalkAtRelativeSpeed.h
│   │   │   └── WalkToTarget.h
│   │   └── PlaySound.h
│   ├── Roles
│   │   └── Striker.h
│   ├── Skills
│   │   └── GetUp.h
│   ├── Soccer.h
│   └── Tools
│   └── ButtonPressedAndReleased.h
└── Options.h

BehaviorControl.h

基于 c 语言的状态机行为控制模块的声明

从源码中可以看到,引入了 Representations 中的一些模块的头文件。

BehaviorControl.cpp

基于 c 语言的状态机行为控制模块的实现

Options.h

所有属于当前行为的 option 文件都必须包含在这个文件中。

在 Options 文件夹中写的东西需要在此头文件中包含。


Options

tree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
.
├── DemoOptions
│   ├── Demo.h
│   └── Waving.h
├── GameControl
│   ├── HandleGameState.h
│   ├── HandlePenaltyState.h
│   ├── PlayingState.h
│   └── ReadyState.h
├── HeadControl
│   ├── HeadControl.h
│   └── LookForward.h
├── Output
│   ├── Activity.h
│   ├── Annotation.h
│   ├── HeadMotionRequest
│   │   └── SetHeadPanTilt.h
│   ├── MotionRequest
│   │   ├── GetUpEngine.h
│   │   ├── InWalkKick.h
│   │   ├── SpecialAction.h
│   │   ├── Stand.h
│   │   ├── WalkAtAbsoluteSpeed.h
│   │   ├── WalkAtRelativeSpeed.h
│   │   └── WalkToTarget.h
│   └── PlaySound.h
├── Roles
│   └── Striker.h
├── Skills
│   └── GetUp.h
├── Soccer.h
└── Tools
└── ButtonPressedAndReleased.h

Soccer.h

root option,在机器人真正开始游戏之前控制行为。

主函数?所有的操作从这里开始执行。

第一次按下胸口按钮:站起来。
第二次:惩罚状态。
第三次:非惩罚状态,开始踢球。
连续按 3 次,机器人关闭所有关节,蹲下。


DemoOptions

提供了两个 Demo,调用 Striker() 踢球。

tree

1
2
3
.
├── Demo.h
└── Waving.h

GameControl

tree

1
2
3
4
5
.
├── HandleGameState.h
├── HandlePenaltyState.h
├── PlayingState.h
└── ReadyState.h

HandleGameState.h

触发不同游戏状态的选项。
该选项还会调用跌倒后的getup行为,这在大多数游戏状态中都是需要的。

从 Soccer.h 进入这里后,执行对应的 state。

HandlePenaltyState.h

处理惩罚状态(以及离开惩罚状态后要执行的操作)。
此选项比主游戏状态处理高一级,因为在大多数游戏状态中可能会出现惩罚。
默认情况下,机器人不受惩罚,并根据当前比赛状态踢足球。要想手动惩罚机器人,必须按下和松开胸前的按钮。

PlayingState.h

在这里调用了 Demo()。

ReadyState.h

机器人准备就绪的状态,头 lookforward,并且站立。


HeadControl

头部控制。

tree

1
2
3
.
├── HeadControl.h
└── LookForward.h

HeadControl.h

由 option HeadControl 执行的 head 控制模式。

默认只有 none、off、lookforward 三种头部状态。

LookForward.h

头部 lookforward,调用 SetHeadPanTilt 模块。


Output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
├── Activity.h
├── Annotation.h
├── HeadMotionRequest
│   └── SetHeadPanTilt.h
├── MotionRequest
│   ├── GetUpEngine.h
│   ├── InWalkKick.h
│   ├── SpecialAction.h
│   ├── Stand.h
│   ├── WalkAtAbsoluteSpeed.h
│   ├── WalkAtRelativeSpeed.h
│   └── WalkToTarget.h
└── PlaySound.h

Activity.h

通过这个开设置机器人的当前状态。

传入一个参数,调用 BehaviorStatus 模块。

Annotation.h

通过这个来注释,需要一个 string 类型的参数。

PlaySound.h

如果在前一个循环中未调用此选项,则播放声音。

播放音频,传入一个 string 类型的参数(音频名)。

HeadMotionRequest

SetHeadPanTilt.h

用这个模块来控制机器人的头部。

MotionRequest

1
2
3
4
5
6
7
8
.
├── GetUpEngine.h
├── InWalkKick.h
├── SpecialAction.h
├── Stand.h
├── WalkAtAbsoluteSpeed.h
├── WalkAtRelativeSpeed.h
└── WalkToTarget.h
GetUpEngine.h

一个简单的站起来的引擎。

InWalkKick.h

边走边踢。

SpecialAction.h

Sets all members of the MotionRequest representation for executing a SpecialAction.

Stand.h

Sets all members of the MotionRequest representation for simple standing.

WalkAtAbsoluteSpeed.h

Sets all members of the MotionRequest representation for executing an absoluteSpeedMode-WalkRequest.

Walking speeds, in mm/s and radian/s.
e.g. Pose2f(0.f, 50.f, 0.f) lets move the robot forward at 50 mm/s
Pose2f(0.f, 50.f, 50.f) lets move the robot diagonal
Pose2f(0.2f, 100.f, 0.f) lets move the robot in a circle

传入一个参数(const Pose2f&) speed

WalkAtRelativeSpeed.h

Sets all members of the MotionRequest representation for executing a relativeSpeedMode-WalkRequest.

@param speed Walking speeds, in the range [-1.f .. 1.f].
e.g. Pose2f(0.f, 1.f, 0.f) lets move the robot forward at full speed
Pose2f(0.f, 0.5f, 0.5f) lets move the robot diagonal at half of the possible speed
Pose2f(0.5f, 1.f, 0.f) lets move the robot in a circle

WalkToTarget.h

走向目标。

传入两个参数,一个速度,一个目标的位置。
(const Pose2f&) speed, (const Pose2f&) target


Roles

放角色文件的地方。

Striker.h

默认的前锋 Demo。


Skills

机器人的一些技能,比如站起来。

GetUp.h

调用 GetUpEngine() 模块。


Tools

工具~~~。

ButtonPressedAndReleased.h

按钮按下和释放。

该选项观察某个按钮的状态,如果按下并释放该按钮,则报告成功。
如果指定超时,如果状态更改耗时太长,也可以中止该 option。


OK,到这里这块就完啦。