欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何编写编译Robocup3D代码

程序员文章站 2022-04-28 15:35:47
[TOC] 开始编写球队代码 装好了Robocup 3D比赛平台后,就要开始着手编写球队策略代码了。 我们使用的是utaustinvilla的Robocup 3D球队代码,球队的体态运动等都已经是别人写好的,我们暂时不要研究。 在下图中,behaviors文件夹下的strategy.cc文件,就是我 ......

开始编写球队代码

装好了robocup 3d比赛平台后,就要开始着手编写球队策略代码了。

我们使用的是utaustinvilla的robocup 3d球队代码,球队的体态运动等都已经是别人写好的,我们暂时不要研究。

在下图中,behaviors文件夹下的strategy.cc文件,就是我们需要编写策略代码的部分。

如何编写编译Robocup3D代码

void naobehavior::beam()

球队上场阶段的函数,这一部分代码来确定球队如何上场,最开始的上场的站位在这里编写。通过if语句判断球员编号,根据球员编号返回(x坐标,y坐标,面向角度)。

这里正好提一下,球场是一个30*20的绿茵场,以中心为坐标原点。满足x∈[-15,15],y∈[-10,10]。

skilltype naobehavior::playonskill()

球队上场后,按下k键开球。之后球队就会开始执行这一段函数,这一部分函数是我们目前主要要编写部分。你们目前看到的这部一部分函数是学长上次比赛写的,其中部分代码有英文注释。之后我会另写一篇blog,对这一部分代码详细注释。

罚球函数

罚球函数,是当比赛处于角球、门球、任意球等罚球阶段,球队执行的策略函数。

skilltype mykickoff();      //
skilltype oppkickoff();     //
skilltype mykickin();       //
skilltype oppkickin();      //
skilltype mycornerkick();   //我方角球
skilltype oppcornerkick();  //对方角球
skilltype mygaolkick();     //我方球门球
skilltype oppgaolkick();    //对方球门球
skilltype myfreekick();     //我方任意球
skilltype oppfreekick();    //对方任意球

注意在下图的代码中有一段selectskill()函数,是这段函数将比赛阶段与对应的策略函数对应。例如,worldmodel->getplaymode()== pm_play_on时,返回return playonskill()函数。

如何编写编译Robocup3D代码

修复make异常

这里要注意的是,我们从学长那里拿到代码是不能直接make的。

我们打开终端,cd到球队代码目录下(utaustinvilla3d-master),输入make指令进行编译。第一次你可能会看到如下报错结果:如何编写编译Robocup3D代码

因为这是从学长电脑拷贝给你们的,你们这个文件的目录和学长文件目录可能不一样。就算同样是放在桌面,如果是中文系统就是/home/用户名/桌面,英文就是/home/用户名/desktop,而且我们用户名肯定也不一样。所以目录基本上是一定不一样。

那就必须改目录!

如何编写编译Robocup3D代码

cmakefiles下面有很多文件里都存储有项目的目录,为了能运行,都要修改。主要是要修改cmakefiles/newforces.dir/下面的文件,然后退回到cmakefile一级,还有一两个文件需要修改。

如何编写编译Robocup3D代码

修改时利用sublime编辑器,上面的find-replace进行全部替换。

如何编写编译Robocup3D代码

这张图中,我将所有的 桌面 一键替换成了 desktop。那么你的用户名也和我不一样,那你们就应该是 shiraka/桌面替换成你的用户名/desktop。确保替换后,和你的目录一致就行了。

最后成功运行如下图:
如何编写编译Robocup3D代码
如何编写编译Robocup3D代码

如果不一样,依旧报错,说明还是有地方没改。再仔细检查一下cmakefile下有没有漏网之鱼。