机器人足球仿真实验报告文档格式.docx

上传人:b****7 文档编号:22972756 上传时间:2023-02-06 格式:DOCX 页数:17 大小:26.23KB
下载 相关 举报
机器人足球仿真实验报告文档格式.docx_第1页
第1页 / 共17页
机器人足球仿真实验报告文档格式.docx_第2页
第2页 / 共17页
机器人足球仿真实验报告文档格式.docx_第3页
第3页 / 共17页
机器人足球仿真实验报告文档格式.docx_第4页
第4页 / 共17页
机器人足球仿真实验报告文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

机器人足球仿真实验报告文档格式.docx

《机器人足球仿真实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《机器人足球仿真实验报告文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

机器人足球仿真实验报告文档格式.docx

ls–R显示出目录下以及其所有子目录的文件名。

改变工作目录格式:

cd[name]name:

目录名、路径或目录缩写。

cd改变目录位置至用户登录时的工作目录。

cddirl改变目录位置至dirl目录下。

cd~user改变目录位置至用户的工作目录。

cd..改变目录位置至。

cd../user改变目录位置至相对路径user的目录下。

cd/../..改变目录位置至绝对路径的目录位置下。

复制文件格式:

cp[-r]源地址目的地址

2

常用的方法有:

cpfile1file2将文件file1复制成file2cpfile1dir1将文件file1复制到目录dir1下,文件名仍为file1。

cp/tmp/file1将目录/tmp下的文件file1复制到当前目录下,文件名仍为file1。

cp/tmp/file1file2将目录/tmp下的文件file1复制到当前目录下,文件名仍为file2。

cp-rdir1dir2复制整个目录。

移动或更改文件、目录名称格式:

mv源地址目的地址常用的方法有:

mvfile1file2将文件file1更名为file2。

mvfile1dir1将文件file1转移到目录dir1下,文件名仍为file1。

mvdir1dir2将目录dir1更改为目录dir2。

建立新目录格式:

mkdir目录名删除目录格式:

rmdir[目录名|文件名]常用的方法有:

rm–rdir1删除目录dir1及其子目录下的所有文件。

列出当前所在的目录位置格式:

pwd查看文件内容格式:

cat文件名文件权限的设定格式:

chmod[-R]modenamename:

文件名或目录名。

mode:

3个或8个数字或rwx的组合。

r-read(读权限)、w-write(写权限)、x-execute(执行)常用的方法有:

chmod777file1给所有用户file1全部的权限。

文件的打包和解压缩格式:

tar[option][file]gzip[option][file]tar主要来进行打包而不压缩,而gzip则进行压缩。

option主要有:

-c—创建一个新归档。

-f—当与-c选项一起使用时,创建的tar文件使用该选项指定的文件名;

当与-x选项一起使用时,则解除该选项指定的归档。

-t—显示包括在tar文件中的文件列表。

-v—显示文件的归档进度。

-x—从归档中抽取文件。

-z—使用gzip来压缩tar文件。

如使用:

tar-cvffilename.tar/home/mine/work/home/mine/school上面的命令把/home/mine目录下的work和school子目录内的所有文件

3

都放入当前目录中一个叫做filename.tar的新文件里。

(2)完成以下操作:

1.如何找到用户主目录的绝对路径名?

在自己的系统上,用户主目录的绝对路径名是什么?

执行cd;

执行pwd;

即显示用户主目录的绝对路径名。

用户主目录的绝对路径名是”/home/username”2.将当前工作目录从/home/UVA转到/home/Tsinghua需要使用什么命令?

如何显示当前目录?

cd/home/Tsinghua或cd../Tsinghua3.如何在当前目录下建立子目录RoboCup?

mkdirRobcup4.如何删除子目录RoboCup?

rmdirRobcup5.如何查看当前目录下的内容?

ls6.如何将文件start.sh的权限设定为:

start.sh属于可读、可写、可执行?

可读:

chmodg+rrstart.sh可写:

chmodg+rwstart.sh可执行:

chmodg+rxstart.sh7.如何将当前目录包括所有子目录全部做备份文件,备份文件名为first.tar?

tarczvffirst.tardir18.如何将目录/home下每一个文件压缩成.gz文件?

tar-cvfstore.tardir19.如何把上例中每个压缩的文件解压,并列出详细的信息?

tarxvfstore.tarls-lg4.启动球队上场比赛

完成以下操作:

rcssserverrcsslogplayer在球队路径下:

./start.sh在本地启动第二个球队:

./start.shlocalhostaaa

实验二Demeer5基本动作1

(1)了解Demeer5的工作原理

4

(2)学会对Demeer5进行简单的修改2.实验设备

PC软件环境:

Linux3.实验内容

(1)Demeer5的工作原理:

Demeer5函数是整个球队的核心,它最终返回一个可以执行的动作,底层的模块负责将此动作发送给server,然后由server执行。

可以说,Demeer5就是我们想法的体现,是一支球队的大脑。

在Demeer5中有一系列的判断来决定每个周期的动作。

下面对Demeer5进行简要的分析.Demeer5()是一个决策函数,在策略上使用的是下面这个简单的策略:

如果球可踢,则用最大力量踢球;

如果球不可踢且我是队友中最快到球的队员,则去截球;

其他情况按战略点跑位。

我们现在只要看一下球可踢时的代码:

elseif(WM->

isBallKickable())//如果球可踢

{

//确定踢向的点

VecPositionposGoal(PITCH_LENGTH/2.0,-1+2*(WM->

getCurrentCycle()%2))*0.4*SS->

getGoalWidth());

//调用踢球的动作

soc=kickTo(posGoal,SS->

getBallSpeedMax());

//kickmaximal

//将动作放入命令队列中

ACT->

putCommandInQueue(soc);

//将脖子转向球

putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));

//记录调试信息

Log.log(100,"

kickball"

);

}

这一小段函数决定了当球在球员Agent的可踢范围之内时应当做的动作,这里是一个简单的把球向前踢而不考虑任何其他情况的方法。

该程序段的条理是很清晰的。

5

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

现在我们对Demeer5进行简单的修改,让它在球可踢的时候进行带球的动作。

带球就是kick和dash动作序列的结合。

带球的函数在BasicPlayer中,函数为dribble().它接收两个参数,第一个参数为带球的方向,第二个参数为带球的类型。

带球类型解释如下:

DRIBBLE_FAST:

快速带球;

DRIBBLE_SLOW:

慢速带球;

DRIBBLE_WITHBALL:

安全带球;

所以,对dribble的一种调用形式为:

dribble(ang,DRIBBLE_FAST)其中ang为AngDeg(是一个double)类型该函数的返回值是一个SoccerCommand类型。

知道了如何调用dribble,我们来对Demeer5进行替换:

isBallKickable()){AngDegang=0.0;

soc=dribble(ang,DRIBBLE_FAST);

//进行带球

//将动作放入命令队列中

ACT->

//将脖子转向球

//记录调试信息

Log.log(100,"

}这样,在球可踢的时候,球员智能体将把球带向前方,这里取的是0度角,即沿x轴一直向前快速带球。

我们再次对Demeer5函数进行修改,这次是让球员Agent将球踢向各个不同的地方。

这将调用kickTo()函数来完成。

下面简要说明一下kickTo()函数的使用方法:

这个函数有两个参数,第一个参数是目标点的坐标,第二个参数是球到达目标点是的速度,返回一个踢球的动作。

可以使用下面的形式来调用:

VecPositionpos(x,y);

doublespeed=1.0;

kickTo(pos,speed);

kickTo()函数在其内部将会决定踢球时所用力量的大小,并且会判断是否能够将球踢到该点,并作出相应的调整。

比如,将球一直踢向(0,0)点,1.0的末速度:

isBallKickable()){soc=kickTo(VecPosition(0,0),1.0);

6

(3)根据上述操作,完成以下踢球操作:

将球踢向对方的球门。

VecPositionpos=WM->

getPosOpponentGoal;

soc=kickTo(pos,1.0);

putCommandInQueue(soc);

putCommandInQueue(turnNeckToObject(OBJECT_BALL,soc));

将球踢向距离自己最近的队友。

ObjectTo=WM->

getClosestInSetTo(OBJECT_SET_TEAMMATES,posAgent);

soc=kickTo(WM->

getGlobalPosition(o),1.0);

尝试不同的踢球点。

(略)(4)根据上述内容,完成以下带球的操作:

用不同的带球模式进行带球,并观察效果,比较异同。

AngDegang=0.0;

soc=dribble(ang,DRIBBLE_SLOW);

将球向对方的球门方向带。

doubleang=(VecPosition(52.5,0)-posAgent).getDirection();

//求与球门间角度

soc=dribble(ang,DRIBBLE_SLOW);

尝试不同的带球组合。

(略)(5)根据上述内容,完成以下综合练习:

带球与踢球的结合:

让agent一直向对方球门的方向带球,在进入对方禁区后以最大力量踢向球

7

门(末速度最大为2.7)。

涉及到的具体函数请查看教材。

VecPositionposGoal(52.5,0);

if(WM->

isInTheirPenaltyArea(WM->

getBallPos()))//判断是否在对方禁区

soc=kickTo(posGoal,2.7);

}else{

doubleang=(posGoal-posAgent).getDirection();

soc=dribble(ang,DRIBBLE_FAST);

}ACT->

实验三Demeer5基本动作2

熟悉demeer5并学会demeer5的基本使用方法,具体内容如下:

(1)能理解UVA程序中原来的demeer5中的内容

(2)能通过修改demeer5中的具体函数内容实现对场上球员的控制(3)能通过底层动作的简单组合控制场上队员做出一些复杂动作2.实验设备:

硬件设备:

pc机软件设备:

(1)在球队程序中找到playerTeams.cpp;

(2)在player.cpp中找到demmer5函数;

(3)阅读此段程序,并结合Monitor观察球员的具体行为(你将发

现可以踢到球的球员会将球朝球门的方向踢去,而不能踢到球的

队员中如果是离球最近的队员就去截球,否者则按阵型跑位);

(4)修改demmer5函数改变队员的行为具体步骤如下:

①在demeer5函数中找到

8

if(WM->

isBallKickable())

//isBallKickable()函数用来判断球是否可踢

VecPositionposGoal(PITCH_LENGTH/2.0,(-1+2*(WM->

getCurrentCycle()%2))*0.4*SS->

//设定射门位置坐标

//朝球门方向将球以最大

力度踢出

//只有把命令放入命令队列动作才会执行

//做动作的同时改变脖子的方向

②『控球』将此函数修改为if(WM->

isBallKickable()){

soc=kickBallCloseToBody(45);

//45是踢球的方向

然后编译运行程序,观察球员的行为我们会发现当球可踢时,球员不再朝着球门的方向踢了,而是将球绕自己身体转动(uva的这个底层动作经常把球转丢!

)③『带球』将此函数修改为if(WM->

soc=dribble(0.0,DRIBBLE_SLOW);

//其中dribble函数中第一个参数表示带球的

方向-180~180之间,不一定是0.0

后编译运行程序,观察球员的行为我们会发现当球可踢时,球员不再朝着球门的方向踢了,而是朝我们指定的方向执行带球

9

④『传球』将此函数修改为if(WM->

soc=leadingPass(OBJECT_TEAMMATE_9,1);

//9是接球的人,1是指球与接球人

之间的距离

//其中leadingPass中第一个参数表示传球的对象,本实验中我们将球直接传给指定

号码(1~11)的球员,不一定是OBJECT_TEAMMATE_9

然后编译运行程序,观察球员的行为我们会发现当球可踢时,球员不再朝着球门的方向踢了,而是将球传给我们指定号码的队员。

⑤『配合』将此函数修改为if(WM->

isBallKickable()){if(WM->

getAgentObjectType()==OBJECT_TEAMMATE_9)

//带球

}else

//传球

}编译程序,观察球员行为,我们会发现,当9号队员得到球后会朝前方带球,其他队员得到球后会将球传给9号(不管9号是不是越位).(5)根据以上描述完成以下实验内容:

如果在对方禁区内就射门,否则,如果是7,8,9号队员就朝前带球,其他队员将球传给9号(用WM->

isInTheirPenaltyArea(WM->

getBallPos())来判断球是否在对方禁区)如果队员的位置在自己半场就将球朝对方球门踢去,否者就朝前方带球(用WM->

getBallPos().getX()来得到球的x坐标)当有人来抢球时(离自己很近),就将球传给离自己最近的队员,否则就自己带球(调用WM->

getClosestRelativeInSet函数来得到离自己最近的己方或对方球员,通过pos1.getDistanceTo(pos2)来得到两位置之间的距离)。

Circlecir(posAgent,2.0);

//定义这样一个圆形区域,以我为圆心,2.0为半径

10

intnum=WM->

getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir);

//判断2.0

范围内有多少人

if(num>

0){soc=leadingPass(WM->

getClosestRelativeInSet(OBJECT_SET_TEAMMATES),1);

}elseif(WM->

getBallPos().getX()>

0){if(WM->

getBallPos())){VecPositionposGoal(PITCH_LENGTH/2.0,(-1+2*(WM->

getCurrentCycle()%2))*0.4*SS->

soc=kickTo(posGoal,SS->

getAgentObjectType()==OBJECT_TEAMMATE_7||WM->

getAgentObjectType()==OBJECT_TEAMMATE_8||WM->

getAgentObjectType()==OBJECT_TEAMMATE_9){soc=dribble(0.0,DRIBBLE_SLOW);

}else{soc=leadingPass(OBJECT_TEAMMATE_9,1);

}}else{VecPositionpos=(PITCH_LENGTH/2.0,(-1+2*(WM->

getCurrentCycle()%2))*0.4*SS->

soc=kickTo(pos,SS->

}

//放入命令队列

11

实验四复杂的动作决策

进一步了解demeer5并能熟悉的修改demeer5的内容以达到对场上的球员的控制

(1)能理解UVA程序中原来的demeer5中的全部内容

(2)能通过修改demeer5中的具体函数内容实现对场上球员的控制(3)能通过底层动作的简单组合控制场上队员做出一些复杂动作决策(4)对WorldModel有初步的认识,学会在WorldModel,basicplayer里添加新函数2.实验设备

(1)在球队程序中找到player.c并打开;

(2)在player.c中找到demmer5函数;

(3)阅读此段程序,并结合monitor观察球员的具体行为(你将发

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1