机器人足球仿真实验报告

机器人足球仿真实验报告
机器人足球仿真实验报告

机器人足球仿真

班级:

姓名:

学号:

年月日

实验一机器人足球比赛编程预备知识

1.实验目的

掌握RoboCup仿真机器人足球比赛相关知识点,具体内容如下:

(1)Linux操作系统的熟悉及了解其基本操作。

(2)掌握Linux下如何进行C++编程,了解gcc编译器以及一些简单编辑工

具,如:vi、emacs、gedit、Anjuta、Kdevelope等。

(3)启动RoboCup仿真(2D)足球队的比赛。

2.实验设备

硬件环境:PC机

软件环境:操作系统linux

3.实验内容

(1)掌握Linux一些常用的命令

●文件或目录处理

格式:ls [-atFlgR][name]

第一项是一些语法加量。第二项是文件名。

常用的方法有:

ls 列出当前目录下的所有文件。

ls –a 列出包括以.开始的隐藏文件的所有文件名。

ls –t 依照文件最后修改时间的顺序列出文件名。

ls –F 列出当前目录下的文件名及其类型。以/结尾表示为目录名、以*结尾表示未可执行文件、以@结尾表示为符号连接。

ls –l 列出目录下所有文件的权限、所有者、文件大小、修改时间及名称。

ls –lg 同上,并显示出文件的所有者工作组名。

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

●改变工作目录

格式::cd [name]

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

常用的方法有:

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

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

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

cd ..改变目录位置至。

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

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

●复制文件

格式:cp [-r] 源地址目的地址

常用的方法有:

cp file1 file2 将文件file1 复制成file2

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

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

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

cp -r dir1 dir2 复制整个目录。

●移动或更改文件、目录名称

格式:mv 源地址目的地址

常用的方法有:

mv file1 file2 将文件file1更名为file2。

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

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

●建立新目录

格式:mkdir 目录名

删除目录

格式:rmdir [目录名|文件名]

常用的方法有:

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

●列出当前所在的目录位置

格式:pwd

●查看文件内容

格式:cat 文件名

●文件权限的设定

格式:chmod [-R] mode name

name:文件名或目录名。

mode:3个或8个数字或rwx的组合。r-read(读权限)、w-write(写权限)、x-execute(执行)

常用的方法有:

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

●文件的打包和解压缩

格式:tar [option] [file] gzip[option] [file]

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

option主要有:

-c —创建一个新归档。

-f —当与-c 选项一起使用时,创建的tar 文件使用该选项指定的文件名;当与-x 选项一起使用时,则解除该选项指定的归档。

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

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

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

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

如使用:tar -cvf filename.tar /home/mine/work /home/mine/school

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

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

(2)完成以下操作:

1.如何找到用户主目录的绝对路径名?在自己的系统上,用户主目录的绝对路径名是什么? 执行cd;执行pwd;即显示用户主目录的绝对路径名。

用户主目录的绝对路径名是”/home/username”

2.将当前工作目录从/home/UV A 转到/home/Tsinghua 需要使用什么命令?

如何显示当前目录?

cd /home/Tsinghua或cd ../Tsinghua

3.如何在当前目录下建立子目录RoboCup?

mkdir Robcup

4.如何删除子目录RoboCup?

rmdir Robcup

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

ls

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

可读:chmod g+rr start.sh

可写:chmod g+rw start.sh

可执行:chmod g+rx start.sh

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

tar czvf first.tar dir1

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

tar -cvf store.tar dir1

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

tar xvf store.tar

ls -lg

4.启动球队上场比赛

完成以下操作:

rcssserver

rcsslogplayer

在球队路径下:

./start.sh

在本地启动第二个球队:

./start.sh localhost aaa

实验二Demeer5基本动作1

1.实验目的

(1)了解Demeer5的工作原理

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

2.实验设备

硬件环境:PC

软件环境:Linux

3.实验内容

(1)Demeer5的工作原理:

Demeer5函数是整个球队的核心,它最终返回一个可以执行的动作,底层的模块负责将此动作发送给server,然后由server执行。可以说,Demeer5就是我们想法的体现,是一支球队的大脑。在Demeer5中有一系列的判断来决定每个周期的动作。下面对Demeer5进行简要的分析.

Demeer5()是一个决策函数,在策略上使用的是下面这个简单的策略:

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

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

其他情况按战略点跑位。

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

else if( WM->isBallKickable()) // 如果球可踢

{

//确定踢向的点

VecPosition posGoal( PITCH_LENGTH/2.0,

-1+2*(WM->getCurrentCycle()%2))* 0.4 * SS->getGoalWidth() );

//调用踢球的动作

soc = kickTo( posGoal, SS->getBallSpeedMax() ); // kick maximal

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

ACT->putCommandInQueue( soc );

//将脖子转向球

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

//记录调试信息

Log.log( 100, "kick ball" );

}

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

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

现在我们对Demeer5进行简单的修改,让它在球可踢的时候进行带球的动作。带球就是kick和dash动作序列的结合。带球的函数在BasicPlayer中,函数为dribble().它接收两个参数,第一个参数为带球的方向,第二个参数为带球的类型。

带球类型解释如下:

DRIBBLE_FAST:快速带球;

DRIBBLE_SLOW:慢速带球;

DRIBBLE_WITHBALL:安全带球;

所以,对dribble的一种调用形式为:dribble(ang,DRIBBLE_FAST )

其中ang为AngDeg(是一个double)类型

该函数的返回值是一个SoccerCommand类型。

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

else if( WM->isBallKickable())

{

AngDeg ang = 0.0;

soc = dribble(ang,DRIBBLE_FAST ); // 进行带球

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

ACT->putCommandInQueue( soc );

//将脖子转向球

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

//记录调试信息

Log.log( 100, "kick ball" );

}

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

我们再次对Demeer5函数进行修改,这次是让球员Agent将球踢向各个不同的地方。这将调用kickTo()函数来完成。下面简要说明一下kickTo()函数的使用方法:这个函数有两个参数,第一个参数是目标点的坐标,第二个参数是球到达目标点是的速度,返回一个踢球的动作。可以使用下面的形式来调用:VecPosition pos( x, y );

double speed = 1.0;

kickTo( pos , speed );

kickTo()函数在其内部将会决定踢球时所用力量的大小,并且会判断是否能够将球踢到该点,并作出相应的调整。比如,将球一直踢向(0,0)点, 1.0的末速度:

else if( WM->isBallKickable())

{

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

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

ACT->putCommandInQueue( soc );

//将脖子转向球

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

//记录调试信息

Log.log( 100, "kick ball" );

}

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

将球踢向对方的球门。

VecPosition pos=WM->getPosOpponentGoal;

soc=kickTo( pos,1.0 );

ACT->putCommandInQueue ( soc );

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

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

ObjectT o=WM->getClosestInSetTo( OBJECT_SET_TEAMMATES,posAgent);

soc=kickTo( WM->getGlobalPosition( o ) ,1.0 );

ACT->putCommandInQueue ( soc );

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

尝试不同的踢球点。

(略)

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

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

AngDeg ang = 0.0;

soc = dribble(ang,DRIBBLE_SLOW);

ACT->putCommandInQueue( soc );

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

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

double ang=( VecPosition(52.5,0)-posAgent).getDirection();//求与球门间角度

soc=dribble( ang,DRIBBLE_SLOW );

ACT->putCommandInQueue( soc );

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

尝试不同的带球组合。

(略)

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

带球与踢球的结合:

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

门( 末速度最大为2.7 )。涉及到的具体函数请查看教材。

VecPosition posGoal ( 52.5 , 0 );

if ( WM->isInTheirPenaltyArea ( WM->getBallPos() ) ) //判断是否在对方禁区

{

soc=kickTo ( posGoal , 2.7 );

}

else

{

double ang=( posGoal - posAgent ).getDirection();//求与球门间角度

soc=dribble( ang,DRIBBLE_FAST );

}

ACT->putCommandInQueue( soc );

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

实验三Demeer5基本动作2

1.实验目的

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

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

(2)能通过修改demeer5中的具体函数内容实现对场上球员的控制

(3)能通过底层动作的简单组合控制场上队员做出一些复杂动作

2.实验设备:

硬件设备:pc机

软件设备:操作系统linux

3.实验内容

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

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

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

现可以踢到球的球员会将球朝球门的方向踢去,而不能踢到球的队员中如果是离球最近的队员就去截球,否者则按阵型跑位);

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

①在demeer5函数中找到

if( WM->isBallKickable())

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

{

VecPosition posGoal( PITCH_LENGTH/2.0,

(-1 + 2*(WM->getCurrentCycle()%2)) * 0.4 * SS->getGoalWidth() );

//设定射门位置坐标

soc = kickTo( posGoal, SS->getBallSpeedMax() ); // 朝球门方向将球以最大力度踢出

ACT->putCommandInQueue( soc ); //只有把命令放入命令队列动作才会执行

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

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

}

②『控球』将此函数修改为

if( WM->isBallKickable())

{

soc = kickBallCloseToBody(45);//45是踢球的方向

ACT->putCommandInQueue( soc );

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

}

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

③『带球』将此函数修改为

if( WM->isBallKickable())

{

soc = dribble(0.0,DRIBBLE_SLOW);//其中dribble函数中第一个参数表示带球的方向-180~180之间,不一定是0.0

ACT->putCommandInQueue( soc );

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

}

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

④『传球』将此函数修改为

if( WM->isBallKickable())

{

soc = leadingPass(OBJECT_TEAMMATE_9,1);//9是接球的人,1是指球与接球人之间的距离

//其中leadingPass中第一个参数表示传球的对象,本实验中我们将球直接传给指定号码(1~11)的球员,不一定是OBJECT_TEAMMATE_9

ACT->putCommandInQueue( soc );

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

}

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

⑤『配合』将此函数修改为

if( WM->isBallKickable())

{

if(WM->getAgentObjectType()==OBJECT_TEAMMATE_9)

soc = dribble(0.0,DRIBBLE_SLOW); //带球

}

else

soc = leadingPass(OBJECT_TEAMMATE_9,1); //传球

ACT->putCommandInQueue( soc );

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

}

编译程序,观察球员行为,我们会发现,当9号队员得到球后会朝前方带球,其他队员得到球后会将球传给9号(不管9号是不是越位).

(5)根据以上描述完成以下实验内容:

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

如果队员的位置在自己半场就将球朝对方球门踢去,否者就朝前方带球(用WM->getBallPos().getX()来得到球的x坐标)

当有人来抢球时(离自己很近),就将球传给离自己最近的队员,否则就自己带球(调用WM->getClosestRelativeInSet函数来得到离自己最近的己方或对方球员,通过pos1.getDistanceTo(pos2)来得到两位置之间的距离)。

Circle cir ( posAgent,2.0 ); //定义这样一个圆形区域,以我为圆心,2.0为半径

int num=WM->getNrInSetInCircle ( OBJECT_SET_OPPONENTS,cir ); //判断2.0范围内有多少人

if ( num>0 )

{

soc=leadingPass(WM->getClosestRelativeInSet(OBJECT_SET_TEAMMATES) ,1);

}

else if ( WM->getBallPos().getX() >0 )

{

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

{

VecPositionposGoal ( PITCH_LENGTH/2.0,

( -1+2* ( WM->getCurrentCycle() %2 ) ) *0.4*SS->getGoalWidth() );

soc=kickTo ( posGoal,SS->getBallSpeedMax() );

}

else if ( WM->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

{

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 ) );

实验四复杂的动作决策

1.实验目的

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

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

(2)能通过修改demeer5中的具体函数内容实现对场上球员的控制

(3)能通过底层动作的简单组合控制场上队员做出一些复杂动作决策

(4)对WorldModel有初步的认识,学会在WorldModel,basicplayer里添加新函

2.实验设备

硬件环境:PC

软件环境:操作系统linux

3.实验内容

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

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

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

现可以踢到球的球员会将球朝球门的方向踢去,而不能踢到球的队员中如果是离球最近的队员就去截球,否者则按阵型跑位);

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

①在demeer5函数中找到

else if( WM->getFastestInSetTo( OBJECT_SET_TEAMMATES, OBJECT_BALL, &iTmp )` == WM->getAgentObjectType() && !WM->isDeadBallThem() )

{ // 如果是最快到达球的队员Log.log( 100, "I am fastest to ball; can get there in %d cycles", iTmp );

soc = intercept( false ); // 截球

if( https://www.360docs.net/doc/5f2037033.html,mandType == CMD_DASH && // 当体力低时

WM->getAgentStamina().getStamina() <

SS->getRecoverDecThr()*SS->getStaminaMax()+200 )

{

soc.dPower = 30.0 * WM->getAgentStamina().getRecovery(); // 慢速移动

ACT->putCommandInQueue( soc );

ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) ); //脖子转向球

}

else // 当体力高时

{

ACT->putCommandInQueue( soc ); //正常移动速度

ACT->putCommandInQueue( turnNeckToObject( OBJECT_BALL, soc ) );//脖子转向球

}

}

此函数的内容是,当球不可踢时,如果是离球最近的队员就执行截球命令(截球函数intercept()在BasicPlayer.c中定义)观察在队员体力值小于多少时,带球速度会变慢。

②现在我们来通过修改函数,来改变非持球队员的决策,在以上函数之前加上此段代码:

else if(WM->getAgentObjectType()==OBJECT_TEAMMATE_9) //如果是9号队员{

soc = SoccerCommand(CMD_TURN,60); //转身体

ACT->putCommandInQueue( soc );

ACT->putCommandInQueue( alignNeckWithBody( ) ); //脖子随着身体一起转动

}

然后编译运行程序,观察球员的行为我们会发现当9号不持球时,身体在一直的转动(此动作可用来找球)

(5)在WorldMoled里填加状态函数

①.打开WorldModel.h,在里面预定义函数,即写入

bool isOpponentAtAngleEx( AngDeg angA , AngDeg angB ,double dDist );

该函数用来判断当前球员角度在angA~angB之间距离小于dDist的范围内是

否有对方队员。

②.找到并打开WorldModel.c在里面填加一个新函数

bool WorldModel::isOpponentAtAngleEx( AngDeg angA , AngDeg angB ,double dDist )

{

VecPosition posAgent = getAgentGlobalPosition();

VecPosition posOpp;

AngDeg angOpp;

int iIndex;

for( ObjectT o = iterateObjectStart( iIndex, OBJECT_SET_OPPONENTS );

o != OBJECT_ILLEGAL;

o = iterateObjectNext ( iIndex, OBJECT_SET_OPPONENTS ) ) {

posOpp = getGlobalPosition( o );

angOpp = ( posOpp - posAgent ).getDirection() ;

if( angA<=angOpp && angOpp <=angB && posAgent.getDistanceTo( posOpp ) < dDist )

return true;

}

iterateObjectDone( iIndex );

return false;

}

③.将if( WM->isBallKickable())内的内容改为:

if( WM->isBallKickable())

{

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

if ( WM->isOpponentAtAngleEx(ang-45, ang, 6) )

ang+=45;

else if ( WM->isOpponentAtAngleEx(ang,ang+45,6) )

ang-=45;

SoccerCommand soc = dribble ( ang , DRIBBLE_SLOW );

ACT->putCommandInQueue( soc );

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

}

然后编译运行程序,观察球员的行为,试分析球员的行为

(6)根据以上描述完成练习:通过基本动作的组合实现球员的以下

行为

判断守门员的位置,朝球门空隙较大的一方射门,(通过在WorldModel里

建立新状态来判断,球门哪一方空隙较大,守门员的位置为VecPosition posGoalie = WM->getGlobalPosition(WM->getOppGoalieType());球门位置坐标

为(52.5,0),可尝试朝(52.5,6.5)(52.5,-6.5)两点射门)

VecPosition vec=WM->getGlobalPosition(WM->getOppGoalieType());

if(vec.getY()>0)

{

VecPosition pos=(52.2,-6.5);

soc=kickTo(pos,SS->getBallSpeedMax());

}

else

{

VecPosition pos1=(52.5,6.5);

soc=kickTo(pos1,SS->getBallSpeedMax());

}

ACT->putCommandInQueue( soc );

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

在BasicPlay里填加一个带球函数,要求如果无人阻挡(带球将要经过的路

线附近没有对方球员)就朝球门方向带球,否则想办法避开对方球员带球前进

(要求只要作出闪避的动作即可,不要求效果)。

打开WorldModel.h,在里面预定义函数,即写入

bool isOpponentAtAngleEx( AngDeg angA , AngDeg angB ,double dDist );

该函数用来判断当前球员角度在angA~angB之间距离小于dDist的范围内是

否有对方队员。

找到并打开WorldModel.c在里面添加一个新函数:

bool WorldModel::isOpponentAtAngleEx( AngDeg angA , AngDeg angB ,double dDist )

{

VecPosition posAgent = getAgentGlobalPosition();

VecPosition posOpp;

AngDeg angOpp;

int iIndex;

for( ObjectT o = iterateObjectStart( iIndex, OBJECT_SET_OPPONENTS );

o != OBJECT_ILLEGAL;

o = iterateObjectNext ( iIndex, OBJECT_SET_OPPONENTS ) )

{

posOpp = getGlobalPosition( o );

angOpp = ( posOpp - posAgent ).getDirection() ;

if( angA<=angOpp && angOpp <=angB && posAgent.getDistanceTo( posOpp ) < dDist )

return true;

}

iterateObjectDone( iIndex );

return false;

}

在playerteams.cpp中添加

else if( WM->isBallKickable())

{

Circle cir(posAgent,2.5);

int num=WM->getNrInSetInCircle(OBJECT_SET_OPPONENTS,cir);

if(num<2)

{

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

if ( WM->isOpponentAtAngleEx(ang-45, ang, 6) )

ang+=45;

else if ( WM->isOpponentAtAngleEx(ang,ang+45,6) )

ang-=45;

SoccerCommand soc = dribble ( ang , DRIBBLE_SLOW );

}

else

{

soc=dribble(0.0,DRIBBLE_FAST);

}

ACT->putCommandInQueue( soc );

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

}

尝试修改视觉函数使得球员能更多的获得场上信息(要求不影响球员的动作)。

先在Basicplayer.h中函数声明

SoccerCommand view1122333 (SoccerCommand soc );

在Basicplayer.cpp中view1122333 (SoccerCommand soc )函数定义如下:

/*将视觉分成1122333的视觉模式(“1”代表60度,“2”代表120,“3”代表180)*/

SoccerCommand BasicPlayer::view1122333(SoccerCommand soc)

{

//7 -->共分成7份

VecPosition posAgent = WM->getAgentGlobalPosition();

AngDeg angBody = WM->getAgentGlobalBodyAngle();

AngDeg angTurn=30;

switch( WM->getCurrentCycle()%7 )

{

case 0:

angTurn -= 60;

case 1:

ACT->putCommandInQueue(SoccerCommand(CMD_CHANGEVIEW, VA_NARROW, VQ_HIGH));

ACT->putCommandInQueue(turnNeckToPoint(posAgent+VecPosition(

5, VecPosition::normalizeAngle(angBody+angTurn), POLAR), soc));

break;

case 2:

case 3:

ACT->putCommandInQueue(SoccerCommand(CMD_CHANGEVIEW, VA_NORMAL, VQ_HIGH));

ACT->putCommandInQueue(turnNeckToPoint(posAgent+VecPosition(5, angBody, POLAR), soc));

break;

case 4:

case 5:

case 6:

ACT->putCommandInQueue(SoccerCommand(CMD_CHANGEVIEW, VA_WIDE, VQ_HIGH));

break;

default:;

}

}

再在playerTeams.cpp球可踢的条件下增加

ACT->putCommandInQueue(view1122333(soc));

就可看到明显的视觉变化。

实验五特殊比赛模式的设计

1.实验目的

掌握Robocup仿真机器人足球比赛中特殊比赛模式发生的条件;

掌握Robocup仿真机器人足球比赛特殊比赛模式的规则要求;

了解Robocup仿真机器人足球比赛特殊比赛模式的战术设计思想;

进一步熟悉WorldModel类。

2.实验设备

硬件环境:PC机

软件环境:操作系统Linux

3.实验内容

(1)概述

Robocup仿真机器人足球比赛特殊比赛模式包括角球(corner_kick)、界外球(kick_in)、定位球/任意球(free_kick)以及球门球(goal_kick)。

(2)角球(corner_kick)

当防守方球员将球踢出底线时,由进攻方开角球。Server一旦接收到发球队员发出的kick命令后,就将比赛模式设为正常的play_on模式。注意,和国际足联的规则类似,发球队员在其他球员接触球之前不能再触球,否则判犯规。此时,另一方球员须在一定时间(根据Manual的规定为300周期)内将球开出,否则算发球失误,由对方发定位球。

在UV A_trilearn的原代码中,球员是不管这些特殊比赛模式的,统统是最近的球员跑向球,一脚踢向球门。这就需要我们手工编码完成这些细节地方。一种简单的设计思路是:(1)如果比赛进入角球模式,则离球最近的球员A跑向球,而次近的球员B跑到某个接应点,等待A将球传过来;(2)A跑到球跟前(即进入可踢范围)时,不必立即将球开出,可以先看看场上环境,等B跑到预定位置并且体力恢复得差不多时再开球。

以上设计思路同学们在实验过程中只须完成(1)即可,对于学有余力的同学可以考虑(2)的实现。下面列出几个可能用到的函数:

PlayModeT WorldModel::getPlayMode() const返回比赛模式(或者直接用bool WorldModel::isCornerKickUs() 判断是不是我方开角球);

ObjectT WorldModel::getClosestInSetTo(ObjectSetT objectSet, ObjectT o, double *dDist=NULL, double dConfThr=-1.0) 返回在对象集合objectSet中距离对象o最近的对象,只有当对象的可信度高于给定的阈值才被考虑,如果没有给出阈值则使用PlayerSettings中定义的阈值,同时dDist返回距离;

ObjectT WorldModel::getSecondClosestInSetTo(ObjextSetT objectSet, ObjectT o, double *dDist=NULL, double dConfThr=-1.0) 返回在对象集合objectSet中距离对象o次近的对象,只有当对象的可信度高于给定的阈值才被考虑,如果没有给出阈值则使用PlayerSettings中定义的阈值,同时dDist返回距离。

下面具体描述一下实现过程:

首先,我们知道demeer5()主要是围绕三句话展开的,即(1)如果球可踢,则用最大力量踢球;(2)如果球不可踢且我是队友中最快到球的队员,则去截球;(3)其他情况按战略点跑位。我们可以围绕这三句话来实现角球策略。即在角球模式下(1)如果球可踢,则传球给接应球员;(2)如果球不可踢且我是队友中最快到球的队员,则去发球;(3)其他情况下,如果我是离球次近的队员,那么我去接应。

接着,有了这个基本思想后,我们开始编写代码。在demeer5() 中找到

Else if ( WM->isBallKickable() ){ // if kickable

在里面加入我们的角球代码:

If ( WM-> isCornerKickUs() ){

ACT->putCommandInQueue(kickTo(pointToKickTo(),SS->getBallSpeedMax()* 0.8 ));

}

这一部分代码是完成开球动作。函数pointToKickTo()是Player类的成员函数,返回一个VecPosition类型的参数,代表要将球踢向的坐标。下面给出一段参考代码:

VecPosition Player::pointToKickTo(){

VecPosition pos,temp;

double x,y;

pos=WM->getBallPos();

x=pos.getX();

y=pos.getY();

temp.setX(-x/fabs(x)*5+x);

temp.setY(-y/fabs(y)*12+y);

return temp;

}

再在demeer5()中找到

else if( posAgent.getDistanceTo(WM->getStrategicPosition()) >1.5 + fabs( posAgent.getX() - posBall.getX() ) / 10.0) // if not near strategic pos

在里面加入如下代码:

if ( WM-> isCornerKickUs() ) {

ObjectT o;

SoccerCommand sctemp;

o = WM->getSecondClosestInSetTo(OBJECT_SET_TEAMMATES, OBJECT_BALL);

if ( o = WM->getAgentObjectType() ){

sctemp = ACT->putCommandInQueue( moveToPos( pointToKickTo(), PS->getPlayWhenToTurnAngle() );

}

ACT = putCommandInQueue( turnNeckToObject( OBJECT_BALL, sctemp ));

}

这段代码是实现接应球员的跑位。

这样,一个简单的角球策略就实现了。同学们可以编译运行看看效果。(3)界外球(kick_in)

当一方球员将球踢出边线时,比赛即进入界外球模式。

比赛的规则要求基本同角球。

简单的设计思路和实验内容与角球也差不多,在此不再赘述。

要求同学们编写一段程序实现界外球策略,要求能够根据发球点的位置给出合适的接应球员的接应位置。

可能用到的函数:

bool WorldModel::isKickInUs() 返回是否是我方开界外球。

if(WM->isKickInUs())//我方界外球

{

if(WM->getAgentObjectType()==OBJECT_TEAMMATE_11)

仿真实验报告

上海电力学院 本科课程设计 电路计算机辅助设计 院系:电力工程学院 专业年级(班级):电力工程与管理2011192 班 学生姓名:学号: 201129 指导教师:杨尔滨、杨欢红 成绩: 2013年07 月 06 日教师评语:

目录仿真实验一 仿真实验二仿真实验三仿真实验四仿真实验五仿真实验六仿真实验七仿真实验八仿真实验九节点电压法分析直流稳态电路..........................1 戴维宁定理的仿真设计................................5 叠加定理的验证.. (8) 正弦交流电路——谐振电路的仿真......................11 两表法测量三相电路的功率............................14 含受控源的RL 电路响应的研究........................18含有耦合互感的电路的仿真实验........................21 二阶电路零输入响应的三种状态轨迹....................27 二端口电路的设计与分析 (32)

实验一节点电压法分析电路 一、电路课程设计目的 ( 1)通过较简易的电路设计初步接触熟悉Multisim11.0 。 (2)学会用 Multisim11.0 获取某电路元件的某个参数。 (3)通过仿真实验加深对节点分析法的理解及应用。 二、实验原理及实例 节点分析法是在电路中任意选择一个节点为非独立节点,称此节点为参考点。其它独立节点与参考点之间的电压,称为该节点的节点电压。 节点分析法是以节点电压为求解电路的未知量,利用基尔霍夫电流定律和欧姆定律导出(n – 1)个独立节点电压为未知量的方程,联立求解,得出各节点电压。然后进一步求出 各待求量。 下图所示是具有三个节点的电路,下面以该图为例说明用节点分析法进行的电路分析方 法和求解步骤,导出节点电压方程式的一般形式。 图1— 1 首先选择节点③为参考节点,则u3 = 0 。设节点①的电压为u1、节点②的电压为u2,各支 路电流及参考方向见图中的标示。应用基尔霍夫电流定律,对节点①、节点②分别列出节点电 流方程: 节点①i S1i S2i1i 20 节点②i S2i S 3i 2i30 用节点电压表示支路电流: u1 i1G1u1 R 1 u1u2 i 2R G 2(u1u2 ) 2 u2 i3G 3u2 R 3

Matlab通信系统仿真实验报告

Matlab通信原理仿真 学号: 2142402 姓名:圣斌

实验一Matlab 基本语法与信号系统分析 一、实验目的: 1、掌握MATLAB的基本绘图方法; 2、实现绘制复指数信号的时域波形。 二、实验设备与软件环境: 1、实验设备:计算机 2、软件环境:MATLAB R2009a 三、实验内容: 1、MATLAB为用户提供了结果可视化功能,只要在命令行窗口输入相应的命令,结果就会用图形直接表示出来。 MATLAB程序如下: x = -pi::pi; y1 = sin(x); y2 = cos(x); %准备绘图数据 figure(1); %打开图形窗口 subplot(2,1,1); %确定第一幅图绘图窗口 plot(x,y1); %以x,y1绘图 title('plot(x,y1)'); %为第一幅图取名为’plot(x,y1)’ grid on; %为第一幅图绘制网格线 subplot(2,1,2) %确定第二幅图绘图窗口 plot(x,y2); %以x,y2绘图 xlabel('time'),ylabel('y') %第二幅图横坐标为’time’,纵坐标为’y’运行结果如下图: 2、上例中的图形使用的是默认的颜色和线型,MATLAB中提供了多种颜色和线型,并且可以绘制出脉冲图、误差条形图等多种形式图: MATLAB程序如下: x=-pi:.1:pi; y1=sin (x); y2=cos (x); figure (1); %subplot (2,1,1); plot (x,y1); title ('plot (x,y1)'); grid on %subplot (2,1,2); plot (x,y2);

机器人实验报告

智能机器人实验报告1 学院:化学与材料科学学院 学号: 2015100749 姓名:朱巧妤 评阅人:评阅时间:

实验1 电驱动与控制实验 (一)实验目的 熟悉和掌握机器人开发环境使用,超声传感器、碰撞传感器、温度传感器、颜色传感器等常见机器人传感器工作原理与使用方法,熟悉机器人平台使用与搭建;设计一个简单的机器人,并采用多种程序设计方法使它能动起来。 (二)仪器工具及材料 计算机、机器人实验系统、机器人软件开发平台、编程下载器等设备。 (三)内容及程序 实验内容: (1)碰撞传感器原理与应用; (2)颜色传感器原理与应用; (3)测距传感器原理与应用; (4)温度传感器原理与应用; (5)熟悉开发环境使用与操作;设计一个简单轮式移动机器人,并使用图形化编程方式实现对机器人的控制,通过该设计掌握机器人开发平台的结构设计、程序设计等基本方法。 实验步骤: 1)首先确定本次要做的机器人为货架物品颜色辨别的机器人。 2)根据模型将梁、轴、插销、螺丝等零件拼装成一个货架台 3)将货架台安装上可识别颜色的摄像头,并装在控制器上方,将两个摄像头的连接线分 别插入控制器的传感器接口,将显示器连接线插入传感器接口。 4)拼装完成后将控制器连接电脑,在电脑上运用Innobot软件对机器人进行颜色识别动 作的编程,拖动颜色传感器模块,对应选择数码管接口以及两个摄像头的接口,使机器人能将货架台上物品的颜色反应到数码管上。 5)将所编程序进行上传。测试看机器人是否能将颜色反映到显示器上完成所编动作。

(四)结果及分析 使用梁和轴以及螺钉拼装出货架台。 将拼装好的货架台装到传感器上。

Multisim实验心得

现代电路实验心得 Multisum是一款完整的设计工具系统,提供了一个非常大的呢原件数据库,并提供原理图输入接口﹑全部的数模Spice仿真功能﹑VHDL/Verilog设计接口于仿真、FPGA/CPLD 综合、EF设计能力和后处理功能,还可以进行从原理图到PCB布线工具包的无缝隙数据传输。它提供的单一易用的图形输入接口可以满足用户的设计需求。Multisim提供全部先进的设计功能,满足用户从参数到产品的设计要求。因为程序将原理图输入、仿真和可编程逻辑紧密集成,用户可以放心地进行设计工作,不必顾及不同供应商的应用程序之间传递数据时经常出现的问题。 本学期在现代电路课程实验中,在老师的指导下对Multisim进行了初步的学习与认识,由对此款软件的一无所知,到渐渐熟悉,感到莫大欢喜。本学期的学习也只是对Multisim 此款仿真软件的初步认识与学习。在初步学习与认识的过程中,深深了解到Multisun此款仿真软件是一款完整的设计工具,今后一定会在实训中将此款软件学习的更好,应用的更好。 本学期的上机实验中,主要应用了Multisim此款软件的模电与数电的电路仿真,下面将从本学期的上机实验中总结本学期对Multisim此款仿真软件的学习心得。 数电部分实验: 实验中通过阅读实验指导用书,及在老师的指导下,从打开Multisum软件、建立文件、放置元器件、对元器件参数的修改编辑,按照实验原理图在Multisim软件界面建立了第一个电路图,函数信号发生器实验原理图。并在原理图上添加了示波器(如下图)。 通过对示波器参数的设置与调整,仿真运行后得到了如图中所示波形。 通过观察,与实验理论现象完全一致。 信号源为正弦波,幅值为5V时 并通过调节信号源的参数观察实验现象得到了该电路的各性能参数如下图:

仿真实验报告

实验报告 李文海 2014141223024 实验目的: 1)熟悉和掌握实现常用信号的产生方法;; 2)理解系统的单位冲激响应的概念,LTI 系统的卷积表达式及其物理意义,卷积的计算方法; 3)理解典型信号的频谱特征; 4)理解系统的频率响应的概念及其物理意义,理解具有不同频率响应特性的滤波器对信号的滤波作用; 5)学会利用编程实现卷积以求解系统响应,并绘制相应曲线; 6)学会利用编程实现一些典型信号的频谱分析,并绘制相应曲线。 实验内容: 1) 编程产生以下三个正弦信号,并画出波形图。 1122312[]cos(2), []cos(2), [][] +[], x n f n x n f n x n x n x n ππ=== 其中f1=1/8,f2=5/8; 用matlab 编程如下: n= [0:15]; x1=cos(2*pi*0.125*n); x2=cos(2*pi*0.625*n); x3=x1+x2; figure(1); subplot(3,1,1); stem(n,x1); subplot(3,1,2); stem(n,x2); subplot(3,1,3); stem(n,x3); 运行结果:(由上到下依次是x1,x2,x3)

2)编程计算下面卷积: 已知h1[n]={0.0031,0.0044, -0.0031, -0.0272,-0.0346,0.0374, 0.1921, 0.3279 0.3279,0.1921,0.0374,-0.0346,-0.0272,-0.0031, 0.0044,0.0031 },n=0,1, (15) a、当h [n]=h1[n]时,输入分别为x1[n], x2[n]和x3[n]时系统的输出y[n],并画出 波形图。 Matlab编程如下: h1=[ 0.0031 0.0044 -0.0031 -0.0272 -0.0346 0.0374 0.1921 0.3279 0.3279 0.1921 0.0374 -0.0346 -0.0272 -0.0031 0.0044 0.0031]; h2=[-0.0238 0.0562 -0.0575 -0.1302 0.5252 -0.6842 -0.3129 5.6197 5.6197 -0.3129 0.6842 0.5252 -0.1302 -0.0575 0.0562 -0.0238]; n1=[0:30]; y11=conv(x1,h1); y12=conv(x2,h1); y13=conv(x3,h1); figure(2); subplot(3,1,1); stem(n1,y11); subplot(3,1,2); stem(n1,y12); subplot(3,1,3); stem(n1,y13); 运行结果:

机器人实验报告

一、机器人的定义 美国机器人协会(RIA)的定义: 机器人是一种用于移动各种材料、零件、工具或专用的装置,通过可编程序动作来执行种种任务的、并具有编程能力的多功能机械手。 日本工业机器人协会(JIRA—Japanese Industrial Robot Association):一种带有存储器件和末端执行器的通用机械,它能够通过自动化的动作替代人类劳动。(An all—purpose machine equipped with a memory device and an end—effector,and capable of rotation and of replacing human labor by automatic performance of movements.) 世界标准化组织(ISO):机器人是一种能够通过编程和自动控制来执行诸如作业或移动等任务的机器。(A robot is a machine which can be programmed to perform some tasks which involve manipulative or locomotive actions under automatic control.) 中国(原机械工业部):工业机器人是一种能自动定位控制、可重复编程、多功能多自由度的操作机,它能搬运材料、零件或夹持工具,用以完成各种作业。 二、机器人定义的本质: 首先,机器人是机器而不是人,它是人类制造的替代人类从事某种作业的工具,它能是人的某些功能的延伸。在某些方面,机器人可具有超越人类的能力,但从本质上说机器人永远不可能全面超越人类。

Multisim实验报告

实验一单级放大电路 一、实验目的 1、熟悉multisim软件的使用方法 2、掌握放大器静态工作点的仿真方法及其对放大器性能的影响 3、学习放大器静态工作点、放大电压倍数、输入电阻、输出电阻的仿真方法,了解共射极 电路的特性 二、虚拟实验仪器及器材 双踪示波器、信号发生器、交流毫伏表、数字万用表 三、实验步骤 4、静态数据仿真 电路图如下:

当滑动变阻器阻值为最大值的10%时,万用表示数为。 仿真得到三处节点电压如下: 则记录数据,填入下表: 仿真数据(对地数据)单位:V 计算数据 单位:V 基极V (3) 集电极V (6) 发射级V (7) Vbe Vce Rp 10K Ω 5、 动态仿真一 R151kΩ R2 5.1kΩR3 R5 100kΩ Key=A 10 % V110mVrms 1000 Hz 0° V212 V C110μF C210μF C347μF 2Q1 2N2222A 3 R7100Ω8 1 XSC1 A B Ext Trig + + _ _ + _ 746R61.5kΩ 5

(1)单击仪器表工具栏中的第四个(即示波器Oscilloscope),放置如图所示,并且连接电路。 (注意:示波器分为两个通道,每个通道有+和-,连接时只需要连接+即可,示波器默认的地已经接好。观察波形图时会出现不知道哪个波形是哪个通道的,解决方法是更改连接的导线颜色,即:右键单击导线,弹出,单击wire color,可以更改颜色,同时示波器中波形颜色也随之改变) (2)右键V1,出现properties,单击,出现 对话框,把voltage的数据改为10mV,Frequency的数据改为1KHz,确定。 (3)单击工具栏中运行按钮,便可以进行数据仿真。 (4) A B Ext Trig + + _ _+_

仿真实验报告

大学物理仿真实验报告一一塞曼效应 一、实验简介 塞曼效应是物理学史上一个著名的实验。荷兰物理学家塞曼(Zeeman)在1896年发现把产生光谱的光源置于足够强的磁场中,磁场作用于发光体,使光谱发生变化,一条谱线即会分裂成几条偏振化的谱线,这种现象称为塞曼效应。 塞曼效应是法拉第磁致旋光效应之后发现的又一个磁光效应。这个现象的发现是对光的 电磁理论的有力支持,证实了原子具有磁矩和空间取向量子化,使人们对物质光谱、原子、分子有更多了解。 塞曼效应另一引人注目的发现是由谱线的变化来确定离子的荷质比的大小、符号。根据 洛仑兹(H.A?Lorentz)的电子论,测得光谱的波长,谱线的增宽及外加磁场强度,即可称得离子的荷质比。由塞曼效应和洛仑兹的电子论计算得到的这个结果极为重要,因为它发表在J、 J汤姆逊(J、J ThomSOn)宣布电子发现之前几个月,J、J汤姆逊正是借助于塞曼效应由洛仑 兹的理论算得的荷质比,与他自己所测得的阴极射线的荷质比进行比较具有相同的数量级,从而得到确实的证据,证明电子的存在。 塞曼效应被誉为继X射线之后物理学最重要的发现之一。 1902年,塞曼与洛仑兹因这一发现共同获得了诺贝尔物理学奖(以表彰他们研究磁场对光的效应所作的特殊贡献)。至今,塞曼效应依然是研究原子内部能级结构的重要方法。 本实验通过观察并拍摄Hg(546.1 nm)谱线在磁场中的分裂情况,研究塞曼分裂谱的特征,学习应用塞曼效应测量电子的荷质比和研究原子能级结构的方法。 二、实验目的 1?学习观察塞曼效应的方法观察汞灯发出谱线的塞曼分裂; 2?观察分裂谱线的偏振情况以及裂距与磁场强度的关系; 3?利用塞曼分裂的裂距,计算电子的荷质比 e m e数值。 三、实验原理 1、谱线在磁场中的能级分裂 设原子在无外磁场时的某个能级的能量为E0,相应的总角动量量子数、轨道量子数、 自旋量子数分别为J、L、S。当原子处于磁感应强度为B的外磁场中时,这一原子能级将 分裂为2J 1层。各层能量为 E = E o MgJ B B(1) 其中M为磁量子数,它的取值为J , J -1 ,…,-J共2J 1个;g为朗德因子;J B为 hc 玻尔磁矩(A B= );B为磁感应强度。 4兀m 对于L-S耦合

MATLAB通信系统仿真实验报告1

MATLAB通信系统仿真实验报告

实验一、MATLAB的基本使用与数学运算 目的:学习MATLAB的基本操作,实现简单的数学运算程序。 内容: 1-1要求在闭区间[0,2π]上产生具有10个等间距采样点的一维数组。试用两种不同的指令实现。 运行代码:x=[0:2*pi/9:2*pi] 运行结果: 1-2用M文件建立大矩阵x x=[0.10.20.30.40.50.60.70.80.9 1.11.21.31.41.51.61.71.81.9 2.12.22.32.42.52.62.72.82.9 3.13.23.33.43.53.63.73.83.9] 代码:x=[0.10.20.30.40.50.60.70.80.9 1.11.21.31.41.51.61.71.81.9 2.12.22.32.42.52.62.72.82.9 3.13.23.33.43.53.63.73.83.9] m_mat 运行结果: 1-3已知A=[5,6;7,8],B=[9,10;11,12],试用MATLAB分别计算 A+B,A*B,A.*B,A^3,A.^3,A/B,A\B. 代码:A=[56;78]B=[910;1112]x1=A+B X2=A-B X3=A*B X4=A.*B X5=A^3 X6=A.^3X7=A/B X8=A\B

运行结果: 1-4任意建立矩阵A,然后找出在[10,20]区间的元素位置。 程序代码及运行结果: 代码:A=[1252221417;111024030;552315865]c=A>=10&A<=20运行结果: 1-5总结:实验过程中,因为对软件太过生疏遇到了些许困难,不过最后通过查书与同学交流都解决了。例如第二题中,将文件保存在了D盘,而导致频频出错,最后发现必须保存在MATLAB文件之下才可以。第四题中,逻辑语言运用到了ij,也出现问题,虽然自己纠正了问题,却也不明白错在哪了,在老师的讲解下知道位置定位上不能用ij而应该用具体的整数。总之第一节实验收获颇多。

《工业机器人》实验报告

北京理工大学珠海学院实验报告 实验课程:工业机器人实验名称:实验一:工业机器人认识 教师:时间:班级:姓名:学号: 一、实验目的与任务 了解6自由度工业机器人的机械结构,工作原理,性能指标、控制系统,并初步掌握操作。了解6自由度工业机器人在柔性制造系统中的作用。 二、实验设备 FMS系统(含6-DOF工业机器人) 三、实验内容与步骤 1、描述工业机器人的机械结构、工作原理及性能指标。 2、描述控制系统的组成及各部分的作用。

3、描述机器人的软件平台及记录自己在进行实际操作时的步骤及遇到的问题以及自己的想法。教师批阅:

北京理工大学珠海学院实验报告 实验课程:工业机器人实验名称:实验二:机器人坐标系的建立 教师:时间:班级:姓名:学号: 一、实验目的与任务 了解机器人建立坐标系的意义;了解机器人坐标系的类型;掌握用D-H方法建立机器人坐标系的方法与步骤。 二、实验设备 FMS系统(含6-DOF工业机器人) 三、实验内容与步骤 1、描述机器人建立坐标系的意义以及机器人坐标系的类型。 2、深入研究机器人机械结构,建立6自由度关节型机器人杆件坐标系,绘制机器人杆件坐标系图。

教师批阅:

实验课程:工业机器人实验名称:实验三:机器人示教编程与再现控制 教师:时间:班级:姓名:学号: 一、实验目的与任务 了解机器人示教编程的工作原理,掌握6自由度工业机器人的示教编程与再现控制。 二、实验设备 FMS系统(含6-DOF工业机器人) 三、实验内容与步骤 1、描述机器人示教编程的原理。 2、详细叙述示教编程与再现的操作步骤,记录每一个程序点,并谈谈实验心得体会。教师批阅:

物流仿真实验报告

《物流仿真实验》 实验报告书 实验报告题目: 物流仿真实验学院名称: 管理学院 专业: 物流管理 班级: 物流1303 姓名: 孟颖颖 学号: 2 成绩: 2016年7月 实验报告 一、实验名称 物流仿真实验 二、实验要求 ⑴根据模型描述与模型数据对配送中心进行建模;

⑵分析仿真实验结果,进行利润分析,找出利润最大化的策略。 三、实验目的 1、掌握仿真软件Flexsim的操作与应用,熟悉通过软件进行物流仿真建模。 2、记录Flexsim软件仿真模拟的过程,得出仿真的结果。 3、总结Flexsim仿真软件学习过程中的感受与收获。 三、实验设备 (1)硬件及其网络环境 服务器一台:PII400/10、3G/128M以上配置、客户机100台、局域网或广域网。 (2)软件及其运行环境 Flexsim,Windows 2000 Server、SQL Server 7、0以上版本、IIS 5、0、SQL Server 数据库自动配置、IIS 虚拟目录自动配置 四、实验步骤 1 概念模型 1个Sink到操作区,如图:

第二步:连接端口 根据配送流程,对模型进行适宜的连接,所有端口连接均用A连接,如图: 第三步:Source的参数设置 为使Source产生实体不影响后面Processor的生产,尽可能的将时间间隔设置尽可能的小,并对三个Source做出同样的设定。 打开Source参数设置窗口,将时间到达间隔设置为常数1,同时为对三个实体进行区别,进行设置产品颜色,点击触发器,打开离开触发的下拉菜单,点击设置临时实体类型,设置不同实体类型,颜色自然发生变化。并对另外两个Source 进行同样的设置,如图:

机器人实验指导书

实验一 机器人运动学实验 一、基本理论 本实验以SCARA 四自由度机械臂为例研究机器人的运动学问题.机器人运动学问题包括运动学方程的表示,运动学方程的正解、反解等,这些是研究机器人动力学和机器人控制的重要基础,也是开放式机器人系统轨迹规划的重要基础。 机械臂杆件链的最末端是机器人工作的末端执行器(或者机械手),末端执行器的位姿是机器人运动学研究的目标,对于位姿的描述常有两种方法:关节坐标空间法和直角坐标空间法。 关节坐标空间: 末端执行器的位姿直接由各个关节的坐标来确定,所有关节变量构成一个关节矢量,关节矢量构成的空间称为关节坐标空间。图1-1是GRB400机械臂的关节坐标空间的定义。因为关节坐标是机器人运动控制直接可以操纵的,因此这种描述对于运动控制是非常直接的。 直角坐标空间: 机器人末端的位置和方位也可用所在的直角坐标空间的坐标及方位角来描述,当描述机器人的操作任务时,对于使用者来讲采用直角坐标更为直观和方便(如图1-2)。 当机器人末端执行器的关节坐标给定时,求解其在直角坐标系中的坐标就是正向运动学求解(运动学正解)问题;反之,当末端执行器在直角坐标系中的坐标给定时求出对应的关节坐标就是机器人运动学逆解(运动学反解)问题。运动学反解问题相对难度较大,但在机器人控制中占有重要的地位。 图1-1 机器人的关节坐标空间 图1-2 机器人的直角坐标空间法

机器人逆运动学求解问题包括解的存在性、唯一性及解法三个问题。 存在性:至少存在一组关节变量来产生期望的末端执行器位姿,如果给定末端执行器位置在工作空间外,则解不存在。 唯一性:对于给定的位姿,仅有一组关节变量来产生希望的机器人位姿。机器人运动学逆解的数目决定于关节数目、连杆参数和关节变量的活动范围。通常按照最短行程的准则来选择最优解,尽量使每个关节的移动量最小。 解法:逆运动学的解法有封闭解法和数值解法两种。在末端位姿已知的情况下,封闭解法可以给出每个关节变量的数学函数表达式;数值解法则使用递推算法给出关节变量的具体数值,速度快、效率高,便于实时控制。下面介绍D-H 变化方法求解运动学问题。 建立坐标系如下图所示 连杆坐标系{i }相对于{ i ?1 }的变换矩阵可以按照下式计算出,其中连杆坐标系D-H 参数为由表1-1给出。 齐坐标变换矩阵为: 其中描述连杆i 本身的特征;和描述连杆i?1与i 之间的联系。对于旋转关节,仅是关节变量,其它三个参数固定不变;对于移动关节,仅是关节变量,其它三个参数不变。

Multisim仿真实训报告概要

EDA 工 具 训 练 实 训 报 告 学院:电气与控制工程学院 班级:自动化1201 姓名: 学号:

实验1:三相电路仿真 一.电路设计及功能介绍 三相电路是一种特殊的交流电路,由三相电源、三相负载和三相输电线路组成。世界上电力系统电能生产供电方式大都采用三相制。三相电路由三相交流电源供电,三相交流电源指能够提供3个频率相同而相位不同的电压或电流的电源,三相发电机的各相电压的相位互差120°。三相电路有电源和负载Y连接和△连接等连接方式,本次仿真采用Y--Y连接。 二.三相电路电路分析 1.三相对称负载Y--Y连接。图1-1为其电路仿真。 图1-1.三相电路对称负载仿真 线电流(相电流)/A 相电压/v 负载电压/v 中性线电流/uA 2.2 381.077 220.015 8.277 表1-1 三相电路对称负载仿真各项数据 2.去掉中性线后三相对称负载电路仿真,如图1-2.

图1-2去掉中性线后.三相电路对称负载仿真 线电流(相电流)/A 相电压/v 负载电压/v 2.2 381.077 220.015 表1-2去掉中性线后三相电路对称负载仿真各项数据 3.改变三相对称负载的大小,如图1-3. 图1-3改变三相对称负载后三相电路对称负载仿真各项数据 线电流(相电流)/A 相电压/v 线电压/v 4.4 381.077 220.015 表1-3 改变三相对称负载后三相电路对称负载仿真各项数据 4.三相负载三角形联结的电路仿真

图1-4.三相电路△负载仿真 线电压(相电压)/v 线电流/A相电流/A 381.069 6.6 3.811 表1-4.三相电路△负载仿真各项数据 本实验包括四个部分,一是三相对称负载Y--Y接法,二是去掉一中的中性线,通过一和二的对比可以得出三相电路中中性线的作用,三改变了对称负载的大小,可以得出负载大小对各项数值的影响,四十三相对称负载Y--△接法,通过四与一二三的对比,可以发现△负载与Y负载的不同。 通过对比以上各组实验及数据,可以得到: 1.在Y--Y三相对称负载电路中,中性线上电流几乎为零,中性线不起作用。 2.三相对称负载变化会引起线电流变化,其他不变。 3.负载Y接法中,线电流等于相电流,负载对称,线电压是相电压的1.73倍。 4.负载△接法中,线电压等于相电压,负载对称,线电流是相电流的1.73倍。 三.总结与展望 世界上电力系统电能生产供电方式大都采用三相制。说明三相电路在实际生产生活中具有重要意义。对于我们电类专业的学生,将来如果从事与专业相关的工作,供电是基础,所以我们要研究三相电路,研究它各方面特点,熟练掌握Y 接法和△接法。通过本次试仿真实验,加深了我们对三相电路的了解,为将来研究和运用三相电路打下了基础。 实验二:RLC串联谐振 一.电路设计及功能介绍: 电路原理:当ωL-1/ωC=0时,电路中的电流与激励电压同相,电路处于谐

虚拟现实与仿真实验报告

合肥工业大学 计算机与信息学院 实验报告 课程:虚拟现实与仿真技术 专业班级:计算机科学与技术11-2班 学号: 姓名:谢云飞 实验一 一.实验名称

从3Dmax8中导出mesh并添加mesh到场景。 二.实验过程或实验程序(增加的代码及代码注解) 启动3Dmax 1.在安装有3Dmax8的计算机上,可以使用两种不同的方法来启动3Dmax8: (1)在桌面上双击“3Dmax8”图标 (2)点击“开始”菜单,在“程序”中的选择“3Dmax8” 2.观察3Dmax8主窗口的布局。3Dmax8主要由若干元素组成:菜单栏、工具栏、以及停靠在右边的命令面板和底部的各种工具窗口 使用3Dmax8建模并导出mesh 导出mesh的步骤如下: 1.启动3Dmax8 2.在停靠在右边的命令面板中,点击几何体按钮 3.选择标准几何体 4.在对象类型中选择对象(如:长方体),在“前”视口中,通过单击鼠标左键,创建出模型 5.在工具栏中单击“材质编辑器”按钮,通过上步操作,可开启“材质编辑器”对话框 6.在“材质编辑器”对话框中,点击漫反射旁方形按钮,进入到“材质/贴图浏览器” 7.在“材质/贴图浏览器”中选择位图,鼠标左键双击位图 8.弹出选择位图图像文件对话框,从本地电脑中选择一张图片 9.选择好图片,在材质编辑器对话框中,点击将材质指令给选定对象 10.点击菜单栏上的oFusion按钮,在弹出的菜单栏中选择Export Scene 11.选择文件夹并输入文件名qiu,点击保存,在弹出的对话框中勾选Copy Textures,点击Export按钮,此时mesh文件已成功导出 导出的mesh文件放入到指定位置 1.找到mesh文件,把mesh文件放到当前电脑的OgreSDK的models中,以我的电脑为例,OgerSDK放在C盘中 2.打开C盘,找到OgreSDK,打开OgreSDK,找到media,打开media文件夹,找到models,打开models文件夹,将mesh文件复制到此文件夹中 3.将导出mesh文件附带的材质文件放到OgreSDK的scripts (C:\OgreSDK\media\materials\scripts)中 4.将导出mesn文件时同时导出的图片放到OgreSDK的textures (C:\OgreSDK\media\materials\textures)中

通信工程系统仿真实验报告

通信原理课程设计 实验报告 专业:通信工程 届别:07 B班 学号:0715232022 姓名:吴林桂 指导老师:陈东华

数字通信系统设计 一、 实验要求: 信源书记先经过平方根升余弦基带成型滤波,成型滤波器参数自选,再经BPSK ,QPSK 或QAM 调制(调制方式任选),发射信号经AWGN 信道后解调匹配滤波后接收,信道编码可选(不做硬性要求),要求给出基带成型前后的时域波形和眼图,画出接收端匹配滤波后时域型号的波形,并在时间轴标出最佳采样点时刻。对传输系统进行误码率分析。 二、系统框图 三、实验原理: QAM 调制原理:在通信传渝领域中,为了使有限的带宽有更高的信息传输速率,负载更多的用户必须采用先进的调制技术,提高频谱利用率。QAM 就是一种频率利用率很高的调制技术。 t B t A t Y m m 00sin cos )(ωω+= 0≤t ≤Tb 式中 Tb 为码元宽度t 0cos ω为 同相信号或者I 信号; t 0s i n ω 为正交信号或者Q 信号; m m B A ,为分别为载波t 0cos ω,t 0sin ω的离散振幅; m 为 m A 和m B 的电平数,取值1 , 2 , . . . , M 。 m A = Dm*A ;m B = Em*A ; 式中A 是固定的振幅,与信号的平均功率有关,(dm ,em )表示调制信号矢量点在信号空

间上的坐标,有输入数据决定。 m A 和m B 确定QAM 信号在信号空间的坐标点。称这种抑制载波的双边带调制方式为 正交幅度调制。 图3.3.2 正交调幅法原理图 Pav=(A*A/M )*∑(dm*dm+em*em) m=(1,M) QAM 信号的解调可以采用相干解调,其原理图如图3.3.5所示。 图3.3.5 QAM 相干解调原理图 四、设计方案: (1)、生成一个随机二进制信号 (2)、二进制信号经过卷积编码后再产生格雷码映射的星座图 (3)、二进制转换成十进制后的信号 (4)、对该信号进行16-QAM 调制 (5)、通过升余弦脉冲成形滤波器滤波,同时产生传输信号 (6)、增加加性高斯白噪声,通过匹配滤波器对接受的信号滤波 (7)、对该信号进行16-QAM 解调 五、实验内容跟实验结果:

基于multisim的晶闸管交流电路仿真实验分析报告

基于multisim的晶闸管交流电路仿真实验报告

————————————————————————————————作者:————————————————————————————————日期:

自动化(院、系)自动化专业112 班组电力电子技术课 学号21 姓名易伟雄实验日期2013.11.24 教师评定 实验一、基于Multisim的晶闸管交流电路仿真实验 一、实验目的 (1)加深理解单相桥式半控整流电路的工作原理。 (2)了解晶闸管的导通条件和脉冲信号的参数设置。 二、实验内容 2.1理论分析 在单相桥式半控整流阻感负载电路中,假设负载中电感很大,且电路已工作于稳态。在u2正半周,触发角α处给晶闸管VT1加触发脉冲,u2经VT1和VD4向负载供电。u2过零变负时,因电感作用使电流连续,VT1继续导通。但因a点电位低于b点电位,使得电流从VD4转移至VD2,VD4关断,电流不再流经变压器二次绕组,而是由VT1和VD2续流。此阶段,忽略器件的通态压降,则ud=0,不会像全控桥电路那样出现ud为负的情况。 在u2负半周触发角α时刻触发VT3,VT3导通,则向VT1加反压使之关断,u2经VT3和VD2向负载供电。u2过零变正时,VD4导通,VD2关断。VT3和VD4续流,ud又为零。此后重复以上过程。 2.2仿真设计

(院、系)专业班组课学号姓名实验日期教师评定 触发脉冲的参数设计如下图

(院、系)专业班组课学号姓名实验日期教师评定 2.3仿真结果 当开关S1打开时,仿真结果如下图

(院、系)专业班组课学号姓名实验日期教师评定 三、实验小结与改进 此次实验在进行得过程中遇到了很多的问题,例如:触发脉冲参数的设置,元器件的选择等其中。还有一个问题一直困扰着我,那就是为什么仿真老是报错。后来,通过不断在实验中的调试发现,这是因为一些元器件的参数设置过小,导致调试出错。总的来说,这次实验发现了很多问题,但在反复的调试下,最后我还是完成了实验。同时,也让我认识到实践比理论更难掌握。通过不断的发现问题,然后逐一解决问题,最后得出自己的结论,我想实验的乐趣就在于此吧。 而对于当开关S1打开时的实验结果,这是因为出现了失控现象。我从书中发现:当一个晶闸管持续导通而二极管轮流导通的情况,这使ud成为正弦半波,即半周期ud 为正弦,另外半周期ud为零,其平均值保持恒定,相当于单相半波不可控整流电路时的波形 另外,在实验过程中,我们如果进行一些改进:电路在实际应用中可以加设续流二极管,以避免可能发生的失控现象。实际运行中,若无续流二极管,则当α突然增大至180度或触发脉冲丢失时,会发生一个晶闸管持续导通而二极管轮流导通的情况,这使ud成为正弦半,即半周期ud为正弦,另外半周期ud为零,其平均值保持恒定,相当于单相半波不可控整流电路时的波形。有二极管时,续流过程由二极管完成,在续流阶段晶闸管关断,这就避免了某一个晶闸管持续导通从而导致失控的想象。同时续流期间导电回路中只有一个管压降,少了一个管压降,有利于降低损耗。

仿真实验报告经典案例概述

XXXXX 实验报告 学院(部)XX学院 课程名称生产系统仿真实验 学生姓名 学号 专业 2012年9月10日

《生产系统仿真》实验报告 年月日 学院年级、专业、班实验时间9月10日成绩 课程名称生产系统仿真 实训项目 名称 系统仿真软件的基础应 用 指导 教师 一、实验目的 通过对Flesim软件进一步的学习,建立模型,运用Flesim软件仿真该系统,观察并分析运行结果,找出所建模型的问题并进行改进,再次运行循环往复,直到找出构建该系统更为合理的模型。 二、实验内容 1、建立生产模型。 该模型生产三种产品,产品到达速率服从均值为20、方差为2的正态分布;暂存器的最大容量为25个;检测器的检测时间服从均值为30的指数分布,预制时间为10s;传送带的传送速率为1m/s,带上可容纳的最大货件数为10个。 2、运行生产模型。 3、对运行结果进行分析,提出改进方案在运行,直到找到更为合理的模型。 三、实验报告主要内容 1、根据已有数据建立生产模型。 将生产系统中所需实体按组装流程进行有序的排列,并进行连接如图1所示

图1 2、分别对发生器、暂存器、检验台和传送带进行参数设置。 (1)发生器的产品到达速率服从均值为20、方差为2的正态分布。如图2所示。 (2)暂存器的最大容量设置为25件。如图3所示。 (3)设置检验台的检测时间服从均值为30s的指数分布,预制时间为10s.如图4所示。 (4)传送带的传送速率为1m/s,最大容量为10件。如图5所示 图2 图3 图4 图5 3、对发生器及暂存器进一步设置。 (1)发生器在生成产品时设置三种不同类型的产品,通过颜色区分。如图6所示。 (2)暂存器在输出端口通过设置特定函数以使不同颜色的产品在不同的检验台检验。如图7所示。

OFDM系统仿真实验报告

无线通信——OFDM系统仿真

一、实验目的 1、了解OFDM 技术的实现原理 2、利用MATLAB 软件对OFDM 的传输性能进行仿真并对结论进行分析。 二、实验原理与方法 1 OFDM 调制基本原理 正交频分复用(OFDM)是多载波调制(MCM)技术的一种。MCM 的基本思想是把数据流串并变换为N 路速率较低的子数据流,用它们分别去调制N 路子载波后再并行传输。因子数据流的速率是原来的1/N ,即符号周期扩大为原来的N 倍,远大于信道的最大延迟扩展,这样MCM 就把一个宽带频率选择性信道划分成N 个窄带平坦衰落信道,从而“先天”具有很强的抗多径衰落和抗脉冲干扰的能力,特别适合于高速无线数据传输。OFDM 是一种子载波相互混叠的MCM ,因此它除了具有上述毗M 的优势外,还具有更高的频谱利用率。OFDM 选择时域相互正交的子载波,创门虽然在频域相互混叠,却仍能在接收端被分离出来。 2 OFDM 系统的实现模型 利用离散反傅里叶变换( IDFT) 或快速反傅里叶变换( IFFT) 实现的OFDM 系统如图1 所示。输入已经过调制(符号匹配) 的复信号经过串P 并变换后,进行IDFT 或IFFT 和并/串变换,然后插入保护间隔,再经过数/模变换后形成OFDM 调制后的信号s (t ) 。该信号经过信道后,接收到的信号r ( t ) 经过模P 数变换,去掉保护间隔以恢复子载波之间的正交性,再经过串/并变换和DFT 或FFT 后,恢复出OFDM 的调制信号,再经过并P 串变换后还原出输入的符号。 图1 OFDM 系统的实现框图 从OFDM 系统的基本结构可看出, 一对离散傅里叶变换是它的核心,它使各子载波相互正交。设OFDM 信号发射周期为[0,T],在这个周期内并行传输的N 个符号为001010(,...,)N C C C -,,其中ni C 为一般复数, 并对应调制星座图中的某一矢量。比如00(0)(0),(0)(0)C a j b a b =+?和分别为所要传输的并行信号, 若将

智能足球实验报告

智能足球实验报告 篇一:实验报告 实验报告 这周,我们去西部自动化楼的自主机器人实验室参观了学校的自主机器人。以前看变形金刚认为机器人的无所不能太虚拟,自己对这方面也不太了解。但通过这次参观后,我对机器人有了初步了解。还记得当时看功夫足球时最后一场比赛人与机器人比赛太虚拟,但当老师给我们放RoboCup中型足球机器人比赛时,自己才感觉到原来机器人踢球也很好玩,机器人踢球也并不虚拟。这次参观并近距离接触后,才知道机器人是怎样踢球的。我看到机器人内部有各种传感器、控制器,机器人就靠这些传感器构成了其里面的各个系统,比如视觉系统,通讯系统等等,它们靠着这些系统在无外界人为信息输入和控制的条件下,独立完成踢球的任务。而且通过老师播放的视频,足球机器人比赛的精彩程度不亚于真实的比赛。随着机器人的不断发展,我想人机大战将很快会实现。?另外,我们还参观了服务机器人,听老师介绍,这是上大自强队比赛用过的机器人。看着它的那支“手”,自己不禁感觉现代社会的科技发展确实迅猛啊!想想原来要让机器人干家务活几乎是天方夜谭,这几乎是不可能办到的事,但现在,一切皆有可能呀!不禁让人感慨啊!而且听老师讲服务机器人的应用范围很广,不仅仅做家务还

可从事维护保养、修理、运输、清洗、保安、救援、监护等工作。他可以是护士的助手,可以是智能轮椅,还可以······而且看了几段上大服务机器人的比赛,对他们能识别不同的环境大为吃惊,不仅仅是主人,物品,甚至连房间的路径也能识别,确实很棒。我想,随着社会的发展,机器人将无处不在,在社会的各个领域都会出现他的身影。 尽管家庭机器人尚未完全产业化,但我想今天的机器人就像20年前的微型计算机一样,作为计算机技术及现代IT综合技术的一个必然延伸,家庭机器人技术将以前所未有的速度实现突破和发展。在不久的将来,社会会因机器人发展而发展,人们的生活也会因机器人的改变而改变。 或许我们现在也会因机自主器人这门课而改变些什么吧!拭目以待吧! 智能自主足球机器人系统的关键技术有机器人控制系统的体系结构、移动机器人自定位、实时视觉、多机器人传感器融合、多机器人协作、机器人的学习等多项关键技术。全自主机器人足球比赛的特点是每个机器人完全自治,即每个机器人必须自带各种传感器、控制器、驱动器、电源等设备。比赛中,各机器人队不允许使用全局视觉,也不允许人为的干预。 ? 篇二:智能足球机器人论文

RLC串联谐振电路(Multisim仿真实训)

新疆大学 实习(实训)报告 实习(实训)名称: __________ 电工电子实习(EDA __________ 学院: __________________ 专业班级_________________________________ 指导教师______________________ 报告人____________________________ 学号 ______ 时间: 实习主要内容: 1. 运用Multisim仿真软件自行设计一个RLC串联电路,并自选合适的参数。 2. 用调节频率法测量RLC串联谐振电路的谐振频率f 0 ,观测谐振现象。 3. 用波特图示仪观察幅频特性。 4?得出结论并思考本次实验的收获与体会。 主要收获体会与存在的问题: 本次实验用Multisim 仿真软件对RLC串联谐振电路进行分析,设计出了准确的电路模型,也仿真出了正确的结果。通过本次实验加深了自己对RLC振荡电路的理解与应用,更学习熟悉了Multisim 仿真软件,达到了实验的目

的。存在的问题主要表现在一些测量仪器不熟悉,连接时会出现一些错误,但最终都实验成功了。 指导教师意见: 指导教师签字: 年月日 备注: 绪论 Multisim仿真软件的简要介绍 Multisim是In terctive Image Tech no logies公司推出的一个专门用于电子电 路仿真和设计的软件,目前在电路分析、仿真与设计等应用中较为广泛。该软件以图形界面为主,采用菜单栏、工具栏和热键相结合的方式,具有一般Windows 应用软件的界面风格,用户可以根据自己的习惯和熟练程度自如使用。尤其是多种可放置到设计电路中的虚拟仪表,使电路的仿真分析操作更符合工程技术人员的工作习惯。下面主要针对Multisim11.0软件中基本的仿真与分析方法做简单介绍。 EDA就是“ Electronic Design Automation ”的缩写技术已经在电子设计领 域得到广泛应用。发达国家目前已经基本上不存在电子产品的手工设计。一台电子产品的设计过程,从概念的确立,到包括电路原理、PCB版图、单片 机程序、机内结构、FPGA的构建及仿真、外观界面、热稳定分析、电磁兼容分析在内的物理级设计再到PCB钻孔图、自动贴片、焊膏漏印、元器件清 单、总装配图等生产所需资料等等全部在计算机上完成。EDA已经成为集成 电路、印制电路板、电子整机系统设计的主要技术手段。 功能: 1. 直观的图形界面 整个操作界面就像一个电子实验工作台,绘制电路所需的元器件和仿真所需的测试仪器均可直接拖放到屏幕上,轻点鼠标可用导线将它们连接起来,软件仪器的控制面板和操作方式都与实物相似,测量数据、波形和特性曲线如同在真实仪器上看到的;

相关文档
最新文档