陶 瑞, 任鴻翔
(大連海事大學 航海學院, 遼寧 大連 116026)
船舶火災是威脅船舶運營安全的一大隱患,不僅會造成財產損失,還會危及船上人員生命。為檢驗船員對船上各部位可能發生的火災的應急處理能力、對個人應變任務的熟悉程度及應急過程中船員之間的相互支援和協調程度,進行消防演練是很有必要的。[1]目前的船舶消防演習大多是在真實環境中進行的,花費大,污染環境,且受時間、資金等因素的限制,這些演習的實際作用相對有限。
近年來,虛擬現實技術在船舶消防領域的應用引起一定的關注。[2]尤其是針對非常復雜的場景和危險度較高的環境,虛擬現實技術展現出多方面的優勢。[3]固定水滅火系統是船舶必備的一種最基本和最有效的滅火系統。本文對三維場景漫游、虛擬設備交互和虛擬輔助船員路徑規劃等關鍵技術進行研究,基于HTC VIVE虛擬現實頭盔和Unity 3D引擎,開發船舶固定水滅火模擬訓練系統。
當船舶發生火災時,探火及失火報警系統發出警報。全體人員集合,按照應變部署表的要求到達指定集合位置。探火員穿戴消防設備進行探火,根據失火位置及火勢確定滅火措施。當火災發生在貨艙、生活區等密閉空間內時,一般采用固定二氧化碳滅火系統滅火,同時采用固定水滅火系統進行外圍冷卻;當火災發生在甲板等空曠位置時,可直接采用固定水滅火系統滅火。
固定水滅火系統是船舶消防系統的重要組成部分,由消防泵、消防栓、消防水帶、水槍和國際通岸接頭等組成。消防泵通過海水吸入閥吸入船外的海(江、河)水,通過消防水管、消火栓及水帶上的消防水槍將其噴到船上發生火災的部位,達到滅火目的。依據《SOLAS公約》對船舶防火內容的要求,固定水滅火系統的訓練需由多人合作完成,具體訓練內容包括:消防泵開關的操作、槍頭的使用、消防水帶的鋪設與回收和消防栓的使用等。船舶固定水滅火系統訓練流程見圖1。
實現船舶固定水滅火模擬訓練系統主要需完成3項任務,即:建立船舶消防設備的三維模型;實現各船舶消防設備的虛擬漫游和交互操作;使用消防設備完成消防訓練。
固定水滅火系統的訓練需2~4人協作完成。在滅火訓練中,主要考察學員對設備的熟悉程度及學員之間的協作能力。根據實際操作的需要及分工的不同,該系統設定水手1、水手2和水手3等3個角色。水手1負責打開消防泵,消防泵可通過吸入閥吸入船外的海(江、河)水,再通過水帶將其噴到船上任何失火部位;水手2取出水帶鋪設到指定地點,并連接消防栓;水手3取出槍頭,并連接水帶。連接完畢之后,水手2打開消防栓閥門。由于水流流速過快,水帶不易控制,水手2需迅速跑到水手3旁邊輔助其噴水。
為提高系統的靈活性,本文設計兩種協同方式,即:學員與虛擬輔助船員之間的協同和多個學員之間的協同。學員與虛擬輔助船員之間的協同是指學員選擇一個角色,另外2個角色為虛擬輔助船員,學員可通過系統提供的輔助菜單“命令”輔助船員對設備進行操作,學員與虛擬輔助船員“配合”完成訓練;多個學員之間的協同是指3個學員分別以3個水手的角色登錄系統,學員通過局域網協同工作,并可在虛擬場景中看到另外2個學員的操作,3人協同完成訓練。
1.3.1Unity3D
Unity 3D 是一種性能卓越的三維虛擬現實開發平臺,以圖形化開發環境為首要方式,界面友好,具有強大的計算機程序編譯能力。相比其他虛擬現實開發平臺,Unity最大的特點是多平臺開發,現已支持Windows、Mac OS及Android等平臺,故該系統選擇Unity 3D作為開發工具,實現固定水滅火系統的模擬訓練功能。
1.3.2HTC VIVE頭盔
傳統的模擬訓練系統一般使用鍵盤和二自由度的鼠標作為輸入設備,使用二維顯示器或投影屏幕作為輸出顯示設備。考慮到現實世界是三維空間,人們在生活中學習了很多操縱三維物體及在三維空間中運動的技能,能很好地理解三維空間的關系。[4]HTC VIVE頭盔是目前市場上最新的虛擬現實頭盔產品,通過3個部分為用戶提供沉浸式體驗:1個頭戴式顯示器、2個單手持控制器和1個能在空間內同時追蹤顯示器和控制器的定位系統。因此,該系統將HTC VIVE虛擬現實頭盔應用于模擬訓練系統中,通過頭戴顯示器呈現的三維立體場景給用戶更強的沉浸感,利用三維交互方式使人機交互更為自然、和諧。
船舶固定水滅火模擬訓練系統的主要開發流程見圖2。
2.1.1三維場景建模
建立逼真的船舶消防設備三維模型是模擬訓練系統的基礎。本文以巴拿馬型散貨船“長山海”輪為母型船,建立消防控制室及消防設備等三維實體模型。根據《STCW公約》的規定,船上至少配備2臺獨立的消防泵,放置于消防控制站,消防水帶及消防栓按要求放置在船舶上。
前期在“長山海”輪上進行現場拍照和錄像,并收集相關資料,制訂模型制作及命名規則。在此基礎上,制作船舶消防設備的幾何模型,并為模型附上材質和貼圖;隨后,設置燈光位置和強度等對模型進行渲染[5];最后,將所有渲染好的模型整合到船上。圖3和圖4分別為部分消防設備的三維模型及“長山海”整船三維場景模型。
2.1.2立體式界面開發
傳統的“HUD”式UI界面有2個特點[6]:
(1) HUD畫面是離攝像機鏡頭最近的物體,其他物體都會被HUD擋住;
(2) HUD在屏幕上的位置是不變的,且有很多組件在屏幕的邊緣。
這2點在VR中很難被接受。首先,距離太近會使學員的眼睛無法聚焦;其次,VR中的屏幕不是矩形的,邊緣一般比較模糊,因此將UI放在邊緣會看不清楚;同時,若位置是固定的,不受視野控制,則會變得更不自然。
本文采用“立體”式UI代替“HUD”式UI,即UI不再集中于一個平面上。將界面懸浮于VIVE手柄上方,當學員操作界面時,只需低頭或將手柄拿到視野范圍內即可。
該系統的立體界面主要包含環境設置、局域網聯網、導航菜單、輔助命令菜單和設備提示信息等功能。環境設置可設置起火位置、火勢大小和選擇角色等(見圖5);導航菜單位于主界面左上方,可使學員瞬移至整船某個位置,方便學員進行訓練(見圖6);輔助命令菜單位于主界面左上方,與導航菜單之間是互斥關系,實現學員與虛擬船員之間的“溝通”,完成滅火作業(見圖7);提示信息位于主界面右下方,學員操作設備時,在提示信息界面內顯示該設備的相關提示信息,包括設備名稱、當前狀態及操作提示信息等。UI整體布局見圖8。
船上配備有眾多消防栓和消防皮龍箱,當采用學員與虛擬輔助船員協同操作的方式時,學員操作設備的過程與虛擬船員不盡相同。學員通過射線瞬移的方式漫游至各處操作設備,虛擬船員則按照實時規劃的路徑到各處操作設備。本文從場景漫游、虛擬設備交互和路徑規劃等3個方面介紹關鍵技術及實現過程。
2.2.1場景漫游
該系統的漫游方式主要有連續漫游和快速瞬移2種。連續漫游類似于游戲中的角色控制移動,通過手柄圓盤鍵設置固定步長,連續控制視角進行移動。連續漫游的實現比較簡單,在此不再贅述。快速瞬移的基本原理是從手柄上發出一條射線,射線與場景中的甲板或樓梯的相交點即為要瞬移的位置。由于船上空間狹小,當傳統直線瞬移的前方有障礙物或目標位置高于出發點時,相交的傳送點常常不準確,導致學員在使用過程中無法及時完成操作。
為此,采用貝塞爾曲線代替直線實現快速瞬移。當前方有障礙物或目標點高于出發點時,貝塞爾曲線是一條平滑的曲線,將以固定角度和固定長度的連線獲得相交點的位置。
在空間給定n+1個點P0,P1,P2,…,Pn,利用式(1)構建的參數曲線即為n次貝塞爾曲線。[7]稱P0,P1,P2,…,Pn各點為P(t)的控制頂點。
(1)
構造貝塞爾曲線的關鍵在于找到合適的控制點。在該系統中,采用三控制點構造二次參數貝塞爾曲線。設整個場景的世界坐標系為O-XYZ,手柄自身坐標系為O-UVN,在構造貝塞爾曲線之前,將場景中的物體設為可瞬移區域(甲板、樓梯等)和不可瞬移區域(墻壁、貨艙蓋等)。以手柄N軸(手柄的正前方)方向無障礙物為例進行說明(見圖9)。當學員按下手柄的圓盤鍵時,以手柄在虛擬場景中的位置為起點A,向N軸方向發出一條射線L1(長度可根據實際情況調整)。此時進行碰撞判斷,若射線沒有碰撞任何物體,則以射線的終點B為起點,向世界坐標系的Y軸(正上方)反方向發出一條無限長的射線L2。若L2碰撞到的物體為可瞬移區域,則碰撞點即為要傳送的位置C。點A、點B和點C即為需要的控制點。在得到曲線之后,改變其參數u得到一組曲線上的位置。在各位置上放置一個綠色球體,標志可瞬移,實現曲線的可視化(見圖10)。若L2碰撞到的物體為不可瞬移區域,則用紅色球體構造貝塞爾曲線,標志不可瞬移。利用貝塞爾曲線實現快速瞬移的流程見圖11。
2.2.2虛擬設備交互
系統中的設備交互主要為學員通過手柄對虛擬場景中的設備進行操作,交互方式主要有射線方式和觸碰方式2種。前者需判斷手柄發出的射線是否與設備相交,后者需判斷手柄是否與設備“接觸”,若相交或接觸,則學員可對設備進行具體操作。2種交互方式各有特點,其中:射線方式適用于被操作設備較密集的情況;觸碰方式更適用于被操作設備比較分散的情況,如消防栓分散在場景內的多個位置的時候。不論采用哪種方式,都要進行碰撞檢測。
場景中的設備若需感應碰撞,必須為其添加碰撞器。Unity引擎為對象提供盒子碰撞器(Box Colli-der)、球體碰撞器(Sphere Collider)、膠囊碰撞器(Capsule Collider)、網格碰撞器(Mesh Collider)和車輪碰撞器(Wheel Collider)等5種碰撞器。根據物體形狀的特點選擇碰撞器,可減少計算機的計算量,提高系統的流暢度。模擬設備交互操作的過程為
(1) 根據設備位置的不同,選擇適當的交互方式;
(2) 為每個設備添加合適的碰撞器檢測射線或觸碰;
(3) 編寫腳本,當檢測到碰撞時,設備以編輯好的規律運動,實現設備操作的模擬。
2.2.3路徑規劃
船舶空間狹小、結構復雜,船上消防設備眾多。當學員“命令”虛擬輔助船員去某一地點操作設備時,需解決虛擬輔助船員的路徑規劃問題。目前路徑規劃算法有很多,如人工勢場法[8]、遺傳算法[9]及A*算法[10]等。A*算法適用于場景環境信息已知、尋路過程中環境變化較少的情況。針對船舶特定的環境,選擇A*算法進行虛擬船員的路徑規劃。
A*算法是人工智能中典型的啟發搜索算法,利用啟發信息找到以最小的代價通向目標節點的最優路徑。該算法的核心是一個估價函數,即
f(n)=g(n)+h(n)
(2)
式(2)中:f(n)為從起始節點到目標節點的最短路徑的代價和;g(n)為從起始節點到節點n的實際代價;h(n)為從節點n到目標節點的最短路徑的估計代價。
A*尋路網格有基于單元的導航圖、基于可視點的導航圖和導航網格等3種。與前2種導航圖相比,導航網格的優點是可進行精確的點到點移動,這對于船舶空間狹小的環境來說非常適合,故本文采用導航網格。具體實現過程如下。
(1) 網格鋪設。根據“長山海”輪的實際情況,在確定需導航的范圍之后,對模型分層進行標識,分為可行走區域層和障礙物層。給場景中的物體(如地面、樓梯等)添加網格碰撞器。按照物體的層級鋪設導航網格。
(2) 角色設置。為虛擬船員添加角色控制器,防止其在尋路過程中被其他模型穿過。設置虛擬船員的高度和上樓梯坡度等參數,為每名船員添加A*尋路算法的腳本。創建動畫狀態機,根據實際情況切換站立、行走及操作設備等動畫。
(3) 尋路過程。定義一個二維數組保存導航網格中的所有節點。創建2個節點列表,分別將可行走節點和不可行走節點添加到列表中,供A*算法尋路時調用。當學員“命令”虛擬船員打開消防栓時,虛擬船員即從當前節點開始尋路。用估價函數比較當前節點周圍各節點的f值大小,選擇代價較小的節點擴展,直到路徑的目標節點,尋路結束。
2.2.4粒子特效
在固定水滅火系統訓練中,消防槍噴出的水柱及火焰的渲染是一個難點。在虛擬環境中,大部分場景元素(如角色、物件、碰撞體等)都屬于網格模型,一般利用3DS Max和Maya等工具建模,并導入到場景中;但若要在場景中模擬煙霧、火焰、云彩及水滴等效果,則需用到粒子系統。粒子系統會連續、高效地發射大量運動的簡單粒子單元,以模擬各類復雜的自然現象和特技效果。粒子的模擬過程主要包括以下3個步驟:
(1) 初始化。確定模擬對象,分析物體的運動規律,對模擬對象的粒子數及每個粒子的生命值、位置、速度、加速度和顏色等信息進行初值設定。
(2) 繪制。選擇大小合適的紋理,搭配合適的色彩,繪制粒子當前的狀態。
(3) 更新。對所有粒子的生命周期、位置、速度、加速度和顏色等信息進行更新,以便下次繪制。
下面以火焰的渲染為例介紹其實現過程。火焰分為內焰、外焰和煙霧等3部分。在場景中創建3個Particle System分別模擬這3部分的效果。通過調節粒子數、粒子大小和顏色等特征項,在微觀上實現對內焰、外焰和煙霧具體效果的調節;在Photoshop中制作火焰的紋理貼圖,從宏觀上表現火焰的整體效果;調節粒子的生命周期、速度等信息,使火焰符合實際場景,實現火焰的動態效果模擬(見圖12);將三者結合在一起,使火焰模擬的效果更加逼真。水柱效果的實現與火焰效果的實現類似,此處不再贅述。
基于以上技術,開發船舶固定水滅火模擬訓練系統。下面僅以貨艙失火,采用學員與虛擬輔助船員協同的方式開展固定水滅火訓練為例進行說明。
設置起火位置和火勢大小等環境信息(如圖5所示)。按照圖1所示的流程進行演習,學員與虛擬船員分工明確。駕駛室煙霧探測面板發出報警(見圖13),值班駕駛員發出全船警報。在消防控制站打開消防泵,發現消防泵動力失常,“命令”虛擬船員打開應急消防泵(見圖14)。學員漫游至貨艙1,取出水帶,鋪設到指定地點,并連接消防栓;虛擬船員取出槍頭(見圖15),并連接水帶。打開消防栓(見圖16),對貨艙壁進行降溫。待火焰熄滅之后,回收整理消防設備,演習完畢。
學員在操作過程中,系統會完整地記錄相關的操作步驟及結果數據。記錄數據之后,采用專家法與隸屬度函數[11]相結合的方式實現消防訓練的評估。評估方法見文獻[11],此處不再贅述。
本文基于HTC VIVE開發實現固定水滅火模擬訓練系統,可為學員的操作提供更多自由度,捕捉學員的位置和手勢來完成復雜的交互任務。該系統可降低培訓成本,且培訓不再受場地和時間的限制,培訓效果較好。在后續研究中,可關注以下2方面:
1) 本文只針對固定水滅火系統的訓練進行模擬,一個功能完備的船舶消防模擬訓練系統還應包括自動噴水系統、固定二氧化碳滅火系統和固定泡沫滅火系統等其他滅火系統的模擬訓練功能。
2) 提高火焰模擬的逼真度,并引入火災蔓延模型。