开始编写球队代码

装好了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. R中字符串操作

    简介 Stringr中包含3个主要的函数族 字符操作 空格处理 模式匹配 常用函数 在平常的数据分析工作中,经常要用到如下的函数 函数 操作 str_length() 获取字符串长度 str_sub( ...

  2. 612.1.003 ALGS4 | Stacks and Queues

    Algorithm | Coursera - by Robert Sedgewick Type the code one by one! 不要拜读--只写最有感触的!而不是仅仅做一个笔记摘录员,那样毫 ...

  3. sql 字符串函数、数学函数

    -- 字符函数:-- 查询结果姓名小写 select lower(ename), sal, job from emp;-- 查询结果姓名大写 select upper(ename), sal, job ...

  4. wdcpV3面板安装ssl证书 apache教程 子站SSL配置

    本帖最后由 q1082121 于 2016-11-24 12:31 编辑 方案二 apache1.把apache类型的ssl三个文件上传到:/www/wdlinux//www/wdlinux/http ...

  5. Eigen学习之简单线性方程与矩阵分解

    Eigen提供了解线性方程的计算方法,包括LU分解法,QR分解法,SVD(奇异值分解).特征值分解等.对于一般形式如下的线性系统: 解决上述方程的方式一般是将矩阵A进行分解,当然最基本的方法是高斯消元 ...

  6. PHP获取用户的真实IP地址

    本文出至:新太潮流网络博客 PHP获取用户的真实IP地址,非代理IP function getClientIP(){ global $ip; if(getenv("HTTP_CLIENT_I ...

  7. Entity Framework 更新模式之Attach与EntityState.Modified模式的区别

    数据库中有一个City表 初始时数据: 实体类与Fluent Api配置映射 public class City { public int Id { get; set; } public string ...

  8. (1)Set集合 (2)Map集合 (3)异常机制

    1.Set集合(重点)1.1 基本概念 java.util.Set接口是Collection接口的子接口,与List接口平级. 该接口中的元素没有先后放入次序,并且不允许重复. 该接口的主要实现类:H ...

  9. Gitflow 工作流简介

    Gitflow工作流简介 Gitflow工作流通过为功能开发.发布准备和项目维护分配独立的分支,让发布迭代过程更流畅. Gitflow工作流定义了一个围绕项目发布的严格分支模型,它会相对复杂一点,但提 ...

  10. Java虚拟机18:Java对象大小、对象内存布局及锁状态变化

    一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个 ...