Robocup2D入门笔记(1)——概述

前言

我个人不是Robocup2D的专业选手,仅仅是在大一刚入学就接手了这项难度很高的项目,很多东西我也是在摸索当中逐渐总结出来的,希望能帮到同为入门的其他人,毕竟对初学者而言Robocup2D的资料确实挺难找,想要系统的了解需要耗费大量的时间和精力。文中难免出现错误,希望看到的各位大神能够帮忙在评论区指正,也是对新手的很好的教学。
目前打算做一套比较完整的入门笔记,从是什么开始,到基础知识的介绍,软件及环境的安装,球队的基本组成,以及常用的开发工具的介绍,希望给新手提供一个全套的教程顺利渡过前期最艰苦的时期。

1. 什么是Robocup2D

1.1 Robocup

Robocup是一项非营利性的科学挑战,目标是在2050年实现组建一支机器人足球队在世界杯赛场上战胜人类队伍,目前该项目已经进行了20余年。而在原来的足球的基础上,现在逐渐发展出其他许多不同的应用场景,例如家庭工作、救援等任务。详情见官网。
Robocup的官网
在这里插入图片描述
在这里插入图片描述

1.2 Robcup2D

Robocup2D是机器人足球的模拟比赛,足球赛的模拟分为2D与3D两种,其中2D历史更加悠久,是最早开始的比赛之一,而3D近年来也取得了长足的发展,相比2D也跟加贴近真实。
在这里插入图片描述
这里重点介绍2D比赛。2D比赛经过二十多年的发展,已经逐渐成为一项战术策略非常成熟的赛事了,许多人类足球的战术策略都被用到了这里面,例如阵型、盯防、跑位、角球战术等,而2D的限制使得在比赛中位置更加重要(因为球和球员都只能在2D的赛场上移动,因此占住了位置就是卡死了进攻以及防守的线路)。

而当前世界上Robocup2D的顶尖球队有这么几支:来自日本的Helios,来自中科大WrightEagle,以及来自安徽工业大学的YuShan,其中Helios的开源底层代码agent2d是现在非常多球队的底层代码,是一套功能十分完善、适合开发的代码。这里顺便提一下,因为Robocup是一项研究型项目,所以代码的复用是被赛事官方所鼓励的,但是也不能直接全盘照抄(这种事发生过),赛事组委会赛后会询问你球队做了哪些改进。

2 关于Robocup2D的一些资源

国内虽然有Robocup2D的强队,但适合的资源数量不多,在这里统一整理一下:
Robocup2D赛事官网.

Robocup2D基础软件的GitHub地址

Gitee的软件地址如果忍受不了Github的下载速度也可以尝试这个,里面还集成了一键安装的脚本,可以实现傻瓜式安装

官方发布的资料

中科大的教程

Yushan的教程

agent2d的说明网站,不是很详细

博主九月大人的博客
最开始就是从这个博主的博客中对Robocup的代码有了一点认识才逐步入了门。

同样一个csdn的博主介绍agent2d的构成

同样在做Robocup2D的博主,也是少见的近来还有更新的

3 Robocup2D需要哪些知识

3.1 Linux操作系统

Robocup2D的服务器是运行在Linux操作系统下的,所以所有球队几乎都会在Linux环境下开发、编译、运行,所以需要掌握Linux操作系统的一些简单操作,例如编译、安装、运行等。

3.2 C++

在Robocup2D当中,目前最主流的编程语言还是使用C++,当然也有部分球队会选择使用Java或者python,但是目前最主流的球队还是使用C++进行开发,特别是适用范围最广的Helio底层球队Agent2d是用C++进行开发,所以掌握C++的知识是很重要的。如果同样是大一初学刚刚学完一门编程语言(特别是用C语言入门的学生),那么在学习的时候需要把重点要放在C++中STL库的学习以及面向对象编程的学习。

3.3 Git

Git对于程序员来说是一个很重要的工具,特别是在多人协同开发的时候更是需要有一个强大的工具来管理每个人写的代码,Git就是一个很好的工具。关于Git的使用网上已经有很多教程了,从cmd界面到GUI界面的都有很多资料,这里就不做赘述了。

3.3 检索资料的能力

Robocup2D的资料在网上其实是比较难找的,许多文章都是介绍到安装环境就截止了,少有的代码介绍和球队开发的介绍其实都不太足够而且比较零散,这个时候就需要有强大的信息检索能力,能够在众多杂乱的文章中提取出信息加以整合变成自己的知识。
关于检索资料,可以尝试使用不同的搜索引擎进行搜索,采用更高效的搜索技巧来搜索资料,详情可以看这篇文章。甚至在必要的时候可以科学上网在外网找资料,当然这也就需要下面这个能力。

3.4 英文能力

Robocup毕竟是国外的比赛,甚至连说明书也都是用英文写的,很多的资料也都会使用英文,所以强大的英文能力以及对英文的熟练程度会很大程度上影响进程,当然这次项目也培养了我不惧怕英文的能力😂

3.5 阅读代码能力

阅读代码对程序员来说是一个必不可少的过程,而在Robocup2D的开发过程中不可避免地就会要读代码,这对前期上手是非常重要的,但是常用的agent2d的代码就已经有10万行了,涉及到的文件更是非常繁多,所以沉住气读懂代码也是很重要的一环。以后会出一期博客介绍agent2d的结构以及代码构成,给有需要的人参考。

3.6 心理方面

Robocup2D确实是一个非常复杂的项目,面对大量的代码,大量的文件,彼此之间还相互连接牵扯,对初学而言确实打击很大,所以需要有对抗挫折的能力以及在繁杂的事物中抽丝剥茧梳理的能力,但是只要开始走起来了,其实很多东西都会迎刃而解变得越来越简单,希望大家都能享受这样一个学习进步的过程。

4 Robocup2D是怎么运作的

这里仅仅简要的介绍一下整个程序是怎么运行的,具体的运行流程会在后面详细介绍。

简单地说,就是先开启一个叫做server(服务器)的进程(可以看作一个程序),这个进程负责模拟场上的情况,也包括和比赛双方进行通信。而在此基础上,官方开发了一个monitor(监视器),用于把server模拟出的数据做一个可视化的处理展现在一个“球场”上。而我们要做的,就是开发一个程序,这个程序可以与server进行通信,接受server传来的信息,做出决策,然后给server重新发送命令让server去模拟。而更具体的,我方的11个球员实际上是独立的11个进程,被称为client(客户端),每一个client都具有完整的接收信息做出决策的能力,同时这些client之间不可以私自进行通信,其实就是模拟了11个独立的球员,人家不可能心有灵犀对吧😀。球员(或者说client)之间的通信同样得走server,然后再通过server发送给其他球员。
在这里插入图片描述
下一篇:Robocup2D入门笔记(2)——环境的配置与安装