开始编写球队代码

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

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

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

void NaoBehavior::beam()

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

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

SkillType NaoBehavior::PlayOnSkill()

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

其他阶段函数

比赛的正常流程下有许多比赛状态,大概流程如下:

比赛状态 函数
上场 beam()
开球 MyKickOff()OppKickOff()
通常 PlayOnSkill()
罚球 KickIn、CornerKick、GaolKick、FreeKick

所有策略函数注释如下

/*  正常比赛  */
void beam(); //球队上场
SkillType MyKickOff(); //我方开球
SkillType OppKickOff(); //对方开球
SkillType PlayOnSkill(); //常规策略
/* 罚球函数 */
SkillType MyKickIn(); //我方界外球
SkillType OppKickIn(); //对方界外球
SkillType MyCornerKick(); //我方角球
SkillType OppCornerKick(); //对方角球
SkillType MyGaolKick(); //我方球门球
SkillType OppGaolKick(); //对方球门球
SkillType MyFreeKick(); //我方任意球
SkillType OppFreeKick(); //对方任意球

注意在下图的代码中有一段selectSkill()函数,是这段函数将比赛阶段与对应的策略函数对应。例如,worldModel->getPlayMode()== PM_PLAY_ON时,返回return PlayOnSkill()函数。

比赛开始,先是阶段执行beam(),然后开球极阶段执行MyKickOff()或者OppKickOff(),球离开中圈后进入策略阶段执行playOnSkill()。当满足界外球、角球、球门球的情况下,执行相应函数。(对这三种情况不了解的可自行百度。)

修复make异常

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

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

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

那就必须改目录!

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

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

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

最后成功运行如下图:



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

如何编写编译Robocup3D代码的更多相关文章

  1. C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序

    本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序. □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass. ...

  2. (转载)JAVA动态编译--字节代码的操纵

    在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...

  3. 编写高质量代码改善C#程序的157个建议[1-3]

    原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...

  4. 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)

    编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...

  5. 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)

    编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...

  6. 理解Babel是如何编译JS代码的及理解抽象语法树(AST)

    Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是?   很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器都 ...

  7. C# 《编写高质量代码改善建议》整理&笔记 --(一)基本语言篇

     题记:这是自己的观后感,工作两年了,本来打算好好学习设计模式,或者作为客户端深入了解GPU编程的,但是突然发现还有这么一本书. <编写高质量代码改善建议>,感觉这正是自己需要的. 我是做 ...

  8. 编写高质量代码:改善Java程序的151个建议 --[106~117]

    编写高质量代码:改善Java程序的151个建议 --[106~117] 动态代理可以使代理模式更加灵活 interface Subject { // 定义一个方法 public void reques ...

  9. 编写高质量代码:改善Java程序的151个建议 --[78~92]

    编写高质量代码:改善Java程序的151个建议 --[78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版 ...

随机推荐

  1. html History API

    History api 兼容性支持一下浏览器 为什么要使用History API 在AJAX给我们带来提高用户体验.减少HTTP连接数等好处的同时,也渐渐显露出一些不足之处,比如: 1.页面全是用aj ...

  2. PAT乙级01

    1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反 ...

  3. 大O表示法

    概念 大O表示法是和数据项的个数相关联的粗略度量算法时间复杂度的快捷方法. 常数一个无序可重复数组插入一个数据项的时间T是常数K,常数K表示一次插入所花费的时间,包含cpu.编译器等工作时间.可表示为 ...

  4. 微软MVP社区秋日巡讲 —— 北京Windows Phone应用开发训练营

    微软MVP社区秋日巡讲 —— 北京Windows  Phone应用开发训练营 活动说明和报名地址www.aka.ms\mvpbeijing 欢迎北京的朋友参与在今年10月举办的Windows Phon ...

  5. 10 tensorflow在循环体中用tf.print输出节点内容

    代码 i=tf.constant(0,dtype=tf.int32) batch_len=tf.constant(10,dtype=tf.int32) loop_cond = lambda a,b: ...

  6. jquery validation表单验证插件2。

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. MySQL无法启动、服务没有报告任何错误&初次登陆错误的解决

    先以管理员身份运行cmd(右键单击左下角win菜单) 输入mysqld -install,net start mysql,下图是返回结果.报错情况以及修正之后的全过程 启动失败之后输入mysqld - ...

  8. leveldb源码分析--插入删除流程

    由于网络上对leveldb的分析文章都比较丰富,一些基础概念和模型都介绍得比较多,所以本人就不再对这些概念以专门的篇幅进行介绍,本文主要以代码流程注释的方式. 首先我们从db的插入和删除开始以对整个体 ...

  9. nodejs+redis使用

    安装 linux安装及配置之前写过了http://www.cnblogs.com/zycbloger/p/6226682.html windows安装 下载地址:https://github.com/ ...

  10. url用法

    url中的name用法: 0.定义主rul.py urlpatterns = [ url(r'^sinfors/', include('sinfors.urls', namespace="s ...