机器人足球实验报告.docx
《机器人足球实验报告.docx》由会员分享,可在线阅读,更多相关《机器人足球实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
![机器人足球实验报告.docx](https://file1.bdocx.com/fileroot1/2022-10/7/a92ceb75-6a1e-4e6c-954f-f6ae9da56bb1/a92ceb75-6a1e-4e6c-954f-f6ae9da56bb11.gif)
实验一
一、实验目的
掌握RoboCup仿真机器人足球比赛相关知识点,具体内容如下:
(1)Linux操作系统的熟悉及了解其基本操作。
(2)掌握Linux下如何进行C++编程,了解gcc编译器以及一些简单编辑工具,如:
vi、emacs、gedit、Anjuta、Kdevelope等。
(3)启动RoboCup仿真(2D)足球队的比赛。
二、实验设备
硬件环境:
PC机
软件环境:
操作系统linux
三、实验内容
(1)掌握Linux一些常用的命令
a)如何找到用户主目录的绝对路径名?
在自己的系统上,用户主目录的绝对路径名是什么?
pwd /home/student
(2)将当前工作目录从/home/UVA转到/home/Tsinghua需要使用什么命令?
如何显示当前目录?
cd/home/Tsinghua
(3)如何在当前目录下建立子目录RoboCup?
mkdirRobcup
(4)如何删除子目录RoboCup?
rmdirRobcup
(5)如何查看当前目录下的内容?
ls
(6)如何将文件start.sh的权限设定为:
start.sh属于可读、可写、可执行?
chmod777start.sh
(7)如何将当前目录包括所有子目录全部做备份文件,备份文件名为first.tar?
tarxvfdir1first.tar
(8)如何将目录/home下每一个文件压缩成.gz文件?
tar-zcwfstore.tar
(9)如何把上例中每个压缩的文件解压,并列出详细的信息?
tarxvfstore.tar
Ls-lg
1、 实验目的
实验二
(1)了解Demeer5的工作原理
(2)学会对Demeer5进行简单的修改
二、实验设备
硬件环境:
PC
软件环境:
Linux
三、实验内容
(1)如果可踢球就用最大力踢球
elseif(WM->isBallKickable()) //如果球已知,而且当前球在我脚下(可踢)
{
VecPositionpos=(PITCH_LENGTH/2.0,(-1+2*(WM->getCurrentCycle()%2))*
0.4*SS->getGoalWidth());soc=kickTo(pos,SS->getBallSpeedMax());
ACT->putCommandInQueue(soc); //放入命令队列
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
(2)如果球不可踢且我是队友中最快到达球的队员,则去截球
elseif(WM->getFastestInSetTo(OBJECT_SET_TEAMMATES,OBJECT_BALL,&iTmp)
==WM->getAgentObjectType()&&!
WM->isDeadBallThem())
//如果球不在我的控制范围下,但是当前能最快抢到球的是我,那我就去执行抢球动作
{
Log.log(100,"Iamfastesttoball;cangettherein%dcycles",iTmp);soc=intercept(false);
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
(3)其他情况按战略点跑位
elseif(posAgent.getDistanceTo(WM->getStrategicPosition())>
1.5 + fabs(posAgent.getX()-posBall.getX())/10.0) //
到了这里就是其他距离球相对远一点的人了,如果离自己的阵形点太远,就跑回自己的阵形点去。
{
if(WM->getAgentStamina().getStamina()>SS->getRecoverDecThr()*SS-
>getStaminaMax()+800)
{
soc=moveToPos(WM->getStrategicPosition(),PS->getPlayerWhenToTurnAngle());ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
(4)将球踢向对方球门
elseif(WM->isBallKickable()) //如果球已知,而且当前球在我脚下(可踢)
{
VecPositionpos=(PITCH_LENGTH/2.0,(-1+2*(WM->getCurrentCycle()%2))*
0.4*SS->getGoalWidth()); //得到对方球门的坐标
soc=kickTo(pos,SS->getBallSpeedMax());
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
(5)将球踢向距自己最近的球员
elseif(WM->isBallKickable()) //如果球已知,而且当前球在我脚下(可踢)
{
VecPositionvec=WM->globalPosition(WM->getClosestInSetTo
(OBJECT_SET_TEAMMATES,posAgent));
soc=kickTo(vec,2.0);
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
(7)用不同的带球模式带球dribble(vec,DRIBBLE…)
分别用DRIBBLE_FAST 快速带球
DRIBBLE_SLOW 慢速带球
DRIBBLE_WITHBALL安全带球的模式带球
(8)向对方球门带球
elseif(WM->isBallKickable())
{
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);
ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
(9)不同的带球组合
elseif(WM->isBallKickable())
{
if(WM->isInTheirPenaltyArea(WM->getBallPos()))
{
VecPositionpos=(PITCH_LENGTH/2.0,(-1+2*(WM->getCurrentCycle()%2))*
0.4*SS->getGoalWidth());
soc=kickTo(pos,SS->getBallSpeedMax());
}
else
{
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);
}
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);
ACT->putCommandInQueue(soc);//放入命令队列
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
一、.实验目的
实验三
熟悉demeer5并学会demeer5的基本使用方法,具体内容如下:
(1)理解UVA程序的的么而内容
(2)能修改demeer5
(3)能进行底层动作的组合
二、实验设备:
硬件设备:
pc机
软件设备:
操作系统linux
三、实验内容
(1)如果在对方禁区内就射门,否则,如果时7、8、9号队友就超前方带球,其他队
友传球给9号
elseif(WM->isBallKickable())
{
if(WM->isInTheirPenaltyArea(WM->getBallPos()))
{
VecPositionpos=(PITCH_LENGTH/2.0,(-1+2*(WM->getCurrentCycle()%2))*
0.4*SS->getGoalWidth());soc=kickTo(pos,SS->getBallSpeedMax());
}
else
{
if(WM->getAgentObjectType()==OBJECT_TEAMMATE_7||WM-
>getAgentObjectType()==OBJECT_TEAMMATE_8||WM->getAgentObjectType()==OBJECT_TEAMMATE_9)
{
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);
}
else
{
soc=leadingPass(OBJECT_OPPONENT_9,1);
}
}
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
(2)如果队员的位置在自己半场就向对方球门踢球,否则就向前方带球
elseif(WM->isBallKickable()<=0)
{
if(WM->getBallPos().getX()<=0)
{
VecPositionpos=(PITCH_LENGTH/2.0,(-1+2*(WM->getCurrentCycle()%2))*
0.4*SS->getGoalWidth());soc=kickTo(pos,SS->getBallSpeedMax());
}
else
{
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);
}
AngDegang=0.0;soc=dribble(ang,DRIBBLE_FAST);ACT->putCommandInQueue(soc);
ACT->putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));
}
(3)担忧人来抢球时,就将球传给离自己最近的队友,否则就自己带球
elseif(WM->isBallKickable())
{
Circlecir(posAgent,2.5);
intnum=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir);if(num<2)
{
VecPositionvec=WM->getGlobalPosition(WM-
>getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent));soc=kickTo(vec,2