本文以及今后将发表的一系列笔记是我补写的两个月来学习RoboCup 2D的经过,希望能给各位有意于RoboCup的朋友们带来一些启示。
  RoboCup是一项以促进人工智能(特别是多个智能体协作问题)发展为宗旨的国际间学术活动。它与ACM/ICPC不同,后者是ACM主办的一项学生竞赛活动,而RoboCup则是以竞赛的形式促进研究。所以参与者并不限于大学生,甚至不限于学生,即只要是学术机构(包括企业下属的研发机构)都可以参与。而参赛球队也不是由少数几个人完成的,而是多届研究人员不断完善的。这些特点就决定了虽然在学术水平上大家是共同进步的,然到了大战之前,却是无所不用其极。
……
阅读全文——共566字

调用iostream输入数据时,若用户输入的数据类型与要求的不符(比如要求读入整数而用户输入的不是数字),则cin会被设置为fail(可以用!cin判断),而用户输入的数据仍然留在流缓冲区里,需要手动清空:

cin.clear();
cin.ignore( numeric_limits::max(), '\n');

风林火山技术文档(程序部分)
系统架构
  根据比赛规则,机器人可以遥控,也可以自动控制,考虑到搏击机器人面对的环境高度复杂,自动控制将是一个庞大繁复、任重道远的工程,故而我们一致认为机器人应主要依靠遥控,由人充当传感器和决策机构,机器人只负责将人的指令转换为具体的动作。
  在遥控方案上,我们采用了许炎武的提议——放弃制作手柄,而以一台计算机作为遥控端(因此遥控端被命名为“许炎武”)。这要求“许炎武”具有与无线模块通信的能力。经过查找,我们发现nRF24L01的扩展产品nRF24LU1可以与计算机直接通信,但此款产品在中国境内无法买到,只好作罢。最后我们令“许炎武”通过串口输出信号,自己制作了一个ATmega16+nRF24L01的电路板作为转发机构(因此被命名为“Skywalker”)。硬件结构基本解决,软件结构是:“许炎武”将人的指令进行初步翻译——将抽象的指令翻译为机器人上舵机状态的列表,通过串口传给Skywalker,Skywalker将信号原样发送出去。而在机器人上,有一块同样的nRF24L01负责接收无线信号,传送给ATmega16,然后再由ATmega16生成PWM波控制舵机(机器人端被命名为“bondsdancer”)。
……
阅读全文——共2826字

  今天尝试在Eclipse 3.4中安装Subversive,但遇到了下面的错误:

Cannot find a solution where both Match[requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.1.I20080612-1500,0.7.1.I20080612-1500]] and Match[requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.team.svn.feature.group/[0.7.3.I20080814-1500,1.0.0)] can be satisfied.
……
阅读全文——共2786字

  昨天晚上重写了点球决策,今天早上做了一下测试。结果做掉了Mersad和RoboCup2008提供binaries的除oxsy之外的所有队伍。另外还发现了WrightEagle另外一个Bug(不过shike说出现这个Bug时我已经涉嫌犯规了)。oxsy的点球风格真是令我大开眼界——进攻队员先将球踢向后半场,待甩开出击的守门员后,再快速带向球门。
  下午将对vRobot的点球做些修正,决策的套路大概不会变了,需要变的是很多小地方——铲球模型和特殊判断,以及球员归位。

  昨天说过“最近有了另一项想做的事情”,今天公开一下吧。这件事情就是在Mersad底层上写自己的球队。Mersad结构比UvA Trilearn复杂,实现了更多的东西,似乎还有外挂决策和学习的功能。虽然基本没有注释和文档,但在Eclipse的帮助下,我终于大致看出了Mersad的决策过程。今天将Mersad的点球略微改了一下(去除了大BUG),足以跟WrightEagle一拼。但很不幸的是,shike认为Mersad比Uva Trilearn高级很多,用Mersad写球队对其他人不公平,所以要求点球大战和联赛统一使用UvA Trilean为底层。这个纯洁、善良的愿望破灭了。

静态数据成员不是某一个对象所有,而是隶属于某个类,为这个类的所有对象共有。其作用与函数中的静态变量类似。
静态数据成员的初始化不是写在类声明中,也不是写在构造函数中,而是像成员函数一般,单独列出来,但定义时不加static关键字。如下:

class my_class
……
阅读全文——共202字

  昨天shike提出要在周末打一场点球大战,于是今天试着写了个点球。结构就是if-if-if,试图把各种情况列举出来。中间经历了一次射门区间刚好写反的错误,导致对着空门踢飞率50%+。改好之后,发现没有合适的守门员(我把守门员的一般决策直接搬到点球中,却发现守门员根本不动)。而世界杯那些守门员实在太厉害了,小改动了几次都无法有效突破。观察WrightEagle和Brainstormers的点球大战,发现他们的带球动作与我的明显不同,带球路线也非常复杂。带球路线一时间无法写的那么复杂,明天试试将带球动作改一下吧。
……
阅读全文——共327字