林 晨,林曉斌
(閩江學(xué)院 物理學(xué)與電子信息工程系,福建 福州 350108)
基于VIZARD和KBENGINE的多線程虛擬消防演習(xí)系統(tǒng)
林 晨,林曉斌
(閩江學(xué)院 物理學(xué)與電子信息工程系,福建 福州 350108)
城市火災(zāi)頻繁發(fā)生,傳統(tǒng)的消防演習(xí)和宣傳工作存在著難題,隨著虛擬現(xiàn)實(shí)技術(shù)的應(yīng)用發(fā)展,研發(fā)了基于Vizard和KBEngine的多線程虛擬消防演習(xí)系統(tǒng)。添加自定義配置模式完善基于Vizard的虛擬消防演習(xí)系統(tǒng),作為多線程虛擬演習(xí)系統(tǒng)的客戶端,配置客戶端,結(jié)合KBEngine服務(wù)器,實(shí)現(xiàn)多線程客戶端登錄,不同的角色可以使用不同的客戶端登錄,實(shí)現(xiàn)不受地域限制的聯(lián)合虛擬演習(xí)。受訓(xùn)者可不受時(shí)間和空間的限制在高安全、高仿真、低成本、可重復(fù)、生動(dòng)活潑的多線程虛擬消防演習(xí)系統(tǒng)中同步學(xué)習(xí)消防知識(shí),加強(qiáng)消防實(shí)戰(zhàn)經(jīng)驗(yàn),實(shí)現(xiàn)聯(lián)合演習(xí)效果.
Vizard;KBEngine;多線程虛擬消防演習(xí)
虛擬現(xiàn)實(shí)(Virtual Reality,簡(jiǎn)稱VR技術(shù))是高度集成計(jì)算機(jī)圖形、多媒體、傳感器及仿真等技術(shù),模擬生成虛擬世界,提供視聽感知盛宴,使用戶身臨其境,通過多種傳感設(shè)備,用戶可根據(jù)自身感覺同三度空間內(nèi)的事物進(jìn)行交互式信息交流[1].應(yīng)用的領(lǐng)域涉及軍事、科研、教育與訓(xùn)練、商業(yè)、醫(yī)學(xué)、工業(yè)、影視等,進(jìn)而推動(dòng)虛擬現(xiàn)實(shí)的研究和應(yīng)用向縱向發(fā)展.
城市火災(zāi)頻生,已成為城市安全嚴(yán)重隱患之一,時(shí)刻威脅著人們的生命和財(cái)產(chǎn)安全.如何有效地避免火災(zāi)發(fā)生和安全逃離火災(zāi)現(xiàn)場(chǎng)等已成為關(guān)注的焦點(diǎn).消防宣傳和演習(xí)是常用的學(xué)習(xí)消防知識(shí)的方式,前者基于理論層次的宣傳難以讓受訓(xùn)者掌握消防器材的使用、救援的注意事項(xiàng)及正確的逃生方法,后者基于實(shí)踐層次的方式宣傳效果強(qiáng)于前者,但會(huì)產(chǎn)生高額的經(jīng)費(fèi),消耗大量的人力物力財(cái)力,甚至可能導(dǎo)致意外發(fā)生,如人員傷亡等,造成不必要損失[2].
針對(duì)上述情況,將虛擬現(xiàn)實(shí)技術(shù)和消防科學(xué)相結(jié)合,研發(fā)了基于Vizard和KBEngine的多線程虛擬消防演習(xí)系統(tǒng).添加自定義配置模式,使人員、著火點(diǎn)等重要的演練元素可隨意配置,完善基于Vizard的虛擬消防演習(xí)系統(tǒng),作為多線程虛擬演習(xí)系統(tǒng)的客戶端,對(duì)其進(jìn)行配置,運(yùn)用KBEngine服務(wù)器,實(shí)現(xiàn)多線程客戶端登錄,不同的演習(xí)人員均擁有特定的賬號(hào),登錄KBEngine服務(wù)器,讓處于不同地區(qū)的人員實(shí)現(xiàn)同步的消防演習(xí).受訓(xùn)者可不受時(shí)間和空間的限制在高安全、高仿真、低成本、可重復(fù)、生動(dòng)活潑的多線程虛擬消防演習(xí)系統(tǒng)中同步學(xué)習(xí)消防知識(shí),加強(qiáng)消防實(shí)戰(zhàn)經(jīng)驗(yàn),實(shí)現(xiàn)聯(lián)合演習(xí)效果.
Vizard是一款功能強(qiáng)大的虛擬現(xiàn)實(shí)開發(fā)平臺(tái)軟件,由美國(guó)WorldViz公司基于C/C++,運(yùn)用OpenGL擴(kuò)展模塊開發(fā)出的高性能圖形引擎,構(gòu)建及渲染虛擬場(chǎng)景的效率提高,憑其卓越的高效編程核心模塊,將整個(gè)虛擬現(xiàn)實(shí)應(yīng)用引領(lǐng)至一個(gè)高速高效且成本低廉的全新境界.Vizard將集成開發(fā)環(huán)境(IDE)與高級(jí)圖形庫(kù)融合于Python程序語(yǔ)言,集成開發(fā)環(huán)境極大簡(jiǎn)化了維護(hù)數(shù)據(jù)素材的工作量,并提供了用于執(zhí)行實(shí)時(shí)預(yù)覽,場(chǎng)景調(diào)試及腳本調(diào)試工具包.Vizard支持幾乎當(dāng)前所有的虛擬現(xiàn)實(shí)設(shè)備,如動(dòng)作追蹤器,3D立體顯示器等其他眾多外部輸入設(shè)備,還支持業(yè)界標(biāo)準(zhǔn)的各種3D模型格式,內(nèi)建虛擬人物庫(kù)、優(yōu)秀的物理引擎以及良好的擴(kuò)展性.WorldViz旗下VideoVison增強(qiáng)現(xiàn)實(shí)裝置的完美結(jié)合,可輕松實(shí)現(xiàn)計(jì)算機(jī)圖像與現(xiàn)實(shí)場(chǎng)景的融合.采用了Python這款極具發(fā)展?jié)摿τ謽O易上手的語(yǔ)言作為其編程核心,其發(fā)展前景毋庸置疑.
KBENGINE是一款開源的服務(wù)器引擎開發(fā)框架,支持多客戶端同步載入,通過協(xié)議輕松與客戶端進(jìn)行數(shù)據(jù)實(shí)時(shí)交互,實(shí)現(xiàn)各個(gè)客戶端的數(shù)據(jù)同步,支持使用插件可輕松與其他技術(shù)結(jié)合成完整的系統(tǒng).數(shù)據(jù)定時(shí)備份至數(shù)據(jù)庫(kù),服務(wù)器上實(shí)體數(shù)據(jù)會(huì)自動(dòng)在多個(gè)Baseapp之間相互備份,最大化減少災(zāi)難發(fā)生后的損失.它的底層框架由高效的C/C++語(yǔ)言編寫,保證了其在圖形處理方面的優(yōu)勢(shì),Python負(fù)責(zé)框架邏輯層的處理,這一特性決定了其具備跨平臺(tái)使用特性,為開發(fā)者解決了程序移植的煩惱.提供完善的客戶端SDK和接口,客戶端程序只需要簡(jiǎn)單的從服務(wù)端接收數(shù)據(jù)和響應(yīng)事件并進(jìn)行處理.
2.1.1 基于Vizard的虛擬消防演習(xí)系統(tǒng)實(shí)現(xiàn)
基于Vizard的虛擬消防演習(xí)系統(tǒng)由虛擬消防演習(xí)場(chǎng)景模塊、警報(bào)模塊、小地圖功能模塊、火焰與煙霧模擬模塊和角色控制與救援模塊構(gòu)成.虛擬消防演習(xí)場(chǎng)景模塊是利用3DSMAX構(gòu)建虛擬消防演習(xí)場(chǎng)景所需預(yù)制體模型,將其以O(shè)SGB格式導(dǎo)入到Vizard中搭建虛擬消防演習(xí)場(chǎng)景,并對(duì)場(chǎng)景中的一些不夠完美的細(xì)節(jié)之處進(jìn)行優(yōu)化使最終的成品顯得更加真實(shí),更貼近實(shí)際生活,實(shí)現(xiàn)虛擬消防演習(xí)場(chǎng)景漫游.警報(bào)模塊實(shí)現(xiàn)的功能是在模擬演習(xí)開始3秒后會(huì)發(fā)出火災(zāi)警報(bào),在火源全部被撲滅后警報(bào)聲解除,通過調(diào)用命令vizact.ontimer和viz.addAudio實(shí)現(xiàn).小地圖功能模塊實(shí)時(shí)顯示火災(zāi)及傷員動(dòng)態(tài)方向,通過在Vizard中添加攝像機(jī)、渲染UI元素和陰影遮罩等操作實(shí)現(xiàn).火焰與煙霧模擬模塊可逼真地模擬火災(zāi)現(xiàn)場(chǎng)的火焰和煙霧,且特定著火點(diǎn)會(huì)在周邊蔓延新火點(diǎn),通過粒子系統(tǒng)設(shè)計(jì)實(shí)現(xiàn).角色控制與救援模塊實(shí)現(xiàn)系統(tǒng)和玩家對(duì)角色的控制以及根據(jù)不同角色實(shí)現(xiàn)不同的救援技能,通過Vizard中avatar模塊、碰撞機(jī)制和交互模塊設(shè)置實(shí)現(xiàn).設(shè)計(jì)實(shí)現(xiàn)的上述模塊已形成了虛擬消防演習(xí)系統(tǒng)的雛形,在Vizard中編程將其整合,設(shè)置3個(gè)不同難度的選擇模式,它們的人員、著火點(diǎn)等重要的演習(xí)元素配置都是固定的,整合后的系統(tǒng)測(cè)試運(yùn)行效果良好.
為了動(dòng)態(tài)配置虛擬消防演習(xí)系統(tǒng)中的重要演習(xí)元素添加自定義配置模式,使用戶可以根據(jù)實(shí)際的起火情況對(duì)演習(xí)元素進(jìn)行動(dòng)態(tài)的配置,更好的模擬實(shí)際情況.首先對(duì)自定義配置模式的配置界面進(jìn)行制作,然后系統(tǒng)在創(chuàng)建實(shí)體的時(shí)候依據(jù)界面輸入框中的數(shù)據(jù)進(jìn)行動(dòng)態(tài)創(chuàng)建,在界面切換時(shí),生成相應(yīng)實(shí)體,主要是通過調(diào)用命令viz.addText、viz.addTextbox、viz.addButton、<GUI element>.get實(shí)現(xiàn).添加的自定義配置模式完善了基于Vizard的虛擬消防演習(xí)系統(tǒng),作為多線程虛擬演習(xí)系統(tǒng)的客戶端.
2.1.2 多線程虛擬消防演習(xí)系統(tǒng)客戶端配置
由于此虛擬消防演習(xí)系統(tǒng)是多線程,需要通過Kbengine服務(wù)器,使多個(gè)客戶端同時(shí)登錄進(jìn)入同一個(gè)場(chǎng)景,達(dá)到數(shù)據(jù)交互的目的,所以還需為客戶端配置登錄界面.制作登錄界面首先是利用命令viz.addChild加載場(chǎng)景作為登錄界面背景,然后利用vizard自帶的GUIs添加控件,主要使用到命令 viz.addText、viz.addTextbox、viz.addButton 等,為了使每個(gè)控件執(zhí)行相應(yīng)的動(dòng)作,編程python腳本掛載于相應(yīng)的控件上實(shí)現(xiàn)其功能,服務(wù)端會(huì)提供相應(yīng)的接口函數(shù),數(shù)據(jù)庫(kù)如何進(jìn)行處理是我們不需要關(guān)心的,客戶端需配置的登錄界面制作完成,綜合上述兩個(gè)部分多線程虛擬消防演習(xí)系統(tǒng)客戶端功能已全部實(shí)現(xiàn).
2.2.1 服務(wù)端環(huán)境的搭建
KBEnggine服務(wù)器邏輯層是Python實(shí)現(xiàn)的,相應(yīng)的數(shù)據(jù)庫(kù)要支持大小寫敏感服務(wù)器才能夠正常運(yùn)行,所以對(duì)Mysql數(shù)據(jù)庫(kù)的安裝與配置有一些地方就要注意.安裝數(shù)據(jù)庫(kù)前要先安裝Python解析器,再安裝Mysql數(shù)據(jù)庫(kù),并在其安裝目錄中my.ini文件中加入代碼“[mysqld]”和“l(fā)ower_case_table_ names=0”設(shè)置數(shù)據(jù)庫(kù)對(duì)大小寫敏感,然后重啟Mysql服務(wù),最后創(chuàng)建KBE賬號(hào),執(zhí)行配置代碼并禁止空密碼登錄,相應(yīng)配置完成之后,雙擊“!(win)startdemo_server.bat”啟動(dòng)服務(wù)器,雙擊“!(win)startdemo_client_orge.bat”啟動(dòng)客戶端,這樣服務(wù)器環(huán)境就搭建完成,即可進(jìn)行工作.
2.2.2 AI腳本控制人物操作
AI腳本是一種人工智能腳本,可以控制人物操作,對(duì)外部條件的改變進(jìn)行反應(yīng)處理.由服務(wù)器AI腳本控制的人物數(shù)據(jù)會(huì)實(shí)時(shí)同步至每個(gè)客戶端,客戶端接收服務(wù)端數(shù)據(jù)進(jìn)行同步顯示,更有效模擬人物的真實(shí)情況.在此系統(tǒng)中火災(zāi)現(xiàn)場(chǎng)的圍觀群眾使用AI腳本控制其向著火點(diǎn)進(jìn)行移動(dòng),當(dāng)靠近著火點(diǎn)一定距離時(shí),AI腳本會(huì)進(jìn)行碰撞檢測(cè),處于危險(xiǎn)距離內(nèi)的圍觀群眾會(huì)被火擊退一定的距離,主要調(diào)用腳本call StartThread、call PlayGame、call SetDefendPlayer等實(shí)現(xiàn).
2.2.3 服務(wù)端數(shù)據(jù)交換實(shí)現(xiàn)
服務(wù)端上數(shù)據(jù)的交換都是通過實(shí)體實(shí)現(xiàn)的,實(shí)體是通過服務(wù)器上的entities.xml文件進(jìn)行創(chuàng)建的,在entities.xml文件列表里必須有Entity_name.def以及Entity_name.py文件,并對(duì)實(shí)體的三個(gè)部分Client、Cell、Base進(jìn)行配置,同時(shí)要保證客戶端與服務(wù)端的定義文件必須匹配,需要配置實(shí)體的Properties,ClientMethods,BaseMethods,CellMethods等屬性.
2.2.4 登錄界面的交互功能實(shí)現(xiàn)
登錄界面的交互功能是客戶端攜帶特定的IP地址與端口信息先向服務(wù)器發(fā)送登錄請(qǐng)求,服務(wù)器查詢數(shù)據(jù)庫(kù)中服務(wù)器的DBMgr驗(yàn)證用戶名以及密碼,同時(shí)將請(qǐng)求轉(zhuǎn)發(fā)至BaseappMgr,BaseappMgr發(fā)送創(chuàng)建Player Entity的消息到負(fù)載最小的Baseapp,Baseapp會(huì)創(chuàng)建一個(gè)新的Proxy,Proxy的TCP端口途徑 BaseappMgr、DBMgr、Loginapp被返回給客戶端,至此完成登錄流程.從編程角度來(lái)說,客戶端登錄會(huì)調(diào)用login_loginapp()函數(shù),同時(shí)觸發(fā)一個(gè)login事件,等待服務(wù)端登錄的結(jié)果,注冊(cè)與登錄的不同點(diǎn)在于期間會(huì)向數(shù)據(jù)庫(kù)寫入賬號(hào)密碼,從編程角度考慮也是調(diào)用createAccount_loginapp()觸發(fā)一個(gè)createAccount信號(hào),等待服務(wù)端返回結(jié)果.
為了使多線程虛擬消防演習(xí)系統(tǒng)更規(guī)范化,將其客戶端與服務(wù)端進(jìn)行整合.受訓(xùn)者進(jìn)行虛擬演習(xí)時(shí),先跳出登錄界面,根據(jù)選擇的版本,即單機(jī)版演習(xí)還是多人版演習(xí)進(jìn)行場(chǎng)景跳轉(zhuǎn),依次進(jìn)入操作提示場(chǎng)景、選擇模式場(chǎng)景、角色選擇場(chǎng)景、配置場(chǎng)景、然后進(jìn)入主場(chǎng)景進(jìn)行虛擬演習(xí).其中受訓(xùn)者選擇單機(jī)版不會(huì)連接服務(wù)器,選擇多人版客戶端會(huì)通過服務(wù)器進(jìn)行同步,選擇模擬的難易等級(jí),也可自定義演習(xí)難度等.多線程虛擬消防演習(xí)系統(tǒng)如下圖1所示.
圖1 多線程虛擬消防演習(xí)系統(tǒng)圖
基于Vizard和KBEngine的多線程虛擬消防演習(xí)系統(tǒng)集消防科學(xué)知識(shí)、消防演習(xí)實(shí)戰(zhàn)和虛擬現(xiàn)實(shí)于一體,使受訓(xùn)者可以在高安全、高仿真、低成本、可重復(fù)、生動(dòng)活潑的虛擬消防演習(xí)系統(tǒng)中自由地選擇角色和場(chǎng)景,根據(jù)自己所扮演的角色在虛擬消防演習(xí)系統(tǒng)中學(xué)習(xí)消防知識(shí),加強(qiáng)消防實(shí)戰(zhàn)經(jīng)驗(yàn).受訓(xùn)者還可動(dòng)態(tài)配置演習(xí)元素實(shí)現(xiàn)自定義演習(xí)模式,也可多人同步進(jìn)入場(chǎng)景,實(shí)現(xiàn)多線程虛擬消防演習(xí)效果.
〔1〕張菁.虛擬現(xiàn)實(shí)技術(shù)及應(yīng)用[M].北京:清華大學(xué)出版社,2011.24-29.
〔2〕馮成舜,石連栓.虛擬消防演練教學(xué)系統(tǒng)的設(shè)計(jì)與開發(fā)[J].中國(guó)教育技術(shù)裝備,2014,8(16):43-45.
〔3〕Worldviz.Vizard virtual reality software [EB/OL].http://www.worldviz.com/vizard-virtual-reality-software.
TP391;X92
A
1673-260X(2017)10-0067-02
2017-07-18
福建省教育廳課題(JAT160389)
赤峰學(xué)院學(xué)報(bào)·自然科學(xué)版2017年19期