机器人足球实验报告

更新时间:2023-12-08 07:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一

一、实验目的

掌握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? mkdir Robcup

(4)如何删除子目录 RoboCup? rmdir Robcup

(5)如何查看当前目录下的内容? ls

(6)如何将文件 start.sh 的权限设定为:start.sh 属于可读、可写、可执行? chmod 777 start.sh

(7)如何将当前目录包括所有子目录全部做备份文件,备份文件名为 first.tar? tar xvf dir1 first.tar

(8)如何将目录/home 下每一个文件压缩成.gz 文件? tar -zcwf store.tar

(9)如何把上例中每个压缩的文件解压,并列出详细的信息? tar xvf store.tar Ls -lg

实验二

1、 实验目的

(1)了解Demeer5的工作原理

(2)学会对Demeer5进行简单的修改

二、实验设备

硬件环境:PC 软件环境:Linux

三、实验内容

(1)如果可踢球就用最大力踢球

else if( WM->isBallKickable()) // 如果球已知,而且当前球在我脚下(可踢) {

VecPosition pos=( 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)如果球不可踢且我是队友中最快到达球的队员,则去截球

else if( WM->getFastestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL, &iTmp )

== WM->getAgentObjectType() && !WM->isDeadBallThem() )

// 如果球不在我的控制范围下,但是当前能最快抢到球的是我,那我就去执行抢球动作

{

Log.log( 100, \ soc = intercept( false );

ACT->putCommandInQueue( soc );

ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ));

(3)其他情况按战略点跑位

else if( 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)将球踢向对方球门 else if( WM->isBallKickable()) // 如果球已知,而且当前球在我脚下(可踢) {

VecPosition pos=( 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)将球踢向距自己最近的球员 else if( WM->isBallKickable()) // 如果球已知,而且当前球在我脚下(可踢)

{ VecPosition vec=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)向对方球门带球 else if( WM->isBallKickable()) {

AngDeg ang=0.0;

soc=dribble(ang,DRIBBLE_FAST); ACT->putCommandInQueue(soc); ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ));

} (9)不同的带球组合 else if( WM->isBallKickable()) {

if(WM->isInTheirPenaltyArea(WM->getBallPos()))

{

VecPosition pos=( PITCH_LENGTH/2.0,(-1 + 2*(WM->getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() ); soc=kickTo(pos,SS->getBallSpeedMax());

} else {

AngDeg ang=0.0;

soc=dribble(ang,DRIBBLE_FAST);

}

AngDeg ang=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号 else if( WM->isBallKickable())

{

if(WM->isInTheirPenaltyArea(WM->getBallPos())) {

VecPosition pos=( 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_{

AngDeg ang=0.0;

soc=dribble(ang,DRIBBLE_FAST);

TEAMMATE_8||WM->getAgentObjectType()==OBJECT_TEAMMATE_9)

}

else

{

soc=leadingPass(OBJECT_OPPONENT_9,1); }

}

AngDeg ang=0.0;

soc=dribble(ang,DRIBBLE_FAST); ACT->putCommandInQueue( soc );

ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc )); }

(2)如果队员的位置在自己半场就向对方球门踢球,否则就向前方带球 else if( WM->isBallKickable()<=0)

{

if(WM->getBallPos().getX()<=0) {

VecPosition pos=( PITCH_LENGTH/2.0, (-1 + 2*(WM->getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() ); soc=kickTo(pos,SS->getBallSpeedMax()); } else {

AngDeg ang=0.0;

soc=dribble(ang,DRIBBLE_FAST);

}

AngDeg ang=0.0;

soc=dribble(ang,DRIBBLE_FAST); ACT->putCommandInQueue( soc );

ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc )); }

(3)担忧人来抢球时,就将球传给离自己最近的队友,否则就自己带球

else if( WM->isBallKickable())

{

Circle cir(posAgent,2.5);

int num=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir); if(num<2) {

VecPosition

vec=WM->getGlobalPosition(WM->getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent)); soc=kickTo(vec,2.0); } else {

soc=dribble(0.0,DRIBBLE_FAST); }

本文来源:https://www.bwwdw.com/article/p43t.html

Top