当前位置:文档之家› 机器人足球开发入门指南(FIRA 5 vs 5 仿真)

机器人足球开发入门指南(FIRA 5 vs 5 仿真)

目录第一章、5V5仿真组(Middle Simurosot)介绍Fira Simurosot Game1.1仿真型机器人足球介绍1.2仿真系统基本结构1.3仿真平台及系统特点1.4运行环境和开发工具1.5仿真平台的使用介绍第二章、仿真平台与策略关系及其运动策略开发指南2.1 什么是策略程序2.2 仿真平台与策略的运行关系2.3 仿真平台场地数据2.4 接口代码解析2.5 程序开发流程2.6 动作函数介绍2.7 在策略中调用动作的基本方法2.8 简单策略开发2.9 各种定位球第三章、比赛规则3.1 名词解释3.2 比赛规则3.3 犯规与处罚3.4 裁判3.5 环境3.6 其他第一章5V5仿真组(Middle League Simurosot)介绍FIRA SimuroSot Game1.1仿真型机器人足球介绍仿真型机器人足球(SimuroSot)SimuroSot 是一种仿真的软件系统,在该项比赛中,参赛的每个机器人不是实际的机器人,而是用计算机模拟的虚拟机器人,它主要研究比赛策略,以软件为主,忽略机器人的硬件相关的需求。

比赛中,我们仅关注的好似软件部分,主要研究用软件来实现既定的策略,完成给定的程序逻辑,主体的程序对语言要求很低,主要是要求拥有清晰的逻辑和编程思想。

换言之,SimuroSot 类型的比赛是智力与智力的碰撞。

1.2仿真系统基本结构仿真系统是有FIRA 提供的仿真程序,这个程序通过DLL(动态连接库)接收双方策略,决策系统由各队提供自己的DLL程序。

场上的数据由仿真程序计算给出,DLL接收处理并将要发给机器人的命令传给仿真程序。

1.3仿真平台及系统特点开发者:澳大利亚的Dr.Jun Jo 领导的Griffith大学信息技术学院RSS开发小组系统特点:1.机器人模型:Y ujin机器人的物理模型2.模拟精确:碰撞检测完全,碰撞处理精确(采用商业游戏引擎公司Havok的碰撞处理引擎)3.界面:3维(采用Direct设计界面,3D Max模型)1.4运行环境和开发工具仿真系统:3D Robot Soccer Simulator 1.5a编程语言:C/C++开发环境:MS Visual C++ 6.0 / MS VS2003模板:使用仿真系统提供的源程序模板程序模板说明:程序使用动态连接库(DLL)方式硬件需求:Pentiun III 600 MHz或其以上级别的显示卡256M系统内存具有32M以上显存的TNT2或其以上级别的显示卡能够支持800×600以上分辨率的显示器软件需求:Windows98或以上版本的操作系统DirectX 8.0或以上的版本1.5仿真平台的使用介绍1.5.1运行程序的方法1.先将自己编写好的代码编译成dll文件,黄队程序拷到C:\strategy\yellow,蓝队程序拷到C:\strategy\blue。

2.在仿真平台中点击STRA TEGIES按钮,选择C++,然后输入策略文件名,点击send。

3.选择相应的比赛模式,按照规则摆放好球和球员后,点击start,开始比赛。

1.5.2主菜单A-各队载入策略B-选择以何种方式开球,依次为(自由球,开球,点球,任意球,球门球)C-选择开球方黄队蓝队D-开始比赛E-比赛时间和比分F-修改时间和比分G-开始一场新的比赛H 平台帮助以及规则1.5.3策略载入菜单Lingo/C++)输入黄队程序的文件名将各队程序载入平台打开状态查看窗口(相识了球和机器人的一些基本信息)1.5.4比赛控制菜单A-立即回放B-暂停C-结束比赛1.5.5回放控制菜单A-从头开始回放B-从前300个周期开始回放C-一般速度回放D-慢速度回放E-逐帧回放F-推出回放模式G-当前进球无效1.5.6机器人的编号Home代表己方机器人Opp代表对方机器人箭头所指的方向为机器人当前的正方向1.5.7鼠标和键盘操作鼠标:在比赛开始前或比赛暂停时,可以用鼠标拖动球机器人到场地的任何位置键盘:在比赛开始前或比赛暂停时,当鼠标点击某一个机器人后可以用<-或->键来调整该机器人的角度。

第二章仿真平台与策略关系及其运动策略开发指南2.1什么是策略程序定义:策略程序就是自己编写的能够使仿真平台中机器人按照预定方式运动的程序。

通俗的来说,就是能够打比赛的程序。

2.2仿真平台与策略的运行关系2.2.1仿真平台与策略程序的通信方式2.2.2策略程序每个周期接受的数据仿真平台传递给策略程序的数据:1.己方、对方机器人坐标、角度(当前周期,上一周期)2.球的坐标(当前周期,上一周期)2.2.3策略程序每个周期发送的数据策略程序发送给仿真平台的数据:己方(home[i])每个机器人的左轮速(pwm1)和右轮速(pwm2)2.3仿真平台场地数据2.3.1 场地顶点坐标2.3.2 场地的各种标志及尺寸单位(厘米)机器人小车为理想模型。

速度限制在-125~125。

提供比赛状态(GameState)和控球方(WhosBall)两个参数。

度量单位:英寸(如转换成厘米,需乘2.54)。

球员方位角单位为角度。

每方队员有五名,分别用不同的颜色来标示,右上角是黑色来区分前后,中间是代表队伍的颜色,在左下角是区分不同队员的标识:0号一般是守门员,用大红色表示;1号用紫色表示,2号用紫红色表示,这两个一般用作防守;3号用绿色表示,4号用蓝绿色表示,这两个一般用作进攻;2.4接口代码解析程序的接口API函数:函数接口Create主要是程序的初始化,在程序开始时由系统调用,主要作用是定义所有的数据,如创建对应于:Environment->userData的函数,其中可以用来存储我们的策略执行状态等Extern “C” STRATEGY_API void Create (Enviroment *env);函数接口Destroy主要是程序的销毁,在程序结束时由系统调用,主要作用是释放自定义的数据,如删除对应于:Environment->userData的数据Extern “C” STARTGY_API void Destroy (Enviroment *env);函数接口Strategy是程序的主要执行逻辑,由系统反复调用,每次调用相当于真实系统下计算出新的机器人左右轮的速率,并发送给小车,在这里,我们必须处理针对赛场上每一时刻的对策,每秒调用60次,即仿真周期为1/60秒。

Extern “C” STARTGY_API void Strategy (Enviroment *env);实际上程序只需要这三个接口,而我们的工作就是完成这几个接口的处理。

程序的基本数据定义Vector3D //位置向量定义typedef struct{double x, y, z;}Vector3D;Bounds //区域范围定义typedef struct{long left, right, top, bottom;} Bounds;Robot //我方机器人的信息定义typedef struct{Vector3D pos; //机器人的坐标位置double rotation; //机器人当前的角度double velocityLeft, velocityRight; //机器人的左右轮速} Robot;OpponentRobot //对方机器人信息的定义typedef struct{Vector3D pos; //机器人的坐标位置double rotation; //机器人当前的角度}OpponentRobot;Ball //小球信息的定义typedef struct{Vector3D pos; //小球的坐标位置}Ball;Environment //最重要的数据定义,包含所有运行时的信息,由系统刷新typedef struct{Robot home[PLAYERS_PER_SIDE];//我方机器人数组OpponentRobot opponent[PLAYERS_PER_SIDE];//敌方机器人数组Ball currentBall, //当前小球的位置lastBall, //上一次小球的位置predictedBall; //调用PredictBall()函数后可获得数据Bounds fieldBounds, //场地范围goalBounds; //球门的位置与范围long gameState; //当前比赛状态(各种定位球的标志变量)long whosBall; //由谁控制球void * userData; //用户自定义信息}Environment;仿真系统每秒会调用dll中的接口函数Straegy接口60次,也就是我们的每个处理周期是16.67毫秒,在每次调用时,系统通过Environment * env这个指针向我们传递当前的系统的运行信息,然后我们运算后设置我方所有机器人的左右轮速,依此来控制机器人进行足球比赛。

需要注意的是:程序对于左右半场,应该分别处理。

2.5程序开发流程1.在C:\Programe Files\Robot Soccer v1.5a目录下找到Stragegy Source文件。

2.将此文件夹的代码拷出,并在VC6.0或.NET2003下打开,可以看到系统提供的接口代码,同时也有一些系统提供的策略,这些策略只是提供参考,如果想要写出好的程序,必须改进,或重新编写。

3.在我们看到的程序中像下面这样一类函数都是开发者留给我们参考的,这些以后都需要自己改进,自己编写。

void PredictBall(Environment *env); //预测球的位置void Goaliel(Robot *robot, Envirnment *env); //守门员策略void NearBound2(Robot *robot, double vl, double vr, Envirnment *env);void Attack2(Robot *robot, Environment *env); //机器人向小球移动方法void Defend(Robot *robot, Environment *env, double low, double high); //防守(后卫)void MoonAttack(Robot *robot, Environment *env); //移动攻击void MoonFollowOpponent(Robot *robot , OpponentRobot *opponent); //跟随对方球员void Velocity(Robot *robot, int vl, int vr); //给机器人发送左右轮速void Angle(Robot *robot , int desired_angle); //机器人转到指定角度void Positon (Robot *robot, double x, double y); //机器人移动到指定的坐标2.6动作函数介绍为了完成各种策略,基本的做法是用分而治之,逐步求精的方法,将主要的策略分为若干个基础策略,每个完整的策略分别由这些基本的策略组成,而这些策略又由一些基本的行为动作方式组成,我们的机器人控制程序最后就是由这些方法和行为动作方式来构成。

相关主题