蔣效彬,譚家萬,任鴻翔,邱紹楊
(1. 大連海事大學 航海動態(tài)仿真和控制交通行業(yè)重點實驗室,遼寧 大連 116026;2. 重慶交通大學 航運與船舶工程學院,重慶 400074)
錨機和絞纜機(統(tǒng)稱錨機)是船舶操縱的重要機械設(shè)備。由于錨機是由眾多部件組成的復雜系統(tǒng),且價格昂貴,操作危險性較大,同時受場地、時間等因素限制,目前各航海院校在對船員教學培訓中基本沒有真實錨機供船員操作,導致船員對錨機使用操作和檢查維護培訓嚴重不足。近年來,虛擬現(xiàn)實技術(shù)快速發(fā)展,利用該技術(shù)開發(fā)出具有沉浸感和交互性的錨機交互仿真系統(tǒng)可較好解決上述問題。此外, 2010年發(fā)布的STCW公約馬尼拉修正案B部分中增加了“船上工作的船長和駕駛員培訓指南”[1],指南中明確提出應使用錨操作模擬器對船員進行培訓。
國內(nèi)外學者研究了虛擬現(xiàn)實中的某項技術(shù),為開發(fā)船用錨機交互仿真系統(tǒng)打下了基礎(chǔ)。比如:李從信等[2]通過研究虛擬人技術(shù),將反向動力學應用到仿真系統(tǒng)中,并取得了不錯效果;郝會龍等[3]將A*算法應用到虛擬船員路徑規(guī)劃中;M.MüLLER等[4]提出了一種連續(xù)碰撞檢測方法,能處理可變形物體在迭代計算步長之間的碰撞檢測問題;高麗娜等[5]將場景中的物體剖分成三角形,并將問題轉(zhuǎn)化為點與三角形之間碰撞檢測問題,減少了計算量,提高了計算效率;雷林等[6]建立起ST OFFSHORE錨的三維模型并對其結(jié)構(gòu)強度進行了分析;鄒川等[7]建立了錨絞機和起貨機的液壓管路系統(tǒng)和控制單元三維模型,開發(fā)出了虛擬現(xiàn)實仿真系統(tǒng)。
筆者對虛擬人動畫、自動尋路及碰撞檢測等關(guān)鍵技術(shù)進行了深入研究,應用以上技術(shù)開發(fā)了錨機交互仿真系統(tǒng),實現(xiàn)了對船用錨機虛擬場景漫游和三維人機交互功能,并集成到航海模擬器中。
為提高錨機仿真系統(tǒng)的 真實感、沉浸感和交互性,筆者從系統(tǒng)需求分析入手,分別從支持技術(shù)層、開發(fā)工具層和顯示應用層這3個層級進行系統(tǒng)模塊設(shè)計。以虛擬人技術(shù)、粒子系統(tǒng)、物理引擎、網(wǎng)絡(luò)技術(shù)等作為底層技術(shù)支持,把5×104t級散貨船“長山?!弊鳛槟复?,采用3DS Max軟件建立船體、錨設(shè)備、系泊設(shè)備的三維模型,利用Unity 3D引擎模擬錨機相關(guān)功能, 建立錨機和絞纜機操作訓練系統(tǒng)。系統(tǒng)結(jié)構(gòu)如圖1。
圖1 系統(tǒng)總體架構(gòu)Fig. 1 Overall architecture of the system
虛擬人技術(shù)是人工智能技術(shù)與計算機圖形學科的綜合運用,該技術(shù)通過虛擬現(xiàn)實中人與物理環(huán)境產(chǎn)生動作行為,在虛擬現(xiàn)實中通過行為控制來模擬人的動作。筆者在分析人物行走、操縱、旋轉(zhuǎn)、攀爬等動作基礎(chǔ)上,采用骨骼蒙皮技術(shù)建立起虛擬人幾何模型,并通過旋轉(zhuǎn)骨骼關(guān)節(jié)實現(xiàn)虛擬人動畫顯示。反向動力學可提高操作位置的精確性及虛擬人動作解算效率,筆者采用反動力學實現(xiàn)虛擬人動作模擬。其姿勢由各骨骼關(guān)節(jié)之間夾角θ和末端骨骼節(jié)點位置x表示,可寫為式(1):
θ=f-1(x)
(1)
反向動力學主要通過IK解算器模擬虛擬人動作,IK解算器通過控制柄位置旋轉(zhuǎn)和平移來實現(xiàn)IK鏈中相應關(guān)節(jié)的移動和旋轉(zhuǎn),其中控制柄是連接起始關(guān)節(jié)節(jié)點和末關(guān)節(jié)節(jié)點的向量。
圖2 IK控制柄解算流程Fig. 2 IK control handle solution flow
(2)
圖3 虛擬人動作Fig. 3 Virtual human action
讓虛擬人用更短距離到達目的地,需對虛擬人進行路徑規(guī)劃。啟發(fā)式搜索算法中A*算法是目前為止最快的一種計算最短路徑算法。因此筆者采用A*算法對虛擬人行走路徑進行規(guī)劃。A*算法的核心是估價函數(shù)[8],如式(3)。
f(n)=g(n)+h(n)
(3)
式中:f(n)為從初始節(jié)點s到目標節(jié)點t的估價函數(shù);g(n)為從初始節(jié)點s到中間節(jié)點n的實際代價;h(n)為中間節(jié)點n到目標節(jié)點t最短路經(jīng)的估計代價。
A*算法最關(guān)鍵問題是確定估價函數(shù)。在計算下一步估價函數(shù)f(n)時,實際代價g(n)已經(jīng)確定,因此估計代價h(n)計算至關(guān)重要。筆者采用兩點間歐幾里德距離計算h(n),如式(4):
(4)
式中:xt、yt為目標節(jié)點t坐標;xn、yn為當前節(jié)點n坐標。
路徑規(guī)劃區(qū)域如圖4;A*算法執(zhí)行步驟如圖5;虛擬人自動尋路過程如圖6。
圖4 路徑規(guī)劃區(qū)域Fig. 4 Path planning area
圖5 A*算法流程Fig. 5 A*algorithm flowchart
圖6 虛擬人沿行走路徑Fig. 6 Virtual person walking along the path
圖4中:從開始點s探尋到一條到目標點t的路徑,探尋每一步都以當前節(jié)點為基點,掃描其相鄰的8個節(jié)點,計算當前節(jié)點到終點距離,計算出最短路徑,各相鄰節(jié)點左上方、左下方和右下方的3個值分別表示f(n)、g(n)和h(n),得到最小f(n)值,通過這樣的估價函數(shù)可找到最短路徑;圖6中:虛擬人沿著紅線指示方向行走。
進行虛擬漫游時,控制攝像機(視點)在相對靜止場景中運動。為提高仿真系統(tǒng)環(huán)境真實感,需對人和物體間可能發(fā)生的碰撞進行檢測,根據(jù)新視點判斷虛擬人是否會與場景中物體發(fā)生碰撞。若直接對兩個物體對象進行碰撞檢測,其計算代價往往比較高昂。系統(tǒng)利用基本碰撞檢測、觸發(fā)器碰撞檢測和光線投射等碰撞檢測方法,在完成物體碰撞體測試后再進行幾何相交測試,從而減少計算消耗。
2.3.1 基本碰撞檢測
針對虛擬場景基本碰撞檢測技術(shù)主要有軸向包圍盒(AABB)檢測、方向包圍盒(OBB)檢測、包圍球檢測、離散方向多面體(k-DOP)檢測等[9],如圖7。
圖7 包圍盒類型Fig. 7 Types of bounding box
Unity3D提供了多種碰撞器組件用于物體間基本碰撞檢測,包括球碰撞器、膠囊碰撞器、盒碰撞器、網(wǎng)格碰撞器和角色控制碰撞器等[10]。前3種碰撞器分別可模擬球體、膠囊體、立方體形狀物體碰撞。網(wǎng)格碰撞器則根據(jù)三維模型網(wǎng)格外形模擬碰撞效果。角色控制碰撞器可用來判斷角色是否和其它物體發(fā)生碰撞。在錨機仿真中虛擬人依賴于角色控制碰撞器,與錨機、墻體等物體進行碰撞檢測。
2.3.2 觸發(fā)器碰撞檢測
指定一個處于觸發(fā)狀態(tài)的碰撞器,將被檢測碰撞對象包含進該觸發(fā)器中。這樣角色與對象的碰撞檢測就轉(zhuǎn)換為角色與觸發(fā)器之間的碰撞檢測。船舶錨泊和靠離泊操縱是船員人身傷害事故的高發(fā)區(qū)。如在操作錨機進行帶纜繩作業(yè)時,纜繩都存在危險扇形區(qū)域,船員站在此區(qū)域十分危險,這些可行走但危險區(qū)域,即可用此法實現(xiàn)危險區(qū)域報警提示功能。當操作錨機進行拋錨作業(yè)時,人如果距離錨機太近易被錨鏈纏繞發(fā)生危險,也可通過添加觸發(fā)器方式實現(xiàn)危險區(qū)域報警功能。圖8實現(xiàn)了當錨機轉(zhuǎn)動時虛擬人進入危險報警區(qū)域時的報警界面。
圖8 危險區(qū)域報警Fig. 8 Danger zone alarm
2.3.3 光線投射
在系統(tǒng)中需要設(shè)置撇纜終點位置,這將涉及到光線或有向線段計算?;竟饩€跟蹤算法要對每條射線和所有物體求交,然后再對所得全部交點排序以確定可見點。對錨機交互仿真系統(tǒng)場景,這種處理辦法效率低下,需改進光線跟蹤算法。常用策略有控制跟蹤深度、空間網(wǎng)格剖分、層次包圍體、空間八叉樹剖分等,空間網(wǎng)格中均勻網(wǎng)格相對其他算法容易構(gòu)建、容易遍歷。故筆者采用均勻網(wǎng)格相交優(yōu)化光線跟蹤(圖9),沿直線方向?qū)?個鄰接網(wǎng)格單元體進行遍歷。在3D環(huán)境下,若網(wǎng)格單元體間存在某些共享面,則其連接度為6(2D環(huán)境下連接度為4);若考慮網(wǎng)格單元體間共享邊,則其連接度為16。若兩個網(wǎng)格單元體之間存在共享面、共享邊及共享頂點,則其連接度為26(在2D環(huán)境下為8)。
圖9 2D直線的網(wǎng)格單元連接特征Fig. 9 Connection characteristics of grid cells of 2D lines
在船進行靠泊操作時,需要船上水手進行撇纜作業(yè),把撇纜繩撇至碼頭。在仿真實現(xiàn)時,人為設(shè)定撇纜位置,通過光線投射算法獲取撇纜位置。船上水手收到撇纜命令后將撇纜繩撇到撇纜位置,撇纜后效果如圖10(為清晰顯示,圖10將撇纜繩和撇纜頭放大10倍)。
圖10 撇纜后效果Fig. 10 Effect of after leaving the cable
筆者對錨機交互仿真系統(tǒng)的設(shè)計從系統(tǒng)需求入手,設(shè)計了系統(tǒng)的各個功能模塊,利用計算機建模軟件建立起包括碼頭、船舶、錨機、虛擬人等的三維場景,并集成了燈光、天空盒、海浪等特效[11],構(gòu)建出錨機仿真場景。
依據(jù)不同設(shè)備特點和實際情況,筆者設(shè)計不同交互方式。并結(jié)合反向動力學原理、A*算法及碰撞檢測等技術(shù)實現(xiàn)了錨機仿真系統(tǒng)交互功能。該系統(tǒng)為方便使用者操作錨機,借助GUI組件實現(xiàn)系統(tǒng)用戶界面設(shè)計,添加了包括二維導航、三維導航、工具箱、多人操作、提示信息窗等UI菜單。虛擬錨機場景和GUI界面如圖11。
圖11 錨機場景及GUI界面Fig. 11 Windlass scene and GUI interface
筆者以船用錨機作為主要研究對象,通過研究虛擬現(xiàn)實技術(shù)中的虛擬人技術(shù)及自動尋路技術(shù),實現(xiàn)了虛擬人操作錨機的動作模擬及自動尋路功能;結(jié)合基于包圍盒和網(wǎng)格剖分技術(shù)的碰撞檢測算法實現(xiàn)錨機操作的碰撞檢測,并研發(fā)了錨機交互仿真系統(tǒng)。
該系統(tǒng)操作切合實際,可重復操作,極大節(jié)省成本,降低風險,有效保護船員安全。同時借助Unity 3D引擎跨平臺性,實現(xiàn)了錨機交互仿真系統(tǒng)多平臺發(fā)布,增強了仿真系統(tǒng)通用性和錨機教學培訓靈活性。目前,現(xiàn)該仿真系統(tǒng)已經(jīng)集成到航海模擬器中,使用效果良好。