吳可玉,莊建軍,2,徐琳玲
(1.南京大學(xué) 電子科學(xué)與工程學(xué)院,江蘇 南京 210023;2.南京信息工程大學(xué) 工程訓(xùn)練中心,江蘇 南京 210044)
火災(zāi)是威脅公共安全、危害大眾生命財(cái)產(chǎn)的災(zāi)害之一。從火災(zāi)發(fā)生的原因來(lái)看,80%以上的火災(zāi)是由于公眾消防意識(shí)薄弱、缺乏相關(guān)消防常識(shí)、違反安全操作規(guī)范等人為因素引發(fā)的[1]。而從特重大火災(zāi)人員傷亡情況來(lái)看,多數(shù)是由于大眾缺乏消防安全知識(shí)和火災(zāi)逃生自救技能,沒(méi)能及時(shí)逃離火場(chǎng)造成的[2]。因此,針對(duì)大眾特別是學(xué)生等聚集性群體進(jìn)行消防知識(shí)普及和消防訓(xùn)練意義重大。傳統(tǒng)消防演練和逃生訓(xùn)練,由于受時(shí)間、場(chǎng)地、安全、成本、專(zhuān)業(yè)性等因素限制,無(wú)法經(jīng)常性、大范圍開(kāi)展,其作用范圍和效果有限[3]。隨著虛擬現(xiàn)實(shí)技術(shù)的出現(xiàn),消防訓(xùn)練方式也迎來(lái)了發(fā)展的新機(jī)遇。
基于虛擬現(xiàn)實(shí)平臺(tái)的消防訓(xùn)練系統(tǒng)為消防安全教育提供了新手段[4]。虛擬現(xiàn)實(shí)技術(shù)可以為訓(xùn)練者構(gòu)建逼真的虛擬訓(xùn)練場(chǎng)景,使其在虛擬消防場(chǎng)景中強(qiáng)化訓(xùn)練自己的火災(zāi)逃生能力。本文基于Unity 3D 虛擬現(xiàn)實(shí)平臺(tái),針對(duì)消防訓(xùn)練與安全教育的要求和流程,開(kāi)發(fā)了一個(gè)虛擬現(xiàn)實(shí)系統(tǒng)。該系統(tǒng)以3ds Max 為基礎(chǔ)建立三維模型,導(dǎo)入U(xiǎn)nity 3D 后搭建出不同的室內(nèi)、室外典型消防訓(xùn)練場(chǎng)景,利用C#語(yǔ)言進(jìn)行腳本編程,實(shí)現(xiàn)用戶和場(chǎng)景的交互,最后在PC 和HTC VIVE 同步發(fā)布。另外,為了增強(qiáng)真實(shí)性和體驗(yàn)感,系統(tǒng)還利用MAX30102 傳感器模塊實(shí)時(shí)采集受訓(xùn)者的心率和血氧信號(hào)。經(jīng)驗(yàn)證,系統(tǒng)具有很好的交互性和沉浸感,一定程度上可以彌補(bǔ)傳統(tǒng)消防訓(xùn)練的不足。
該系統(tǒng)結(jié)合現(xiàn)實(shí)生活中可能發(fā)生的火災(zāi)典型場(chǎng)景,模擬出實(shí)際的火場(chǎng)狀況用于對(duì)大眾進(jìn)行訓(xùn)練。整個(gè)系統(tǒng)包括大眾教育訓(xùn)練和生理信號(hào)采集兩個(gè)模塊,系統(tǒng)的整體框架如圖1 所示。
圖1 虛擬消防與安全教育系統(tǒng)整體框架
大眾教育訓(xùn)練模塊包括消防安全知識(shí)教育和典型火災(zāi)訓(xùn)練場(chǎng)景。針對(duì)當(dāng)下大眾消防自救能力薄弱的情況,系統(tǒng)中設(shè)計(jì)了消防知識(shí)教育及相關(guān)的模擬訓(xùn)練,以幫助大眾強(qiáng)化災(zāi)害自救能力。另外,連接HTC VIVE頭顯后,使用者可以利用手柄操控自己的行動(dòng),完成相關(guān)訓(xùn)練。生理信號(hào)采集模塊用于對(duì)系統(tǒng)使用者進(jìn)行心率和血氧信息的實(shí)時(shí)采集和顯示,以增加訓(xùn)練者使用過(guò)程中的真實(shí)性和體驗(yàn)感。
虛擬現(xiàn)實(shí)(virtual reality,VR)技術(shù)是一種可以創(chuàng)建和體驗(yàn)虛擬世界的計(jì)算機(jī)仿真技術(shù),能夠感知參與者的相關(guān)位置和動(dòng)作,替代或增強(qiáng)一種或多種感官反饋,從而產(chǎn)生一種精神沉浸于或出現(xiàn)在虛擬情境中的感覺(jué)。虛擬現(xiàn)實(shí)技術(shù)有三個(gè)顯著特點(diǎn):交互性、沉浸性和構(gòu)想性,這些特點(diǎn)使虛擬現(xiàn)實(shí)技術(shù)的應(yīng)用愈發(fā)廣泛。本系統(tǒng)主要通過(guò)HTC VIVE 設(shè)備來(lái)實(shí)現(xiàn)虛擬現(xiàn)實(shí)的沉浸效果。
Unity3D 支持導(dǎo)入FBX、OBJ 等格式的模型,只需導(dǎo)入由3ds Max 建立并渲染后的三維模型[5],再添加一些場(chǎng)景元素,即可搭建逼真的虛擬現(xiàn)實(shí)消防訓(xùn)練場(chǎng)景。Unity3D 支持C#、JavaScript 等多種編程語(yǔ)言,可以實(shí)現(xiàn)對(duì)多種典型消防場(chǎng)景的自定義。本系統(tǒng)主要采用C#語(yǔ)言進(jìn)行內(nèi)容的編寫(xiě)。Unity 3D 具有跨平臺(tái)能力,可以很好地兼容Android、Windows、HTC VIVE等平臺(tái)[6]。
本系統(tǒng)采用MAX30102 傳感器作為生理信號(hào)采集模塊。MAX30102 是一個(gè)高度集成的血氧濃度和心率傳感器,廣泛應(yīng)用于各類(lèi)可穿戴設(shè)備中,其工作原理是血氧飽和度測(cè)量法。由于含氧血紅蛋白和無(wú)氧血紅蛋白對(duì)于紅光和紅外光的吸收能力不同,傳感器通過(guò)發(fā)射紅光和紅外光脈沖,再用光電二極管檢測(cè)被人體組織反射回來(lái)的光強(qiáng),就可計(jì)算出含氧血紅蛋白(C2HbO)與去氧血紅蛋白(CHb)的相對(duì)含量[7],進(jìn)而計(jì)算出血氧飽和度SaO2[8],如公式(1)。而心臟的每一次收縮和擴(kuò)張都會(huì)引起脈搏的波動(dòng),通過(guò)檢測(cè)和計(jì)算脈搏波的波動(dòng)頻率便可得到心率。
傳感器內(nèi)部集成有兩個(gè) LED,分別發(fā)出波長(zhǎng)660 nm 的紅光和波長(zhǎng)880 nm 的紅外光,同時(shí)還帶有環(huán)境光抑制和溫度補(bǔ)償功能。生理信號(hào)采集模塊集成了玻璃蓋板等光學(xué)元件,通過(guò)對(duì)內(nèi)部寄存器的設(shè)置,可以完全控制模塊的各項(xiàng)參數(shù),以適應(yīng)各種場(chǎng)景的使用需求。環(huán)境光抑制模塊內(nèi)部有跟蹤/保持電路,在消除環(huán)境光噪聲影響的同時(shí),可增加有效測(cè)量值的動(dòng)態(tài)范圍。芯片內(nèi)部還集成了I2C 通信模塊,用于連接微控制器或處理機(jī)進(jìn)行數(shù)據(jù)傳輸。在采集到相關(guān)生理信號(hào)后,利用STM32F103 單片機(jī)實(shí)現(xiàn)數(shù)據(jù)的讀取和處理,并通過(guò)串口傳送至電腦中。
將利用3ds Max 建模軟件制作的模型導(dǎo)入U(xiǎn)nity 3D 平臺(tái),即可構(gòu)建相關(guān)的訓(xùn)練場(chǎng)景。Unity 3D 主要依托Visual Studio 套件中的C#語(yǔ)言進(jìn)行內(nèi)容編寫(xiě),可以自定義所需的消防訓(xùn)練內(nèi)容。再利用串口通信將MAX30102 心率傳感器與Unity 3D 連接,即可實(shí)時(shí)檢測(cè)使用者的心率和血氧飽和度。最后將系統(tǒng)的整體內(nèi)容與HTC VIVE 虛擬現(xiàn)實(shí)眼鏡互連,實(shí)現(xiàn)沉浸式的虛擬現(xiàn)實(shí)體驗(yàn)。本系統(tǒng)的開(kāi)發(fā)技術(shù)路線如圖2 所示。
圖2 系統(tǒng)開(kāi)發(fā)技術(shù)路線
在3ds Max 軟件中完成建模和渲染并導(dǎo)入U(xiǎn)nity 3D 后,即可進(jìn)行相關(guān)場(chǎng)景的搭建和編程[9]。大眾消防訓(xùn)練場(chǎng)景主要包括室內(nèi)和室外兩種。
3.1.1 室內(nèi)訓(xùn)練場(chǎng)景
室內(nèi)訓(xùn)練場(chǎng)景主要針對(duì)處于室內(nèi)的消防演練,包括消防知識(shí)教育場(chǎng)景、火災(zāi)隱患排查場(chǎng)景以及典型室內(nèi)火災(zāi)場(chǎng)景。消防知識(shí)教育場(chǎng)景使用Unity 3D 中的UI 面板進(jìn)行制作[10],利用 Visual Studio 的C#語(yǔ)言進(jìn)行開(kāi)發(fā),涵蓋消防逃生須知的知識(shí)點(diǎn)?;馂?zāi)隱患排查場(chǎng)景主要針對(duì)家庭場(chǎng)景,對(duì)家中可能存在的隱患進(jìn)行排查,鍛煉使用者的隱患發(fā)現(xiàn)能力。
典型火災(zāi)場(chǎng)景中的火災(zāi)逃生訓(xùn)練主要針對(duì)家庭、學(xué)校和辦公區(qū)等人流密集處而設(shè)計(jì),均為消防自救和訓(xùn)練的典型場(chǎng)景。常見(jiàn)的火災(zāi)自救操作步驟如下:第一時(shí)間撥打火警電話、關(guān)閉電閘;用濕毛巾捂住口鼻;在煙霧中壓低身子前進(jìn);禁止乘坐電梯……以上步驟均可根據(jù)不同的操作需求進(jìn)行增減。訓(xùn)練場(chǎng)景以常見(jiàn)的火災(zāi)自救操作步驟為依據(jù),在每個(gè)場(chǎng)景中設(shè)計(jì)了不同的操作點(diǎn)。指示性面板利用Unity 3D 中的UI 面板進(jìn)行制作,其中Canvas 組件控制整個(gè)UI 面板的結(jié)構(gòu),Button 組件控制面板按鈕。UI 面板也可進(jìn)行相應(yīng)的場(chǎng)景切換[11]。人物的移動(dòng)設(shè)計(jì)采用第一人稱(chēng)漫游方式,導(dǎo)入相關(guān)人體模型后,將Main Camera 置于人物頭部,即可實(shí)現(xiàn)帶模型的第一人稱(chēng)漫游[12]。
場(chǎng)景中的火、煙和水的效果都采用內(nèi)置的粒子系統(tǒng)(particle system),導(dǎo)入相關(guān)特效后,結(jié)合所需情境,控制火的燃燒、煙的彌漫和水將火撲滅的效果。
3.1.2 室外訓(xùn)練場(chǎng)景
室外訓(xùn)練場(chǎng)景針對(duì)的是地形規(guī)模較大的室外場(chǎng)景,為了還原真實(shí)的地貌地形,除了利用3ds Max 中導(dǎo)入的模型以及建立相應(yīng)的逃生步驟之外,還需要使用插件對(duì)真實(shí)地形進(jìn)行復(fù)刻。
對(duì)于較大規(guī)模的地形重建可以采用 Worldcomposer 插件,運(yùn)用位高圖與衛(wèi)星圖來(lái)創(chuàng)建地形。首先在Unity 3D 中導(dǎo)入該插件,在BingMap 中申請(qǐng)到許可Key,通過(guò)衛(wèi)星圖掃描定位,如圖3,放大后截取所需部分的地形圖,點(diǎn)擊導(dǎo)入高度(import height)和導(dǎo)入圖像(import picture),由插件處理后輸出高度和圖像數(shù)據(jù)。數(shù)據(jù)采集完成后點(diǎn)擊創(chuàng)建地形(create terrain),即可建立地形并開(kāi)始渲染(見(jiàn)圖4)。最后查找相關(guān)資料確認(rèn)對(duì)應(yīng)地形的植被,找到相似的建模導(dǎo)入U(xiǎn)nity 3D,并在相應(yīng)地形上進(jìn)行添加。
對(duì)于虛擬場(chǎng)景的完整搭建,可嘗試將多種地形整合起來(lái)。以森林為例,可選取典型的森林地形,如峽谷、洼地、山脊等。通過(guò)調(diào)整地形(terrain)參數(shù),選擇質(zhì)地(texture)以及天空盒(skybox)的不同貼圖,對(duì)樹(shù)木花草等不同植被進(jìn)行導(dǎo)入,再導(dǎo)入河流、火的粒子系統(tǒng)等組件[13],盡量實(shí)現(xiàn)對(duì)森林場(chǎng)景的全覆蓋,以達(dá)到訓(xùn)練多樣化、全面化的目的。
圖3 Worldcomposer 插件界面圖
圖4 使用Worldcomposer 插件建立的地形示例
為了增加用戶在訓(xùn)練過(guò)程中的真實(shí)性和體驗(yàn)感,系統(tǒng)選用Maxim Integrated 公司的MAX30102 心率血氧傳感器模塊實(shí)時(shí)采集、計(jì)算用戶的血氧濃度和心率,實(shí)現(xiàn)對(duì)受訓(xùn)者生理信號(hào)的實(shí)時(shí)檢測(cè)。整個(gè)生理信號(hào)檢測(cè)過(guò)程的框圖如圖5 所示。
圖5 生理信號(hào)采集框圖
實(shí)際工作中,以STM32F103 單片機(jī)實(shí)現(xiàn)對(duì)傳感器的數(shù)據(jù)讀取、處理和計(jì)算,電腦作為上位機(jī),在Unity 3D 平臺(tái)中對(duì)串口發(fā)送的數(shù)據(jù)進(jìn)行讀取,再在Unity 3D平臺(tái)中添加顯示數(shù)據(jù)的相關(guān)UI 面板,使血氧飽和度和心率數(shù)據(jù)實(shí)時(shí)顯示在訓(xùn)練場(chǎng)景中,使用者在使用中可以時(shí)刻觀察和了解自己的生命體征信息。
開(kāi)發(fā)時(shí),在.Net2.0 及以上版本直接使用SerialPort類(lèi)對(duì)串口進(jìn)行讀寫(xiě)操作。SerialPort 類(lèi)的屬性主要包括:串口名稱(chēng)(PortName)、波特率(BaudRate)、數(shù)據(jù)位(DataBits)、停止位(StopBits)、奇偶校驗(yàn)(Parity)。SerialPort 類(lèi)的事件主要包括:DataReceived(用于異步接收串口數(shù)據(jù)事件)以及 ErrorReceived(錯(cuò)誤處理事件)。SerialPort 類(lèi)的方法主要包括:Open()、Close()、Read()、Write()、DiscardInBuffer()、DiscardOutBuffer()等。
在Unity 3D 中完成相關(guān)場(chǎng)景內(nèi)容的搭建后,利用VRTK 套件與HTC VIVE 設(shè)備進(jìn)行交互,即可實(shí)現(xiàn)真正的虛擬現(xiàn)實(shí)訓(xùn)練場(chǎng)景。
本系統(tǒng)采用的是HTC VIVE 的PC 經(jīng)典版本的虛擬現(xiàn)實(shí)眼鏡。配置兩個(gè)移動(dòng)操作手柄以及一個(gè)虛擬現(xiàn)實(shí)頭顯。此設(shè)備可以實(shí)現(xiàn)大部分虛擬現(xiàn)實(shí)火災(zāi)場(chǎng)景所需的功能[14]。Unity 3D 為開(kāi)發(fā)者提供了虛擬現(xiàn)實(shí)的相關(guān) API 接口,可以將軟件中的內(nèi)容發(fā)布到對(duì)應(yīng)的虛擬現(xiàn)實(shí)眼鏡上。通過(guò)現(xiàn)有集成的VRTK 套件和Steam VR Plugin 軟件,可以實(shí)現(xiàn)基本的虛擬現(xiàn)實(shí)操作。本系統(tǒng)涉及的虛擬現(xiàn)實(shí)操作包括手柄對(duì)物體的抓取、手柄發(fā)射射線以及移動(dòng)等。
首先將VRTK 集成腳本導(dǎo)入U(xiǎn)nity 3D,再為場(chǎng)景創(chuàng)建虛擬現(xiàn)實(shí)環(huán)境。調(diào)用 VRTK 腳本中的 VRTK_ ControllerEvents,此腳本中聲明了虛擬現(xiàn)實(shí)環(huán)境中的操作事件。主要功能包括:VRTK_Interact Grab(抓取所需物體)、VRTK_Interact Touch(觸摸所需物體)、VRTK_Interact Use(可使用特定物體,扣動(dòng)手柄扳機(jī)啟動(dòng))、Controller_SimplePointer(遠(yuǎn)程定點(diǎn)移動(dòng))[15]。對(duì)于所需的功能,VRTK 套件中進(jìn)行了大量定義,可依據(jù)不同需求對(duì)照說(shuō)明文件進(jìn)行相關(guān)調(diào)用和修改。
本文設(shè)計(jì)了一套基于Unity 3D 的虛擬消防與安全教育系統(tǒng),包括消防教育訓(xùn)練和實(shí)時(shí)生理信號(hào)檢測(cè)功能,并將Unity 3D 平臺(tái)內(nèi)容發(fā)布至HTC VIVE 虛擬現(xiàn)實(shí)眼鏡中。此虛擬現(xiàn)實(shí)系統(tǒng)可對(duì)普通民眾進(jìn)行消防安 全教育,并可作為消防訓(xùn)練的輔助手段。
本系統(tǒng)的生理檢測(cè)部分目前使用串口通信,未來(lái)可考慮增加Wi-Fi 或藍(lán)牙模塊,實(shí)現(xiàn)穿戴式生理信號(hào)的無(wú)線傳輸,增加系統(tǒng)的靈活性和舒適性。另外,目前系統(tǒng)內(nèi)的場(chǎng)景內(nèi)容相對(duì)固定,下一步可以改進(jìn)模型,使著火點(diǎn)的設(shè)置、火勢(shì)大小的調(diào)節(jié)、起火原因的選擇等可隨機(jī)出現(xiàn),讓訓(xùn)練者根據(jù)情況靈活判斷最佳的逃生路線,增加系統(tǒng)的交互性和實(shí)用性。
實(shí)驗(yàn)技術(shù)與管理2020年12期