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