封面欢迎词大纲介绍0.概述0.1实物半自主足球机器人0.2仿真机器人足球比赛0.3仿真比赛的特点仿真实物半自主机器人足球比赛;所有的硬件设备均由计算机模拟实现;简化比赛系统复杂度,减少硬件需求;可控性好、无破坏性、可重复使用,不受硬件条件和场地环境的限制;研究人工智能的绝佳平台;0.4仿真比赛开发基础对c语言有一定的了解;对vc开发环境比较熟悉;有创造性思维和充分的想象力;有克服困难的能力;1.仿真平台使用介绍1.1演示一场比赛VS武汉工程大学代表队千人工程代表队黄队蓝队1.2MLS平台开发者:澳大利亚的Dr.JunJo领导的Griffith大学信息技术学院RSS开发小组1.3机器人的编号home1home2home3home4opp1opp2opp3opp4opp0home0Home代表己方机器人Opp代表对方机器人箭头所指的方向为机器人当前的正方向1.4机器人的辨认0号一般是守门员,用大红色表示;1号用紫色表示,2号用紫红色表示;3号用绿色表示,4号用蓝绿色表示;每方队员有五名,分别用不同的颜色来标示,中间是代表队伍的颜色,在左下角是区分不同队员的标识:1.5鼠标和键盘操作鼠标:在比赛开始前或比赛暂停时,可以用鼠标拖动球或机器人到场地的任何位置。键盘:在比赛开始前或比赛暂停时,当鼠标点击某一个机器人后可以用或键来调整该机器人的角度。1.6MLS平台系统特点机器人模型:Yujin机器人的物理模型。模拟精确:碰撞检测完全,碰撞处理准确仿真极为真实(采用商业游戏引擎公司Havok的碰撞处理引擎作品帝国时代、CS等)。系统界面:3维(采用Director设计界面,3DMax建模)。1.7MLS平台系统需求Windows98或以上版本的操作系统;DirectX8.0或以上版本;硬件需求:PentiumIII600MHz或与其性能相当的CPU;256M系统内存;具有32M显存的TNT2或其以上级别的显示卡;至少可以实现800×600分辨率的显示器;软件需求:1.8软件开发环境LingoMicrosoftVisualC++6.0MicrosoftVisualC++.NET2003√√×1.9MLS平台模板程序平台提供了基本的策略开发框架,见安装目录下的StrategySource目录如:C:\ProgramFiles\RobotSoccerv1.5a\StrategySource)。其模板程序为DLL动态联接库。2.仿真平台与策略程序的关系2.1什么是策略程序?定义:策略程序就是自己编写的能够使仿真平台中机器人按照预定方式运动的程序。通俗的来说,就是能够打比赛的程序。2.2仿真平台与策略程序的通讯方式策略程序接受数据策略程序发送数据MLS平台MLS策略程序策略程序将接受的数据进行处理2.3场地信息介绍(6.8118,6.3730)(6.8118,77.2392)(93.4259,77.2392)(93.4259,6.3730)(0,0)(单位:英寸)说明:1英寸=2.54厘米2.4场地的各种标志及尺寸(单位:厘米)前约4.318球机器人约7.9756(0.0,0.0)XY转角方向0°2.5球与车的长度尺寸(单位:厘米)2.6策略程序每个周期接受的数据仿真平台传递给策略程序的数据:己方、对方机器人坐标、角度(当前周期,上一周期)。球的坐标(当前周期,上一周期)。场地数据。控球方。2.7策略程序每个周期发送的数据策略程序发送给仿真平台的数据:己方(home[i])每个机器人的左轮速(vl)和右轮速(vr)。注:当前发送的数据要到下一周期才能执行。4.动作函数及演示4.1Velocity动作函数该动作可以给机器人自由的发轮速(在该程序中可以简单的认为轮速就是机器人的推进力)。小车发轮树被限制为–125~125之间。//形参robot指定小车号//形参vl左轮速vr右轮速voidVelocity(Robot*robot,intvl,intvr);4.1.1机器人的运动控制左轮速vl右轮速vr注:vlvr机器人顺时针旋转vlvr机器人逆时针旋转当轮速为负时,机器人反向运动4.1.2Velocity例子//一般动作voidNormalVelocity(Environment*env){//让2号机器人两个轮子都以10的轮速前进Velocity(&env-home[2],20,20);//让1号机器人左轮子都以-20的轮速后退Velocity(&env-home[1],-20,-20);//给3号机器人左轮发100,右轮发20Velocity(&env-home[3],100,20);}4.2Angle动作函数该动作可以让机器人转到指定的任意角度。并做直线运动。//形参robot指定小车号//形参desired_angle为转角度数voidAngle(Robot*robot,intdesired_angle);4.2.1机器人的转角控制30度左轮速vl右轮速vr-180度+180度-60度左轮速vl右轮速vr当角度为负时,机器人反向运动4.2.2Angle例子voidNormalAngle(Environment*env){//让1号机器人转到30度角Angle(&env-home[1],30);//让3号机器人转到-60度角Angle(&env-home[3],-60);}4.3Position动作函数该动作可以让机器人跑到场地上指定的任何地点。//形参robot指定小车号//形参x目标位置X坐标y目标位置Y坐标voidPosition(Robot*robot,doublex,doubley);4.3.1机器人的指定点运动?度左轮速vl右轮速vr球位置2球位置1Position函数根据目标位置可进行转角的控制。4.3.2Position例子voidNormalPosition(Environment*env){//让2号机器人追着球跑Position(&env-home[2],env-lastBall.pos.x,\env-lastBall.pos.y);//让2号机器人跑到场地中心doublex=(env-fieldBounds.left+env-fieldBounds.right)/2;doubley=(env-fieldBounds.bottom+env-fieldBounds.top)/2;Position(&env-home[2],x,y);}4.4三个动作函数组合使用的例子voidNormal(Environment*env){Position(&env-home[0],env-goalBounds.left+10,env-currentBall.pos.y);//让0号机器人在球门附近跟着球的y坐标跑Velocity(&env-home[1],10,70);//让1号机器人逆时针转圈Position(&env-home[2],env-currentBall.pos.x,env-currentBall.pos.y);//让2号机器人追着球跑Angle(&env-home[3],-60);//让3号机器人追着球跑Velocity(&env-home[4],5,5);//让1号机器人逆时针转圈}4.5注意事项轮速度限制为-125~125平台原始接口中提供了比赛状态(GameState)以及控球方(WhosBall)两个参数,但经过实际开发时发现他们毫无任何用处,故需要自己判断场地度量单位为英寸,1英寸=2.54厘米机器人角度的单位为角度(不是弧度)如果场地不同,队伍需要转换左右半场坐标5.策略程序的结构5.1策略文件组成5.2策略类视图5.3InterFace.h接口文件这个文件有与仿真平台通讯的一个结构Environment和三个函数的声明//比赛开始时系统调用一次externCSTRATEGY_APIvoidCreate(Environment*env);//比赛过程中由系统循环调用(策略都放在里面)。externCSTRATEGY_APIvoidStrategy(Environment*env);//比赛结束时系统调用一次externCSTRATEGY_APIvoidDestroy(Environment*env);5.3.1Strategy接口函数解析函数接口Strategy是程序的主要执行逻辑,由系统反复调用,每次调用时系统通过Environment*env这个指针向我们传递当前周期系统提供信息,在这里,我们必须处理针对赛场上每一时刻的对策,通过策略运算设置己方小车的左右轮转速,来控制机器人进行足球比赛。每秒调用次数依靠机器能力来定,默认为60次,即仿真的一个周期为1/60秒。externCSTRATEGY_APIvoidStrategy(Environment*env);5.3.2InterFace.h//主要的定义,包含所有运行时的的信息,由系统刷新typedefstruct{Robothome[PLAYERS_PER_SIDE];//我方机器人数组OpponentRobotopp[PLAYERS_PER_SIDE];//敌方机器人数组BallcurrentBall,//当前小球的位置lastBall,//上一次小球的位置predictedBall;//预计的小球的位置BoundsfieldBounds,//场地范围goalBounds;//球门的位置与范围longgameState;//当前游戏的状态longwhosBall;//由谁控制球void*userData;//用户自定义信息}Environment;5.3.3InterFace.h//位置向量定义typedefstruct{doublex,y,z;//x和y为坐标值}Vector3D;5.3.4InterFace.h//己方机器人的信息定义typedefstruct{Vector3Dpos;//机器人坐标doublerotation;//机器人方向角doublevelocityLeft,velocityRight;//机器人左右轮速度}Robot;5.3.5InterFace.h//敌方机器人的信息的定义typedefstruct{Vector3Dpos;//机器人的坐标位置doublerotation;//机器人当前的转角}OpponentRobot;5.3.6InterFace.h//小球的位置定义typedefstruct{Vector3Dpos;//小球的坐标位置}Ball;5.3.7InterFace.h//场地区域范围typedefstruct{longleft,//场地左边界right,//场地右边界top,//场地上边界bottom;//场地下边界}Bounds;5.4Strategy.h简单策略函数//防守球门voidGoalie1(Robot*robot,Environment*env);//控制小车在球场边线的控制voidNearBound2(Robot*robot,doublevl,doublevr,Environment*env);//抢球voidAttack2(Robot*robot,Environment*env);//防守voidDefend(Robot*robot,Environment*env,doublelow,doublehigh);Strategy.h简单策略函数//机器人向小球的位置移动的方法voidMoonAttack(Robot*robot,Environment*env);//对敌方的跟踪voidMoonFollowOpponent(Robot*robot,OpponentRobot*opponent);//预估小球的位置voidPredictBall(Environment*env);5.5Action.h基本动作函数//设置小车轮子速度voidVelocity(Robot*robot,in