概述
1.信息接口
对于机器人的代码编写而言,最重要的部分就是对环境和场上的具体情况有较为清楚的认知,一般这些数据都会整合到统一的接口中,这个接口就放在主目录下的worldmodel
文件中。其中,worldmodel.h
是声明关于一些场上信息,比如球的位置等等,而worldObject.h
则主要是用于提供队友的或对手的信息。
比如,场上的11个机器人都有自己的对应编号,当某个机器人想知道自己哪一号时,就可以通过以下语句进行调用:
worldModel->getUNum()
worldModel
是worldmodel.h
中的类WorldModel
的实例,具体在文件路径“behaviors/naobehavior.h“
中声明过,所以只要include这个路径就能直接使用worldModel
这个实例。
比较特殊的是WorldObject
这个结构体,它在worldObject.h
中被定义,在WorldModel
这个类中被实例化,所以要使用WorldObject
这个结构体来调用队友等的信息,需要用worldModel
这个实例。比如,我要调用队友(2号)的位置信息:
worldModel->getWorldObject(WO_TEAMMATE2)->pos
其中,WO_TEAMMATE2
是宏定义,代表着2号队友。
这几个文件中还有其它很多的信息接口,可以在查询后按照上述规则添加。
2.策略编写
整个策略的主要由三个文件构成,分别是naobehavior.h
和naobehavior.cc
,以及strategy.cc
,三个文件都在主目录下的behavior
文件夹中。下面分别介绍一下三个文件的主要内容:
naobehavior.h
:该文件中声明了主要的动作调用接口,比如走向某个位置,或者踢球等动作。所以只需要include该文件,就可以调用其命名空间内的动作。动作本身不一定需要在该文件中声明,但是该文件主要是将动作接口统一了起来,更加方便使用。naobehavior.cc
:头文件naobehavior.h
中声明的一些动作的集中实现。strategy.cc
:策略的执行文件,整个代码的执行逻辑都在该文件中进行编写。
我们可以看到,前两个文件主要是给我们提供了动作的使用接口,而最后一个文件才是编写代码需要重视的地方,接下来将重点解析一下strategy.cc
中的结构。
初始的strategy.cc
文件中有三个函数:
函数名 | 功能 |
---|---|
void NaoBehavior::beam | 初始化函数,用于定义载入机器人时的机器人初始位置 |
SkillType NaoBehavior::selectSkill | skill选择函数,该函数会在比赛过程中不断执行,同时根据判断条件去选择对应的动作执行。 |
SkillType NaoBehavior::demoKickingCircle | 自定义函数,在这里作为初始的演示函数,实现了功能:绕成一圈,离球最近的机器人去踢球 |
如果我们想添加我们自己的执行策略,就应该像SkillType NaoBehavior::demoKickingCircle
一样,调用信息接口和动作接口来编写函数。而对于一场比赛而言,不同的队员会执行不同的动作,这就需要在SkillType NaoBehavior::selectSkill
中预先写好固定的动作调用逻辑,比如根据队员号数进行分类等。
最后
以上就是自觉斑马为你收集整理的Robocup3D如何进行代码的编写1.信息接口2.策略编写的全部内容,希望文章能够帮你解决Robocup3D如何进行代码的编写1.信息接口2.策略编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复