浙江大学RoboCup校内赛技术手册更新时间:2005-9-11.介绍我们现在处于RoboCup的初级阶段,还有半个世纪的路要走,那时我们可以“建立一支仿人机器足球比赛队伍,并且战胜人类的足球世界冠军队”。这个目标带来的挑战是巨大的,而且吸引了全世界数以百记的研究者和他们的学生长年的投身于RoboCup。RoboCup是作为教育目标的和应用领域相平行的一个研究挑战,也用于激励公众对机器人技术的兴趣和人工智能的发展。从1997年开始的每一年,世界各地的研究者聚集讨论,进行机器人的世界杯足球比赛。本指南的目的是引导仿真组队伍的最初工作,对熟练使用者是一本对server的参考指南。1.1背景Mackworth提出了进行机器人足球比赛的想法。不幸的是,这个想法并没有得到恰当的反响,直到Kitano,Asada,和Kuniyoshi在日本提出名为RobotJ_League的研究领域时,他们补充修改了这个想法。在1993年夏,几个美国研究者对RobotJ_League发生了兴趣,于是就变成了RobotWorldCup,简称为RoboCup。RoboCup有时也指RoboCup挑战或是RoboCup领域。1995年,Kitanoetal.[8]提出在1997年举行第一届机器人世界杯足球比赛和会议。RoboCup的目标是为AI和机器人技术提供一个新的标准问题,继深蓝后AI的又一个课题。RoboCup和AI中以前研究的问题不同,因为它致力于分布式解决方案,而不是集中式控制,而且研究的不仅仅是AI相关的传统领域,还包括以下范围:机器人技术,社会学,实时任务的关键系统,等等。2.0简介2.1开始这个部分快速的介绍了RoboCup仿真组的主要部分。对于介绍的每一部分,你都会在本手册的以后内容得到详细的信息(如:参数配置,运行的选择项等等)。2.1.1ServerServer是能使不同的队伍进行足球比赛的系统。因为比赛是以client/server方式进行的,所以对球队的开发编译没有任何限制。仅要求球队的开发工具提供通过UDP/IP连接的client/server支持。这是因为server和每个client之间的通讯都是通过UDP/IP端口实现的。每个client都是独立的进程,通过给定的端口和server连接。一支球队可以有最多11个client(或者说是球员)。当球员和server连接上后,所有的信息都通过这个端口传递。球员发送他们下一步要做的动作请求给server(如踢球kick,转身turn,run等)。Server接收到这些消息后,执行请求,并相应的更新环境。另外,server向所有的球员提供感知sensory信息(如:关于足球,球门和其他球员的位置可视信息)。还有相当重要的一点,server是以离散的时间间隔(或周期)工作的实时系统。每个时间周期都有确定的分时,为了在某个周期执行,动作必须在正确的间隔到达server。因此,缓慢的反应会对球队的性能产生很大的影响,它会造成丢失执行动作的机会。2.1.2MonitorMonitor是一个可视化的工具,允许人们观看比赛时server到底发生了什么事情。在monitor上显示的信息包括比分,球队名字,所有球员和足球的位置。Monitor也提供了一个很简单的server接口。如:当两支球队都连接上后,在monitor上的“Kick-Off”按钮允许人类裁判开始比赛。在server上进行比赛,monitor并不是必需的。如果有需要的话,可以同时和server连上很多的monitor。2.1.3LogplayerLogplayer记录比赛情况,是用来进行重现比赛的工具。运行server时,可以加上一些选项,那么server就会将比赛的所有数据都存储在硬盘上。(很像在录像机上按下录制按钮)。然后,和monitor连接在一起的logplayer就可被用来重现比赛。这在进行球队的分析或者发现球队的强处和弱点时是很有用的。和录像球员差不多,logplayer也有开始play,停止stop,快进fastforwar和后退rewind按钮。而且logplayer也允许你跳到比赛的任一个周期(如你仅仅希望看到进球部分)。2.2比赛规则在比赛中,由server中的自动裁判和人类裁判来共同执行大量的规则。这节就是解释这些规则是如何工作,它们是怎么影响比赛的。2.2.1由自动裁判裁决的规则开球Kick-Off在kickoff之前(比赛开始前,和进球后),所有的球员都必须在她自己的半场。在每次进球得分后,比赛挂起5s时间。在这个间隔中,球员可以使用move命令移动到某点。如果在5s结束后,球员还呆在对方的半场,裁判会把她移到她们自己半场的随机位置。进球Goal如果一个球队进球得分,裁判要作很多事情。首先,她向所有的球员广播进球信息。然后更新比分,将球移到中点,并把比赛模式置为kick_off_x(x是left或right,代表左半场球队或右半场球队)。最后,她将比赛挂起5s,在此期间球员回到自己的半场(如在“开球Kick-Off”节所述)。出界OutofField当足球出界时,裁判把足球放到一个合适的位置(边线,角球区或球门区)并且把比赛模式置为界外球kick_in,角球coner_kick,或者球门球goal_kick。如果是角球的话,裁判将把足球放到场内正确的角球区坐标(1m,1m)处。清场PlayerClearance当比赛模式是开球kick_off,界外球kick_in,或角球corner_kick时,防守队员移出以足球为圆心,9.15m为半径的圆形区域。被移出的球员随机放置在圆形区域的周围。如果比赛模式是越位offside,所有的进攻球员被移回到没有越位的位置。这种情况下的进攻球员是指在越位范围内的所有球员以及位于以足球为圆心9.15m为半径的圆形区域内。如果比赛模式是球门球goal_kick,所有的进攻球员会被移到罚球区外。当球门球发生时,进攻球员不能重新进入罚球区。当足球被踢出罚球区后,比赛模式马上被设置为正常play_on。比赛模式控制Play-ModeControl当比赛模式是开球kick_off,界外球kick_in,或者角球corner_kick时,裁判在足球因为kick命令产生移动时,马上把比赛模式设置为正常play_on。中场时间和终场时间Half_TimeandTime_Up当上半场或下半场结束时,裁判暂时挂起比赛。每个半场的默认值是3000个仿真周期(大约5分钟)。2.2.2人类裁判裁决的规则某些故意犯规动作,如故意阻挡等,很难由裁判(referee)自动判断,因为它与球员的意图有关。因此,server为通过人来判断这些犯规动作提供了一种方式。人类裁判可以挂起比赛,赋予某个球队任意球。下面简单介绍一下此类犯规动作:1故意包围足球(Surroudingtheball)2故意用多名队员阻挡球(Blockingthegoalwithtoomanyplayers)3故意长时间持球(Notputtingtheballintoplayafteragivennumberofcycles)4故意阻挡其他队员的移动(Intentionallyblockingthemovementofotherplayers)5守门员滥用catch命令(守门员不允许在罚球区内重复使用kick和catch命令,因为这样为移动足球提供了安全的方式)6向server发送过多命令FloodingtheServerwithMessages每个Client在一个仿真周期内不能发送超过3或4个命令。过多的命令会使server阻塞。如果server发生阻塞,将在赛后进行检查。7不恰当的行为InappropriateBehaviour如果显而易见的,一个球员以一种不恰当的方式干扰了比赛,那么人类裁判可以挂起比赛,并给对方球队一个任意球。1.Linux下Server的安装和简单使用需要补充2.SoccerServer4.1对象ObjectsUMLdiagramoftheobjectsinthesimulation4.2协议4.2.1client命令协议连接,重新连接,断开如果client成功的连接或重新连接,server将发送以下的消息:一个包括server参数的消息,一个包括球员player参数的消息和一个包括球员类型的消息。格式如下所示。client控制server可能会返回命令的出错信息:(errorunknowncommand)(errorillegalcommandform)4.2.2client感知协议Client具有听觉、see和sensebody等感知信息。但是一般来说我们不需要太关心消息的格式,因为底层代码对消息的处理已经做的比较完善了。4.3感知模型每个智能体有三种不同的感知。听觉感知检测裁判发送的消息。视觉感知检测场上的可视信息,象球员当前可视范围内的对象的距离和方向。视觉信息很象一个传感器,可以“见到”在球员身后的附近对象。自身body感知检测球员的当前物理状态,象它的体力stamina,速度speed和头颈角度neckangle。这三种感知联合给智能体提供了环境的一个较好的图景。4.3.2视觉感知模型视觉感知报告球员当前所能看到的对象。在每个sense_step(目前等于150ms)内,视觉信息被自动的发送到球员处。从server发送的视觉信息遵循下面的基本格式:(seeObjNameDistanceDirectionDistChngDirChngBodyDirHeadDir)其中Distance,Direction,DistChng和Dirchng按如下方式计算出来的:其中),(ytxtPP是目标的绝对位置坐标,),(00yxPP是接收视觉信息的队员自己本身的绝对坐标,),(ytxtvv是目标的绝对速度,),(00yxvv队员自己的绝对速度。0a是队员所面向的绝对方向。球员面向的绝对方向是球员的自身角度BodyDir和头部角度HeadDir的之和。另外),(ryrxPP和),(ryrxvv表示目标的相对位置和相对速度。),(ryrxee表示平行于相对位置向量的单位向量。如果被观察者是球员的话,才会有BodyDir和HeadDir,分别是被观察球员相对观察者的身体和头部的相对角度。如果两个球员的身体都是相同的角度,那么BodyDir就等于零。HeadDir也一样。对象(goalr)表示右半场球门线的中点。(fc)是场上中心的一个虚拟标记。。。。。。。。。对于对象(l…),Distance是视角的平分线和边线的交点到球员的距离。Direction则是到边线的方向。4.3.3自身感知模型BodySensorModel自身感知返回球员当前的物理状态。每隔sense_body_step(目前使用100ms),就会自动的向球员发送自身感知信息。自身感知消息的格式如下:(sense_bodyTime(view_modeViewQualityViewWidth)(staminaStaminaEffort)(speedAmountOfSpeedDirectionOfSpeed)(head_angleHeadDirection)(kickKickCount)(dashDashCount)(turnTurnCount)(saySayCount)(turn_neckTurnNeckCount)(catchCatchCount)(moveMoveCount)(change_viewChangeViewCount))ViewQuality的取值是high或low。(由于我们现在是完全视觉,这项可以忽略)ViewWidth取值是narrow,normal,wide。(由于我们现在是完全视觉,这项可以忽略)AmountOfSpeed是球员速度的近似值。DirectionOfSpeed是球员速度的近似方向。HeadDirection是球员头部的相对方向。变量Count是由server执行的对应命令的总量。如:DashCount=134说明