如何编写编译Robocup3D代码
开始编写球队代码
装好了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代码的更多相关文章
- C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序
本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序. □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass. ...
- (转载)JAVA动态编译--字节代码的操纵
在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...
- 编写高质量代码改善C#程序的157个建议[1-3]
原文:编写高质量代码改善C#程序的157个建议[1-3] 前言 本文主要来学习记录前三个建议. 建议1.正确操作字符串 建议2.使用默认转型方法 建议3.区别对待强制转换与as和is 其中有很多需要理 ...
- 编写高质量代码:改善Java程序的151个建议(第二章:基本类型)
编写高质量代码:改善Java程序的151个建议(第二章:基本类型) 目录 建议21:用偶判断,不用奇判断 建议22:用整数类型处理货币 建议23:不要让类型默默转换 建议24:边界还是边界 建议25: ...
- 编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则)
编写高质量代码:改善Java程序的151个建议(第一章:JAVA开发中通用的方法和准则) 目录 建议1: 不要在常量和变量中出现易混淆的字母 建议2: 莫让常量蜕变成变量 建议3: 三元操作符的类型务 ...
- 理解Babel是如何编译JS代码的及理解抽象语法树(AST)
Babel是如何编译JS代码的及理解抽象语法树(AST) 1. Babel的作用是? 很多浏览器目前还不支持ES6的代码,但是我们可以通过Babel将ES6的代码转译成ES5代码,让所有的浏览器都 ...
- C# 《编写高质量代码改善建议》整理&笔记 --(一)基本语言篇
题记:这是自己的观后感,工作两年了,本来打算好好学习设计模式,或者作为客户端深入了解GPU编程的,但是突然发现还有这么一本书. <编写高质量代码改善建议>,感觉这正是自己需要的. 我是做 ...
- 编写高质量代码:改善Java程序的151个建议 --[106~117]
编写高质量代码:改善Java程序的151个建议 --[106~117] 动态代理可以使代理模式更加灵活 interface Subject { // 定义一个方法 public void reques ...
- 编写高质量代码:改善Java程序的151个建议 --[78~92]
编写高质量代码:改善Java程序的151个建议 --[78~92] HashMap中的hashCode应避免冲突 多线程使用Vector或HashTable Vector是ArrayList的多线程版 ...
随机推荐
- x86项目中读取注册表Register数据项的方法
x86项目中使用Registry读取key/value的时候,会出现重定向的问题,解决方法如下: public static string GetMachineGuid() { string guid ...
- 解决PJA错误
现场有WAS5.6,均安装在AIX下,且都已经设置PJA,在WAS5上报表正常,但是在WAS6下报表会报错,两个应用下的配置均相同. 反馈的报错日志: [11-4-25 14:20:42:758 ...
- 直到黎明 Until Dawn 后感
直到黎明 会免游戏.白金神作.近些年的恐怖电影都有游戏化的趋势,韩国的某岩vlog,美国的真心话大冒险,都把观众作为meta代入游戏,几乎模糊了游戏与游戏的边界,直到黎明这部电影,与当年的暴雨和超凡双 ...
- git工具的使用
Git工具的出现降低了软件版本维护的成本,极大的提高了工作效率,在这里列出了一些使用方法,方便以后查看. 1.Git的初始化->创建一个Git仓库:git init 2.创建信息:git con ...
- LeetCode题解之Hamming Distance
1.题目描述 2.问题分析 使用C++ 标准库中的 bitset 类,将整数转换为二进制形式,然后再将其转换为字符串,最后比较字符串. 3.代码 int hammingDistance(int x, ...
- leetCode题解之根据字符出现的频率排序
1.题目描述 Given a string, sort it in decreasing order based on the frequency of characters. Example 1: ...
- MySQL Group Replication配置
MySQL Group Replication简述 MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事 ...
- Spring中的统一异常处理方式
源自:https://segmentfault.com/a/1190000016236188 在具体的SSM项目开发中,由于Controller层为处于请求处理的最顶层,再往上就是框架代码的. 因此, ...
- HTTP 头 Connection:close 作用
有的网站会在服务器运行一段时间后down掉,有很多原因可能造成这种现象:比如tomcat堆和非堆内存设置不足,程序没能释放内存空间造成内存溢出,或者某些进程一直运行没能释放,造成cup资源大量消耗. ...
- asp.net core中DockerFile文件中的COPY
今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...