




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计 算 机 与 信 息 学 院计算机科学与技术机器人足球实验实验一一、实验目的掌握 RoboCup 仿真机器人足球比赛相关知识点,具体内容如下:(1)(2)Linux 操作系统的熟悉及了解其基本操作。掌握 Linux 下如何进行 C+编程,了解 gcc 编译器以及一些简单编辑工具,如:vi、emacs、gedit、Anjuta、Kdevelope 等。(3)启动 RoboCup 仿真(2D)足球队的比赛。二、实验设备 硬件环境:PC 机环境:操作系统 linux三、实验内容(1)掌握 Linux 一些常用令a)如何找到用户主目录的绝对路径名?在自己的系统上,用户主目录的绝对路径名是什么?pwd
2、/home/student将当前工作目录从/home/UVA 转到/home/Tsinghua 需要使用什么命令?如何显示当前目录?cd /home/Tsinghua如何在当前目录下建立子目录 RoboCup? mkdirRobcup如何删除子目录 RoboCup? rmdir Robcup如何查看当前目录下的内容? ls如何将文件 start.sh 的权限设定为:start.sh 属于可读、可写、可执行? od 777 start.sh(7)如何将当前目录包括所有子目录全部做备份文件,备份文件名为.tar?tar xvfdir1.tar如何将目录/home 下每一个文件压缩成.gz 文件?
3、tar -zcwf store.tar如何把上例中每个压缩的文件解压,并列出详细的信息? tar xvf store.tarLs -lg实验二1、 实验目的了解 Demeer5 的工作原理学会对 Demeer5 进行简单的修改二、实验设备硬件环境:PC环境:Linux三、实验内容(1)如果可踢球就用最大力踢球else if( WM-isBallKickable()我脚下(可踢)/ 如果球已知,而且当前球在Vecition=(PITCH_LENGTH/2.0,(-1+2*(WM-getCurrentCycle()%2) *0.4 * SS-getGoalWidth() );,SS-getBall
4、SpeedMax();soc=kickTo( ACT-ACT-mandInQueue( soc );/ 放入命令队列mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(2)如果球不可踢且我是队友中最快到达球的队员,则去截球else if( WM-getFastestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL, &iTmp )= WM-getAgentObjectType()& !WM-isDeadBallThem() )/ 如果球不在抢球动作控制范围下,但是当前能最快抢到球的是我,去执行Log.log(
5、 100, I am fastest to ball; can get there in %d cycles, iTmp ); soc =ercept( false );ACT-mandInQueue( soc );ACT-mandInQueue(turnNeckToObject(OBJECT_BALL,soc );(3)其他情况按点跑位else if(Agent.getDistanceTo(WM-getStrategicition() 1.5 + fabs(Agent.getX()-Ball.getX()/10.0)/ 到了这里就是其他距离球相对远一点的人了,如果离自己的阵形点太远,就跑回
6、自己的阵形点去。if(WM-getAgentStamina().getStamina()SS-getRecoverDecThr()*SS-getStaminaMax()+800)soc=moveTo(WM-getStrategicition(),PS-getPlayerWhenToTurnAngle();ACT- ACT-mandInQueue( soc );mandInQueue(turnNeckToObject(OBJECT_BALL,soc ) );(4)将球踢方球门else if( WM-isBallKickable()下(可踢)/ 如果球已知,而且当前球在我脚Vecition=(PI
7、TCH_LENGTH/2.0,(-1+2*(WM-getCurrentCycle()%2) *0.4 * SS-getGoalWidth() );坐标/得到对方球门的soc=kickTo( ACT-ACT-,SS-getBallSpeedMax(); mandInQueue( soc );mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(5)将球踢向距自己最近的球员else if( WM-isBallKickable()下(可踢)/ 如果球已知,而且当前球在我脚Vecitionvec=WM-globalition(WM-getClosestI
8、nSetTo (OBJECT_SET_TEAMMATES,Agent);soc=kickTo(vec,2.0);ACT- ACT-mandInQueue(soc);mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(7)用不同的带球模式带球分别用 DRIBBLE_FASTDRIBBLE_SLOWdribble(vec,DRIBBLE)快速带球慢速带球DRIBBLE_WITHBALL安全带球的模式带球(8)方球门带球else if( WM-isBallKickable()AngDeg ang=0.0; soc=dribble(ang,DRIBBL
9、E_FAST);ACT- ACT-mandInQueue(soc);mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(9)不同的带球组合else if( WM-isBallKickable()if(WM-isheirPenaltyArea(WM-getBall()Vecition=(PITCH_LENGTH/2.0,(-1+2*(WM-getCurrentCycle()%2) *0.4 * SS-getGoalWidth() ); soc=kickTo(,SS-getBallSpeedMax();elseAngDeg ang=0.0; soc
10、=dribble(ang,DRIBBLE_FAST);AngDeg ang=0.0; soc=dribble(ang,DRIBBLE_FAST);ACT- ACT-mandInQueue( soc ); / 放入命令队列mandInQueue( turnNeckToObject( OBJECT_BALL, soc );实验三一、.实验目的熟悉 demeer5 并学会demeer5 的基本使用方法,具体内容如下:理解 UVA 程序的的么而内容能修改 demeer5能进行底层动作的组合二、实验设备:硬件设备:pc 机设备:操作系统 linux三、实验内容(1)如果在对方友传球给 9 号内就射门,否
11、则,如果时 7、8、9 号队友就超前方带球,其他队else if( WM-isBallKickable()if(WM-isheirPenaltyArea(WM-getBall()Vecition=( PITCH_LENGTH/2.0, (-1 + 2*(WM-getCurrentCycle()%2) *0.4 * SS-getGoalWidth() );,SS-getBallSpeedMax();soc=kickTo(elseif(WM-getAgentObjectType()=OBJECT_TEAMMATE_7|WM-getAgentObjectType()=OBJECT_TEAMMATE_
12、8|WM-getAgentObjectType()=OBJECT_TEAMMATE_9)AngDeg ang=0.0; soc=dribble(ang,DRIBBLE_FAST);elsesoc=leadingPass(OBJECT_OPPONENT_9,1);AngDeg ang=0.0; soc=dribble(ang,DRIBBLE_FAST);ACT-ACT-mandInQueue( soc );mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(2)如果队员的位置在自己半场就else if( WM-isBallKickable()ge
13、tBall().getX()getCurrentCycle()%2) *0.4 * SS-getGoalWidth() );,SS-getBallSpeedMax();soc=kickTo(elseAngDeg ang=0.0; soc=dribble(ang,DRIBBLE_FAST);AngDeg ang=0.0; soc=dribble(ang,DRIBBLE_FAST);ACT-ACT-mandInQueue( soc );mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(3)担忧人来抢球时,就将球传给离自己最近的队友,否则就自己带球
14、else if( WM-isBallKickable()Circle cir(Agent,2.5);num=WM-getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir); if(numgetGlobal);ition(WM-getClosestInSetTo(OBJECT_SET_TEAMMATES,Agentsoc=kickTo(vec,2.0);elsesoc=dribble(0.0,DRIBBLE_FAST);ACT-ACT-mandInQueue( soc ); / 放入命令队列mandInQueue( turnNeckToObject( OBJECT
15、_BALL, soc );实验四一、实验目的进一步了解 demeer5 并能熟悉的修改 demeer5 的内容以达到对场上的球员的控制能理解 UVA 程序中原来的 demeer 中原来的 demeer 中的全部控制能通过修改 demeer5 中的具体 函数内容实现对场上球员的控制能通过底层动作的简单组合控制场上队员做出一些复杂动作决策(4)对 worldm有初步的认识,学会在 woeldm,basicplayer 里添加新函数二、实验设备硬件环境:PC环境:操作系统 linux三、实验内容(1)判断守门员的位置,朝门空隙较大的一方射门else if( WM-isBallKickable()Ve
16、cition vec=WM-getGlobalition(WM-getOppGoaType();if(vec.getY()0)Vecition=(52.2,-6.5);,SS-getBallSpeedMax();soc=kickTo(elseVecition1=(52.5,6.5);1,SS-getBallSpeedMax();soc=kickTo(ACT- ACT-mandInQueue( soc );mandInQueue( turnNeckToObject( OBJECT_BALL, soc );(2)在 Basicplay 力添加一个带球函数,要求如果无人阻挡就向球门带球,否则想办法避
17、开对方球员带球前进.打开 WorldMisOpponen.h,在里面预定义函数,即写入boolAngleEx( AngDeg angA , AngDeg angB ,doubledDist );该函数用来判断当前球员角度在angAangB之间距离小于dDist的范围内是否有对方队员.找到并打开WorldM.c在里面填加一个新函数bool WorldM:isOpponenAngleEx( AngDeg angA , AngDeg angB ,doubledDist )VecVecitionitionAgent Opp;angOpp;= getAgentGlobalition();AngDegiI
18、ndex;for( ObjectT o = iterateObjectStart( iIndex, OBJECT_SET_OPPONENTS );o != OBJECT_ILLEGAL;o = iterateObjectNext ( iIndex, OBJECT_SET_OPPONENTS ) )OppangOpp= getGlobalition( o );= (Opp -Agent ).getDirection() ;if( angA=angOpp & angOpp =angB &return true;Agent.getDistanceTo(Opp ) isBallKickable()Ci
19、rcle cir(Agent,2.5);num=WM-getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir); if(numisOpponenang+=45;AngleEx(ang-45, ang, 6) )else if ( WM-isOpponenang-=45;AngleEx(ang,ang+45,6) )mand soc = dribble ( ang , DRIBBLE_SLOW );elsesoc=dribble(0.0,DRIBBLE_FAST);ACT-ACT-mandInQueue( soc );mandInQueue( turnNeckTo
20、Object( OBJECT_BALL, soc );实验五视觉改变:先在 Basicplayer.h 中输入mandview1122333 (mand soc);)做定义;mand soc)函数做定义如下:给 view1122333 (mand soc再在 Basicplayer.cpp 中view1122333 (/*将视觉分成 1122333 的视觉模式(“1”代表 60 度,“2”代表 120,“3”代表 180)*/mand BasicPlayer:view1122333(mand soc)/7 - 共分成 7 份VecitionAgent = WM-getAgentGlobalit
21、ion();le();AngDeg angBody = WM-getAgentGlobalBod AngDeg angTurn=30;switch( WM-getCurrentCycle()%7 )case 0:angTurn -= 60;case 1:ACT-mandInQueue(mand(CMD_CHANGEVIEW,VA_NARROW, VQ_HIGH);ACT-mandInQueue(turnNeckToPo(Agent+Vecition(Turn), POLAR),5, Vecition:normalizeAngle(angBodsoc);break; case 2:case 3:
22、ACT-mandInQueue(mand(CMD_CHANGEVIEW,VA_NORMAL, VQ_HIGH);ACT- POLAR), soc);break; case 4:case 5:case 6:Act- break;default:;mandInQueue(turnNeckToPo(Agent+Vecition(5, angBody,mandinqueue(mand(cmd_changeview, va_wide, vq_high);再在 playerTeams.cpp 球可踢的条件下增加ACT-mandInQueue(view1122333(soc);就可看到明显的视觉变化实验六特
23、殊比赛模式的设计模式一:单纯的比赛模式来判断在 playertreams.cpp 中球可踢情况下加入如下特殊模式else if ( WM-isBallKickable()if(WM-isKickInUs()/我方界外球if(WM-getAgentObjectType()=OBJECT_TEAMMATE_11)soc =leadingPass(OBJECT_TEAMMATE_9,2);/传球给 9 号if(WM-getAgentObjectType()=OBJECT_TEAMMATE_10)soc=leadingPass(OBJECT_OPPONENT_9,2);/传球给 9 号if(WM-getAgentObjectType()=OBJECT_TEAMMATE_5)if(WM-getAgent
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论