APP下载

基于Vega Prime的虚拟应急救援系统远程通信方法研究

2015-07-27程乃伟董宇佳蒋波沱沈阳航空航天大学安全工程学院沈阳110136

山东工业技术 2015年19期

程乃伟,董宇佳,李 想,蒋波沱,黄 辉(沈阳航空航天大学安全工程学院,沈阳110136)

基于Vega Prime的虚拟应急救援系统远程通信方法研究

程乃伟,董宇佳,李想,蒋波沱,黄辉
(沈阳航空航天大学安全工程学院,沈阳110136)

摘要:本文利用视景驱动引擎Vega Prime模拟出应急救援的场景,采用MFC的单文档应用程序架构,在远程通信方面运用的是数据报套接字并将其通信功能封装成动态链接库。重点介绍了在各个应急小组的界面场景中,所有车辆位置都达到了同步更新,体现了应急救援系统的远程通信。

关键词:Vega Prime;虚拟应急救援;远程通信

0 引言

随着计算机硬件技术以及网络技术的提高,虚拟仿真技术能最大程度上模拟出各类灾害。同时虚拟应急救援系统可以用来检查发现各个应急小组的决策,各个救援人员在应急处置过程中存在的问题,使得整个应急演练科学化、智能化、虚拟化,减少应急演练费用[1]。因此,本文利用视景驱动引擎VegaPrime和套接字技术,构建出事故现场,实现了虚拟应急救援系统中的远程通信。

1 相关内容简单介绍

1.1VegaPrime

VegaPrime是MultiGen-Paradigm公司推出的最新的三维虚拟现实开发工具,具有面向对象、功能强大、界面友好、平台兼容性好等特点[2]。其中LynXPrime界面主要包括实例树的显示区,用户操作区,应用程序区,工具栏菜单区四部分。它使得用户可以轻松的完成从模型的导入、位置状态参数的设定到运动模式的选择、特效的显示、环境的配置、观测者的状态、窗口通道的设定等整个虚拟场景的初始化配置,并可通过实时动态预览参数设置的效果,最后生成acf格式应用文件,可以直接运行也可以在程序中调用。

1.2UDP协议

UDP协议一般采用数据报式套接字,是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。该协议是一种无连接的不可靠的协议,它不对发送的分段做任何的软件检查。UDP的优势在于传输速度,因为它不提供数据传送保证机制,并且用于控制的通讯量很小。

因此,采用UDP协议较为理想。对于UDP协议的不可靠性,可以采用在发送的报头中加入数据长度信息,在接收方对数据进行检验的方法,从而保证了接收数据的可靠性。

2 技术方法

2.1场景的搭建

在LynXPrime界面上将所需的模型包括地形、建筑、车辆等导入到该场景中。根据实际情况调整好坐标(X,Y,Z)和姿态(H,P,R),符合笛卡尔坐标系的右手定则。然后创建火焰特效,这是LynX Prime的实时特效库来配置的,这些都是VegaPrime系统设定好的模块,不需要用户去设定粒子系统模块对象并设置相应的参数,当然消防车的喷水效果需要用户自己调的,因为VegaPrime的粒子系统设定参数比较复杂,而且还涉及到纹理的处理,这不是本文的重点,所以在这里就不多介绍了。

2.2基于MFC单文档架构的VegaPrime程序

构建基于单文档的VegaPrime程序中,有两种方法可以实现,既定时器方法和线程方法。定时器方法主要是基于一个定时器,在设定好的时间内刷新每一帧。而线程的方法是在程序中另外创建一个windows线程,然后将VegaPrime所有的内容写入这个线程里[3]。本次研究是基于定时器方法的,下面是实现的方法。

在CVPView类中添加三个消息映射WM_CREATE、WM_TIMER和WM_SIZE,重载虚函数OnActivateView。在OnCreate函数里实现VP的初始化,OnTimer函数实现VP的帧循环,OnSize函数实现VP窗口大小的更新,OnActivateView函数里获得VP窗口的输入焦点[3],方便之后键盘操作。

2.3通信的建立

本次研究将整个通信功能封装成动态链接库,含有注册通信函数的头文件和通信所需的配置文件,方便了后期组建虚拟应急救援系统的通信网络,同时也实现了场景和通信同步开发,增强了项目开发的效率。

在这个系统中,各个小组之间的通信分为“一对一”的单播通讯和“一对一组”的组播通信。单播通讯主要是各个应急小组向指挥小组发送的消息,组播通讯是各个小组场景实时的更新包括车辆位置、消防车喷水状态、火焰状态和指挥小组向全体应急小组所发的指令消息等。

(1)在主框架类中加载通信的动态连接库,并在OnCreate函数里注册组播通讯。

(2) 在VPView类 的OnTimer函 数 里 调 用getTranslate()和getRotate()这两个函数实时获得车辆位置信息。

(3)自定义一个消息,将获得的车辆位置信息,发送给主框架类,其调用动态链接库的函数,发送组播数据。

(4)接受组播消息也是在主框架类中调用动态链接库的函数,将接收到的网络数据以消息的形式发送给VPView类,VPView类得到消息调用setTranslate()和setRotate()这两个函数,刷新车辆位置。

另外其它的组播消息和单播消息过程类似,只是调用的函数不同罢了。

3 结论

本文基于MFC单文档应用程序框架,结合VegaPrime视景开发,利用其自带的API函数控制场景中的车辆运动。经过实践证明,在整个系统的模拟过程中,使用数据报套接字进行远程通信,能使各个应急小组的场景数据同步更新以及各小组间的能够实时的进行交流,最大程度上还原现实应急救援的过程。另外还可以考虑将模拟演练中的各种信息写入远程的网络数据库上,方便演练之后进行查阅。而研究存在的问题,可进一步完善整个应急救援的过程,从而达到模拟演练的目的。最后,为保证场景渲染的流畅性,应考虑使用高性能的显卡进行模拟。

参考文献:

[1]孙成江,刘林.应急救援模拟演练系统设计与实现初探[J].石油工业计算机应用,2010,67(03):3-6.

[2]王孝平.Vega Prime实时三维虚拟现实开发技术[M].西南交通大学出版社,2007.

[3]赵常寿,韦宏强,樊蓉.基于MFC单文档定时器的Vega Prime应用程序设计[J].电脑编程技巧与维护,2013,17(03):62-64.

作者简介:程乃伟(1960-),男,辽宁沈阳人,硕士,教授,硕士生导师,研究方向:信息化安全技术。