基于RCRSS的可视化研究
作者:卢卓桓
来源:《数字技术与应用》2018年第04期
摘要:本文通过对RoboCup救援仿真平台的Viewers层进行研究,找出RCRSS实现可视化的方法与技术,并应用该平台的可视化技术对仿真地图的显示内容加以补充、修改、删减等,使地图上所呈现的画面更能满足开发人员对仿真整体过程的把握以及对重要信息的获取,从而能提高调试效率,减少开发时间。 关键词:RCRSS;可视化;救援仿真
中图分类号:TP18 文献标识码:A 文章编号:1007-9416(2018)04-0081-04 1 引言
RoboCup Rescue机器人救援仿真系统(RoboCupRescue Simulation System,RCRSS)是用计算机对真实世界的灾难进行模拟,灾难的发生是随机的,如火灾会造成房屋烧毁,市民烧伤;随着火势的蔓延,又会造成道路的堵塞,市民被掩埋甚至被烧死,通信中断等。其运行环境是国际RoboCup委员会提供的标准Server。该平台由多个模块组合而成,分别为:内核(Kemel)、子仿真器(Sub-simulatiors)、地理信息系统(GIS)、显示器(Viewers)和智能体(Agent),如图1所示[1]。其中,Viewers的作用是利用计算机图形学相关技术将整个救援过程可视化,即将仿真的当前状态,包括各种智能体的活动、当前火势、道路的堵塞情况等,以图形显示出来[2]。本文将对Viewers层的实现进行分析,得到其实现方法,并在原来可视化的基础上显示我们所感兴趣的内容。 2 问题描述
在多智能体救援仿真系统中,灾难现场一般会通过2D的图形界面显示出来,其初始化界面如图2所示。从该图最上方一栏可以看到,该图是的名称是Kobe1,有300个仿真周期,有2条信道可供通信, Time为仿真周期,Score为仿真的分数。系统中的智能体用实心的小圆圈来表示:蓝色代表警察,红色代表火警,白色代表救援队员,绿色代表市民。建筑物则是由多边形来表示,深灰色的代表建筑物,浅灰色的代表道路。消防栓、避难所、救护中心、消防中心、警察局都以小图片的形式形象地呈现在地图中。当仿真进行了一段时间后(注:这是火灾现场),房屋将被烧毁,根据不同的燃烧程度,房屋颜色会不一样,颜色越深,房屋的烧毁程度越大。房屋的燃烧会导致坍塌,从而导致道路堵塞,如图3中道路上黑色不规则图形表示路障。市民如果处在燃烧的房屋内,则市民会被烧伤,当市民的血量为零时,市民会死亡。 RCRSS提供了仿真所必需的可视化场景,但对于仿真人员来说,只得到这些信息还远远不够。比如,研究火警(Fire Brigade)的仿真人员想要知道火警的移动路径;研究地图分区的
龙源期刊网 http://www.qikan.com.cn
仿真人员想要直观看出地图上的区域是否按照既定的分区规则正确划分等。而这些信息RCRSS并没有提供,这就需要对系统的Viewers层进行研究,并应用相应的可视化技术将这些信息显示出来。
3 RCRSS的可视化技术 3.1 RCRSS的世界模型
在RCRSS中,世界模型用于记录系统环境中不同种类的对象[3]。比如,地图上一个多边形代表一间房屋,并具有房屋的一系列性质,如大小,位置,烧伤程度等。各智能体在每个仿真周期都会通过自己获取的信息构建并更新一个代表自身周围世界环境灾害信息的世界模型。这个世界模型包括智能体ID、智能体自身信息、周围环境信息、仿真时间等。
在世界模型中,每种智能体、物体、房屋、道路等都有一个属于自己且独一无二的ID。所以,Viewers在具体显示某一Entity(如房屋,道路,障碍等)或Agent(智能体)时,是通过ID来得到该Entity或Agent的相关属性,进而通过特定的可视化技术将其显示在仿真地图上。
3.2 图形图像绘制技术
RCRSS可视化仿真平台使用Java语言进行开发,图形的绘制采用Java 2D技术。Java 2D提供了实现非常复杂图形的机制,这些机制同Java平台的GUI体系结构很好地集成在一起。其中,在具体绘制图形时多采用Graphics2D类。
Graphics2D类在保留了Graphics类的绘图方法的基础上增加了许多新的方法。新方法将几何图形作为对象来绘制。在java.awt.geom包中声明的一系列类,分别用于创建各种身体图形对象。常用的主要有:Line2D(线段类)、RoundRectangle2D(圆角矩形类)、Ellipse2D(椭圆类)、Arc2D(圆弧类)、QuadCurve2D(二次曲线类)、CubicCurve2D(三次曲线类)。 在RCRSS的Viewers中,每一图层正是由线,矩形,圆形等基本图形绘制而成的,比如智能体是一个小圆圈,房屋是一个多边形等,再根据不同的属性将图形涂上不同的颜色。而一幅复杂的画面则是由各个简单图层叠加而成的。
所以,在实现自己的图层绘制时,同样可以使用Graphics2D类进行基本图形的绘制,并且,使用此方法与原来平台的方法一致,可以完美地与原有可视化内容结合起来。例如,画一条线段使用:Line2D line = new Line2D.Double(x1, y1, x2, y2); 画一个矩形则使用:Rectangle2D rect = new Rectangle2D.Double(x1, y1, x2, y2)。 3.3 画面合成技术
龙源期刊网 http://www.qikan.com.cn
RCRSS的Viewers是实时地,动态地显示着整个灾难发生及救援的过程。在这个过程中,房屋会被烧毁,道路会被堵塞,这些现象通过颜色和图形的变化体现出来,而智能体的救援行动则是通过智能体的移动体现出来。仅在一张图层上表现出动态复杂的图像及动画显然是比较困难的。实际上,Viewers是由多个图层叠加在一起后再显示出一幅完整的,实时更新的图像的,如图4。
这样一来,一幅复杂的图像,便可以分解为一张一张简单的图层。在RCRSS中,最终呈现在我们眼前的地图是由以下的图层构成的:
BuildingLayer(建筑图层):该图层用来画出建筑物,通过填充不同的颜色来表明建筑的烧伤程度或损坏程度;
RoadLayer(道路图层):该图层用来画出道路;
RoadBlockageLayer(道路堵塞图层):该图层用来画出道路上的堵塞物,即路障。 AreaIconLayer(建筑图标图层):该图层用来显示出地图上的小图片,用小图片代表警察局、消防中心、救援中心、消防栓和避难所等。
AnimatedHumanLayer(动画人物图层):该图层用来画出三种智能体和市民,随着智能体和市民的移动,该图层会不断更新重绘。
PositionHistoryLayer(历史轨迹图层):该图层用来显示出智能体自上一周期到本周期的行走轨迹。
同样的,我们在绘制的时候只需要绘制简单的图层,最终再按一定规则将图层叠加成一幅复杂的图像。RCRSS平台已经给开发人员提供了增加图层的方法:public void addLayer(ViewLayer layer),当开发人员要往地图中增加图层时,只需要绘制好自己的图层,然后调用该方法,便能将图层加到地图中,实现一定的叠加效果。 4 可视化的实现
本节将通过几个例子对RCRSS可视化的实现做一些具体的介绍。 4.1 路径可视化
路径规划在救援仿真中占有十分重要的地位,特别是对于警察清障来说,如何快速地连通整个灾难现场,为火警和救援队员清理出最高效率的路线,帮助其快速到达救援目的地是实现有效救援工作的前提。
龙源期刊网 http://www.qikan.com.cn
仿真人员通过路径规划算法得到的路径一般是以路的ID的形式储存起来。那么,首先需要将ID转换为坐标,RCRSS平台已经提供了转换的方法,转换的函数是: public Pair getLocation(@Nonnull StandardEntity entity)
该函数的返回一个数对,即是坐标点;参数是地图中的实物entity,类型是StandardEntity。接着,需要根据ID找到对应的实物entity,转换方法是: public StandardEntity getEntity(@Nonnull EntityID entityID)
由此得到的坐标并不是世界坐标,只是屏幕坐标,所以接下来要把坐标做一个转换,映射到世界坐标上,才能绘出坐标点。比赛平台提供了一个处理世界坐标和屏幕坐标之间转换的类ScreenTransform,直接使用该类便能直接在地图上绘出点来,将坐标点两两连线则构成了一条路径。实现步骤如图5。
图6为一个火警的路径,其目的地用一个方形绘制出来。 4.2 分区可视化
分区策略在救援仿真系统中已经成为了一种主流策略。
分区可视化的目标是要把几个不同的分区用不同的颜色渲染,从而使开发人员能一目了然知道分区的结果,进而判断分区算法的有效性和可行性。
分区后数据一般是以建筑ID的形式储存起来,同一分区的数据储存在一个列表中。这样,有了同一分区建筑的ID,那么,我们就可以将一个分区的ID染上一种颜色。其实现流程图如图7,示例代码如下:
private void drawPartition(Building b, Polygon shape, Graphics2D g){ ……
for(int j=0;j
if(b.getID().getValue()==partitionData[j]) { g.setColor(rendercolor.get(i)); //选色 g.fill(shape); //填充 }
龙源期刊网 http://www.qikan.com.cn
…… } }
图8为警察分区结果。 4.3 目标物寻找可视化
目标物寻找可视化是通过Entity的ID检索到Entity的位置并在地图上以其他显眼的颜色标记出来,使调试人员能方便、迅速地找到相应的Entity。
当调试人员输入ID时,程序先把ID存放在列表中,然后与地图上所有Entity的ID逐一比较,当找到对应的Entity时则把该Entity染上其他显眼的颜色。实现流程图如图9所示,示例代码如下:
private void drawRoad(Road r, Polygon shape, Graphics2D g){ if(r.getID().getValue()==Integer.parseInt(id)) { g.setColor(color); g.fill(shape); } }
该段代码为寻找某一路段。 图10为目标物的寻找结果。 5 结语
RoboCup Rescue救援仿真系统是一种典型的多智能体异构系统,近年来已经成为最活跃的研究热点之一。RCRSS一方面能够推进人工智能等相关领域的发展,另一方面能够为人们实际的救援行动提供决策支持,帮助我们创造一个安全的社会。其中,对RCRSS的可视化研究可以帮助开发人员进行调试,判断算法的好坏,从而提高开发效率,减少开发时间,有着至关重要的作用。因此,基于RCRSS的可视化研究有着深刻的意义和重要的价值。 参考文献
龙源期刊网 http://www.qikan.com.cn
[1]RoboCupRescue Technical Committee. RoboCup-Rescue Simulator Manual [M]. RoboCup Rescue Technical Committee, 2000-7-1.
[2]管大琦.动态不确定环境下消防策略的研究与系统仿真[D].南京:东南大学机械工程学院,2009.
[3]吴云标.RoboCup救援仿真比赛的消防策略和消防智能体任务分配研究[D].广东工业大学,2011.
因篇幅问题不能全部显示,请点此查看更多更全内容