FC PORTUGAL 3D 仿真足球队:
体系机构,底层技术和根据新的RoboCup3D仿真器优化的队伍策略
Hugo Marques, Nuno Lau and Luis Paulo Ries
翻译:许元xychn15@yahoo.com.cn
摘要: 这篇文章描述的是最近RoboCup3D比赛中FC Portugal 3D 仿真足球队agent的建立。新的3D仿真器发布版本是0.2版而相关文档几乎没有。因此,这篇文章,除了描述FC Portugal 3D 仿真足球队的方法,还描述了rcssserver3D仿真器的主要特点。
关键字:人工智能,多智能体系统,机器人仿真足球,物理模型,FC Portugal。
第1章.绪论
RoboCup 是一个国际性项目,目标是研究多智能体系统和智能机器人(Kitano et al 1995)。它包含许多比赛像机器人搜索和援救、足球比赛。每个项目又分仿真组和实物机器人组。
仿真足球比赛立志于设计一批agent参与足球比赛,使他们比其他队进更多的球。第一届这个比赛的世界杯1997年在名古屋举行。这个比赛除了仿真组还有中型组、小型组和有腿组。
仿真比赛是基于足球比赛仿真器(Chen et al 2002)。这个仿真器建立了一个虚拟的2D场地和虚拟的机器人能力。Agent作为server的client,从server接收感觉并发送动作到server。每个agent控制一个独特的队员。仿真器十分真实地包含了有限的视角,低带宽的球员通讯,等等。一个教练agent在没有嘈声的视觉中。这个agent可以在适当的时候发送指示给其他的agent,像比赛暂停的时候。
2001年一个新的内容加入了——教练比赛。这个比赛目的是改进比赛的策略来提高agent的表现。
2004年3D足球仿真比赛诞生。和2D足球仿真比赛相同的目的,新的比赛加入了第三维使得比赛更加真实。3D足球仿真器只是0.2版。它还没有完善,而相关文档几乎没有。这篇文章的一个目的正好是收集关于server的相关信息使得agent拥有更精确的和智能的策略。
这篇文章是这样组织的。
第2章给出了3D足球仿真器基于的一般仿真平台——SPADES的总体概括。
第3章给出3D足球仿真器server的基本信息。
第4章是关于FC Portugal 3D 仿真足球队。
第5章是测试和结果。
第6章给出了将来要做的工作的想法。
最后,第7章是结论。
第2章.SPADES
仿真server是在SPADES(System for Parallel Agent Discrete Agent Simulation)平台上实现的。SPADES是分布式仿真的中间系统(Riley 2003)。其主要目的是提供为运行多计算机系统提供一个一般性的平台。它实现了agent和仿真世界之间的交互,而用户不需要担心接口,地址,等等。
SPADES主要特点是:
*agent以执行为基础——支持实现感觉,思考和动作。
*分布式计算——支持在多台计算机上运行agent程序。
*结果不受网络延时或者机器间负载不同的影响——SPADES确保时间按照恰当的顺序进行。
*agent可独立地从编程语言编程——agent可以用任何语言编写,只要支持读/写PIPEs。
*动作不需要同步——agent的动作可以在仿真的不同时间执行。
2.1组织结构
图1——SPADES结构图
SPADES结构是c/s结构(图1)。Simulation Engine和Communication Server作为SPADES的一部分提供;当使用者建立了agent和World Model就可以运行在前者上了。Simulation Engine是允许在其上建立特殊World Model的一般软件。它运行在server端,并通过Communication Server为agent们和他们的世界提供交互和通讯。agent动作的特殊环境的World Model必须运行在同一台机器上。作为client分布的是agent和Communication Server。Communication Server必须出现在所有client的机器上来提供agent和Simulation Engine的通讯。它从agent接受信息并发送到server 。agent也运行在client端。
2.2感觉—思考—动作 周期
SPADES实现被称作感觉—思考—动作 周期,每个agent接受感觉并返回动作。这就意味着agent只能在接收到感觉信息之后有动作。当然自己的感觉也可以要求一个动作,但原理依旧——一个感觉产生一个动作。这样,SPADES提供了一个动作叫做请求时间通报返回一个空的感觉(时间通报),在接收到后agent可以反应一个动作。例如,如果agent接收到一个感觉在100周期并希望在110周期产生一个动作,但是下一个感觉只有在120周期才会到达,agent可以要求在110周期接收到一个时间通报并在接收到之后发出命令。
图2——SPADES 感觉—思考—动作 周期
图2描述了感觉—思考—动作 周期和各个部分运行的时间。A到B是发送一个感觉到agent。接收到感觉后(B到C)agent决定执行哪些动作;然后(C到D)动作发给server。
有些agent中,感觉—思考—动作部分是时间上重叠的(像在图2中);这样有一个限制——agent的思考周期是不重叠的。这个约束是有意义的,因为每个agent使用一个进程单位,因此,同时只有一个感觉被计算。
第3章.仿真server
按照规定的仿真器运行在SPADES之上,使用ODE来计算世界中的物体的相互物理作用(Russell 2003)。图形接口是由OpenGL实现的。
图3——3D仿真截图
3D仿真server(图3)(RoboCup Soccer Server 3D Maintenance Group 2003)允许22个agent(每个队11个)与server交互来进行一场仿真机器人足球比赛。每个agent接收到关于和其他队员、球门等相对位置和其他与比赛有关信息组成的感觉。这时世界中各个物体的位置信息由360度视觉提供的是难于使用的信息。agent是球形的.作为反映agent发送一个动作,像drive或者kick。dirve是要求一个给定方向的力作用在身体上,而kick意味着一个从agent出发的放射状的力作用在球上。server每20周期发送一个感觉,每个周期10毫秒。
3.1感觉
agent现在能接收几种感觉。每种感觉信息以字母"S"开头,后面跟着两个整数(time)。第一个周期是感觉发出的周期;第二个周期是信息到达agent的周期。
感觉信息的格式是:
Stime time data
data是感觉信息的字符串[1]。
Vision
视觉提供场地中物体的空间排列。物体包含球员、足球、球门和角旗。在0.2版本中,视觉是全方向视觉并且物体是透明的(至少对视觉)。物体的位置以相对于agent的极坐标形式给出。坐标参数包含距离、水平方向的角度—theta 和垂直方向的角度—phi。
Stime time (Vison
(Flag (id id)(pol d theta phi))...
(Goal (id id)(pol d theta phi))...
(Ball (pol d theta phi))...
(teamname (id id)(pol d theta phi))...
)
GameState
比赛状况提供与比赛有关的信息。它提供场地、球门、球和球员的尺寸。还提供物体的质量和比赛的其他信息:时间、比赛模式、球员号码、球员是左边还是右边的。格式是:
Stime time (GameState
(team side)
(unum number)
(FieldLength length)
(BallMass mass)
(playmode playmode)
...)
AgentState
agent状态提供agent自身内部的信息。现在只提供电池状态和温度。
Stime time (AgentState
(battery battery)
(temp temp)
)
3.2动作
与感觉一样,通过一些动作来实现agent对world的作用。每种动作信息以字母"A"开头,后面是字符串。
Adata
data 包含动作的信息。
Create
这是agent必须发送的第一个动作。这个动作使得server登录agent并创建与agent的通讯。格式如下:
A(create)
Init
这个动作使得server接收agent的详细信息:号码和队名。如果号码是0,server会自动地给agent一个号码。格式如下:
A(init (unum number)(teamname name))
Beam
这个动作使得在比赛之前agent传送到一个给定位置,而不要遵守物理定律。格式如下:
A(beam x y z)
Drive
这个动作使得agent移动。这个动作在agent身体中心产生一个力(x,y,z),最大力量为100.0。格式如下:
A (drive x y z)
Kick
在有重力并遵守物理运动定律的情况下,agent可以用kick动作以给定的力量和方向踢球(见3.4)。垂直方向作为一个参数—垂直方向角。水平方向是以agent身体呈放射状的。这个动作必须这样发送:
A (kick angle force)
3.3其他重要的通讯程序
server发送 done("D")信息表示创建通讯(Riley et al.2003)。agent接收到这条信息后必须执行初始化程序,完成初始化后必须向server发送 initdone("I") 信息。然后,server开始发送感觉信息,agent返回动作。每个动作必须以 done('D')结尾(图4)。
图4—agent和server通讯时间表
如前所述,每20个server周期接收到一个感觉信息,所以agent只能在20个周期内执行动作。然而,不仅仅如此,因为agent可以要求server在指定的周期发送一个 request time notify(R) 感觉信息。信息格式如下:
Rtime
time是server必须回复的周期。这个过程使得server在指定周期返回一个空的感觉信息('T')。如前所述,这样的目的是在两个感觉信息之间的指定时间接收空的感觉信息来执行动作。实验证明如果早于当前周期发送request time notify,server允许任意执行动作。信息格式如下:
Ttime
time仍是server回复的周期。
使request time notify有意义的例子是:当球员想跳起来碰空中的球的时候。因为两条感觉信息之间有200毫秒,有可能周期t时球离agent太远,而周期t+1时球已经传过了。为了越过这个障碍,agent可以预计一个起跳时间,并要求接收一个time notify 信息,实现在恰当的时间实现正确的动作。
3.4物理
版本0.2的rcssserver3D中身体之间的物理作用有一些限制。例如,FC Portugal 3D 仿真足球队发现的一个最大的错误就是所有的身体质量都设为1kg。server的物理不稳定性是约束FC Portugal 3D 仿真足球队进步。
版本0.2的rcssserver3D中,队员是球形身体,半径Rp=0.22m,质量Mp=75kg。足球也是球形的,半径Rb=0.111m,质量Mb=0.4kg。
Drive
在agent的球心产生一个使agent移动的力,持续10ms。如果agent和地面接触只能移动自己。现在还不能跳,至少FC Portugal 3D 仿真足球队做不到。最大力量是100。agent移动的时候受摩擦力的影响:
(1)
并与地面产生转距使之旋转。
图5—作用在agent上的力
Kick
agent最大可踢的距离是Rp+Rb+0.04
图6—kick怎样实现的
kick动作有两个参数——踢球的力量大小和与x-y平面的角度。x-y平面内的角度是放射状的(图6)。kick的时候对球产生一个力和一个力矩。
第4章.FC Portugal agent
FC Portugal 3D Basic Agent是版本0.2的rcssserver发布后不久的不精致的版本。然而一个简单的组织足够开始思考未来的结构。任何尝试使用FC Portugal 2D代码都导致一些问题,但是并不是因为空间维数的增加,而是因为server工作的巨大差别,主要是SPADES和实际物理作用的使用。
4.1 agent 体系机构
图7—FC Portugal 3D Basic Agent的模块
agent的体系结构分为6个主要的包含不同功能的模块(图7)。
World
State
World State模块(图8)是维持agent世界模型的更新。这些信息包含:球的位置,其他人(和自己)的位置,球门的位置,甚至是比分、时间信息也存储在这个模块。
图8—FC Portugal World State图解
这是一个已经使用的结构草图。类World State分为3个主要的类—类GameState、类GameConditions和类Objects。类GameState包含关于比赛的信息,像比分、时间、哪个队开始比赛等等。类GameConditions处理与温度、场地尺寸等相关信息。类Objects是一个保持世界中物体的信息的超级类。类Objects分为两个子类——类Static和类Movable。类Static包含球门和角旗,类Movable包含队员和球。
使用相同的结构预计下个周期的世界模型是值得做的,以此获得运动的物体未来的位置。
Strategy/Positioning
Strategy模块使用已经在FC Portugal 2D中使用的SBSP(Situation Based Strategic Positioning基于战略的跑位)(Reis and Lau 2001)。一般地说,这个方法根据球的位置和场上的情况分配战略位置。跑向球的队员是战略位置[2]距离球最近的球员。每个队员的战略位置不同(Reis,Lau 和Oliveira 2001)。
Low Level Skills
Low Level Skills模块包含agent的基本动作如跑和踢(见3.4)。
Physics
Physics模块在agent端模拟server端的计算。包含物理作用的结果,如:身体的位置、速度、加速度,制动的距离,力量,等。
Geometry
Geometry模块使得几何计算更加简单。用来计算距离、矢量等数据。
Utils
Utils模块完成简单地从server接收/发送信息的任务,并分析接收的信息、构成发送的信息和写log文件。
4.2 agent 概略
agent的主要代码是一个包含接收信息、分析信息(思考)、发送动作的循环。
4.3 底层技术
使用最新版本的3D server,把球踢向某一点,agent必须移动到球和目标点连线的反向延长线上并且与球的距离不超过d的点上。这样对队员的位置要求很高的精确度,因为一点误差就会踢向的就是完全另外一个地方。
为了agent停在指定的位置上,第一步计算制动距离B,设身体质量为m,速度为Vo,最大的反方向作用力F。初始运动方程是:
(2)
(3)
x值必须在(2)中计算出。设xo=0,由于开始位置并不重要,因为目标是距离而不是最终点,制动时间t、加速度a和力F都必须知道。加速度可以这样计算[3]:
(4)
时间t可以由(3)计算出,因为最终期望速度V为0,
(5)
将(4)和(5)代入(2)中得:
(6)
最后,还要根据方程(6)计算出y轴方向的值,因为移动是在两维方向上的。综上,算法如下:
力的大小限制了结束点。这样做的目的是避免agent与球靠很近的时候使用太大的力量导致错过球。同理,制动力取决于与球的距离,避免太大的制动,离球的距离更远了。
4.4 agent 策略
FC Portugal 3D 仿真足球队的agent非常依赖于SBPS组织。比赛之前agent根据号码站位。SBPS的优点是agent不用计算队友的实际位置就知道他们的目标点;因为每个agent都能够通过SBPS算法知道同伴的战略位置。
如果是对方开球,agent什么也不做,直到对方有人碰到球。如果是FC Portugal 3D 仿真足球队开球,SBPS位置中距离球最近的agent跑向开球点。到达开球点后踢球。其他的agent什么也不做,直到前者碰到球。
球被开出以后,比赛模式切换到"PlayOn",比赛开始。在这种模式下,agent按照SBPS算法计算的位置跑位。例外的情况是队员必须踢球,队员必须跑到踢球的位置然后踢球。
第5章.测试和结果
到目前为止,两项主要实验已经完成。第一项是没有对手的情况下一个agent的表现。目标是跑并将球踢向球门射门。结果是令人鼓舞的,因为几乎每次agent都射门得分。
第二项测试,十一个FC Portugal 3D 仿真足球队agent上场,并有两个作为对手。测试包含按照SBPS跑位和射门。成功率下降了但是我们队仍然经常得分。主要障碍是没有犯规;对手agent试图靠近球的时候,把FC Portugal 3D agent挤在外面。虽然如此,队伍跑位表现还是能够接受的。
第6章.未来的工作
FC Portugal 3D使用了一些在FC Portugal 2D中证明是成功的东西:SBPS、底层动作程序和其他如:根据server改进的智能通讯。
第7章.结论
在新的agent中SBPS有很少的变动,在当前server中证明效果很好,展现了足够的灵活性。因而,server还没有完成不能投入使用,FC Portugal目前的队伍很有信心在Lisbon2004取得好成绩。
感谢
参考书目
[1]注意:一条感觉信息可以有多个感觉。
[2]不是当前的位置。
[3]F取负值,因为力和速度方向相反。