張樂(lè)樂(lè),戴永壽,李立剛
(中國(guó)石油大學(xué)(華東)海洋與空間信息學(xué)院,山東青島 266580)
隨著水資源的廣泛開(kāi)發(fā)與利用,物資運(yùn)輸、人員搜救、環(huán)境保護(hù)等多方面任務(wù)需求愈加旺盛,無(wú)人船已成為最佳任務(wù)平臺(tái)[1-3]。為適應(yīng)多變的水面環(huán)境,各國(guó)正在從障礙物檢測(cè)、避障導(dǎo)航等方面加速無(wú)人船技術(shù)的研發(fā)[4]。然而,海上惡劣環(huán)境與高昂出海成本極大提高了相關(guān)算法的研發(fā)與測(cè)試難度,導(dǎo)致無(wú)人船相關(guān)技術(shù)研發(fā)周期漫長(zhǎng),開(kāi)發(fā)效率低下。因此,用于替代出海實(shí)驗(yàn)的無(wú)人船仿真測(cè)試軟件平臺(tái)的開(kāi)發(fā)與實(shí)現(xiàn)已經(jīng)成為無(wú)人船技術(shù)高效發(fā)展的重要基石[5-8]。
為利于在實(shí)驗(yàn)室環(huán)境中開(kāi)展無(wú)人船關(guān)鍵測(cè)控算法的離線(xiàn)仿真測(cè)試驗(yàn)證,降低實(shí)船實(shí)驗(yàn)成本,縮短算法開(kāi)發(fā)使用周期,利用虛擬現(xiàn)實(shí)技術(shù),設(shè)計(jì)開(kāi)發(fā)了一款可在實(shí)驗(yàn)室內(nèi)對(duì)相關(guān)算法測(cè)試驗(yàn)證的無(wú)人船仿真測(cè)試平臺(tái)。
為保障本平臺(tái)在實(shí)驗(yàn)過(guò)程復(fù)現(xiàn)時(shí)的準(zhǔn)確性,算法效果統(tǒng)計(jì)時(shí)的精準(zhǔn)性,平臺(tái)應(yīng)具備與現(xiàn)實(shí)場(chǎng)景相對(duì)應(yīng)的仿真環(huán)境并模擬船舶在海上的真實(shí)受力情況;能夠?qū)o(wú)人船及海面障礙物模型進(jìn)行統(tǒng)一調(diào)度和管理;具備測(cè)試算法的嵌入接口,在對(duì)算法進(jìn)行測(cè)試驗(yàn)證的同時(shí),將船舶運(yùn)動(dòng)過(guò)程中的關(guān)鍵數(shù)據(jù)以圖表的形式渲染到可視化窗口,便于研究人員查看和記錄;統(tǒng)一存儲(chǔ)和管理實(shí)驗(yàn)數(shù)據(jù)。此外,為對(duì)算法性能進(jìn)行評(píng)價(jià),該平臺(tái)還應(yīng)具有算法優(yōu)劣的評(píng)價(jià)指標(biāo)。根據(jù)上述分析,平臺(tái)的具體功能如圖1 所示。

圖1 無(wú)人船避障導(dǎo)航算法仿真測(cè)試平臺(tái)功能分析圖
根據(jù)無(wú)人船避障導(dǎo)航算法仿真測(cè)試平臺(tái)的功能需求分析,將平臺(tái)劃分為五個(gè)主要的功能模塊:海面環(huán)境仿真模塊、物理效應(yīng)計(jì)算模塊、插件管理模塊、決策控制模塊、可視化渲染模塊。平臺(tái)的整體架構(gòu)如圖2 所示。

圖2 無(wú)人船避障導(dǎo)航算法仿真測(cè)試平臺(tái)架構(gòu)
在圖2 中,可視化渲染模塊主要負(fù)責(zé)監(jiān)聽(tīng)用戶(hù)輸入和場(chǎng)景渲染,海面環(huán)境仿真模塊負(fù)責(zé)搭建海面場(chǎng)景,物理效應(yīng)計(jì)算模塊根據(jù)模型受力情況計(jì)算對(duì)象的變化狀態(tài),決策控制模塊負(fù)責(zé)進(jìn)行調(diào)度決策,插件管理模塊用于管理和動(dòng)態(tài)加載待測(cè)算法插件。根據(jù)平臺(tái)實(shí)際功能和架構(gòu),設(shè)計(jì)了圖3 所示的工作流程圖。

圖3 無(wú)人船避障導(dǎo)航算法仿真測(cè)試平臺(tái)工作流程圖
當(dāng)軟件啟動(dòng)后,各個(gè)功能模塊開(kāi)始初始化,可視化渲染模塊開(kāi)始監(jiān)聽(tīng)等待用戶(hù)輸入,插件管理模塊加載需要測(cè)試的算法插件,決策控制模塊根據(jù)物理效應(yīng)計(jì)算模塊和插件管理模塊給出的信息進(jìn)行調(diào)度決策,將最新的仿真狀態(tài)渲染到可視化界面中,完成一個(gè)周期的狀態(tài)更新。
為實(shí)現(xiàn)無(wú)人船避障導(dǎo)航算法仿真測(cè)試平臺(tái)的基本功能需求,方便研究人員對(duì)需要測(cè)試的算法進(jìn)行優(yōu)劣評(píng)價(jià),選用C#語(yǔ)言、Unity 3D 平臺(tái)進(jìn)行開(kāi)發(fā)。通過(guò)搭建模型受力計(jì)算架構(gòu)實(shí)現(xiàn)物體受力模擬,并應(yīng)用插件動(dòng)態(tài)加載技術(shù)將避障導(dǎo)航算法適配到Unity 3D 平臺(tái),保障待測(cè)算法在平臺(tái)中的穩(wěn)定運(yùn)行。
為在虛擬世界中模擬現(xiàn)實(shí)物體的受力和運(yùn)動(dòng)情況,該平臺(tái)基于Unity 3D 提供的物理引擎功能進(jìn)行物體的碰撞檢測(cè)和現(xiàn)實(shí)受力模擬[9-11]。物體在現(xiàn)實(shí)世界中會(huì)受到諸多力的影響,如重力、摩擦力等,Unity 3D 中提供的物理引擎可以將這些力添加給虛擬模型,模擬虛擬模型在現(xiàn)實(shí)世界中的物理情況。在該平臺(tái)中主要使用物理引擎中的碰撞檢測(cè)功能和剛體物理學(xué)解算功能,在虛擬世界中,要保證兩模型在發(fā)生碰撞后不會(huì)穿“模”而過(guò),就必須為模型添加碰撞體組件。只有添加了碰撞器組件的模型,才能夠被虛擬世界感知到模型邊界,保障在模型運(yùn)動(dòng)過(guò)程中,如果發(fā)生碰撞,可以被軟件感知并作出回應(yīng)。三維模型只有添加剛體屬性才能被物理引擎控制,在受到外力時(shí)產(chǎn)生真實(shí)世界的運(yùn)動(dòng),該平臺(tái)在基于物理引擎的剛體物理學(xué)解算功能上,搭建了模型受力計(jì)算架構(gòu)用以模擬物體現(xiàn)實(shí)受力。
根據(jù)平臺(tái)工作需要,設(shè)計(jì)了如圖4 所示的模型受力計(jì)算架構(gòu)圖,在圖4 中,Model 類(lèi)是軟件中定義的模型管理類(lèi),用于統(tǒng)一存儲(chǔ)管理平臺(tái)中的三維模型。當(dāng)物體發(fā)生碰撞事件時(shí),不但要受到物體間碰撞時(shí)產(chǎn)生的相互作用力,還有其本身所受到的重力和浮力,因而設(shè)計(jì)了作用力收集工具,作用力收集工具負(fù)責(zé)收集碰撞時(shí)物體受到的相互作用力以及物體本身的重力、浮力,并結(jié)合無(wú)人船上一時(shí)刻的狀態(tài),通過(guò)計(jì)算給出無(wú)人船下一時(shí)刻的坐標(biāo)變換,完成物體下一時(shí)刻的狀態(tài)更新。

圖4 模型受力計(jì)算架構(gòu)圖
為在軟件平臺(tái)中對(duì)無(wú)人船避障導(dǎo)航算法進(jìn)行測(cè)試驗(yàn)證,需要從待測(cè)算法的封裝、DLL 插件的讀取、軟件平臺(tái)與DLL 插件交互三方面展開(kāi)工作,使待測(cè)算法適配到軟件平臺(tái)并正常運(yùn)行。
待測(cè)算法的封裝方面,由于軟件平臺(tái)聚焦于算法的測(cè)試驗(yàn)證而不關(guān)注算法實(shí)現(xiàn)原理,因此將待測(cè)算法封裝為獨(dú)立的動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library,DLL)插件[12-13],降低算法程序與平臺(tái)程序間的耦合性,提高平臺(tái)對(duì)多種算法的兼容性。
DLL 插件的讀取方面,在軟件平臺(tái)中應(yīng)用C#反射技術(shù)動(dòng)態(tài)[14-16]讀取DLL 插件中的函數(shù)方法,完成對(duì)待測(cè)算法的調(diào)用。C#反射是操作DLL 插件元數(shù)據(jù)的類(lèi)庫(kù),其可以在類(lèi)未知的情況下,通過(guò)規(guī)范化的插件接口,操作并獲取類(lèi)中的字段、屬性和方法。
軟件平臺(tái)與DLL 插件交互方面,為提高DLL 插件讀取接口的復(fù)用性,對(duì)同一類(lèi)別的待測(cè)算法接口進(jìn)行通用化設(shè)計(jì)。首先,在接口內(nèi)部單獨(dú)封裝只讀接口類(lèi),用于對(duì)待測(cè)算法插件的名稱(chēng)、版本等屬性信息進(jìn)行標(biāo)識(shí),以幫助區(qū)分不同版本的待測(cè)算法;其次,為了適應(yīng)多種同類(lèi)待測(cè)算法插件中輸入?yún)?shù)數(shù)量的差異,使用可接收不確定數(shù)量參數(shù)的“params”關(guān)鍵字與數(shù)據(jù)基類(lèi)“object”相結(jié)合的方式,實(shí)現(xiàn)對(duì)不同參數(shù)數(shù)量的待測(cè)算法的參數(shù)傳遞;最后,在避障導(dǎo)航算法驗(yàn)證模塊,單獨(dú)開(kāi)辟路徑規(guī)劃算法插件與路徑跟蹤控制算法插件的返回值存儲(chǔ)空間,用于存儲(chǔ)DLL 插件輸出的無(wú)人船期望路徑點(diǎn)與期望航向航速,便于軟件平臺(tái)后續(xù)調(diào)用待測(cè)算法返回值進(jìn)行算法效果的評(píng)價(jià)與渲染。
可視化場(chǎng)景渲染是按照一定幀率將仿真對(duì)象的狀態(tài)渲染到可視化窗口中,在無(wú)人船避障導(dǎo)航算法仿真測(cè)試平臺(tái)中,為給用戶(hù)更好的仿真體驗(yàn),繪制了逼近真實(shí)的近岸虛擬海洋環(huán)境。同時(shí)在避障導(dǎo)航算法驗(yàn)證模塊設(shè)計(jì)算法有效性評(píng)價(jià)指標(biāo),便于比較算法優(yōu)劣。
三維模型是仿真平臺(tái)的重要組成部分,模型的精細(xì)程度直接影響到平臺(tái)的視覺(jué)效果和真實(shí)程度,在實(shí)現(xiàn)平臺(tái)的具體功能前,先完成平臺(tái)所需的各類(lèi)三維模型的繪制工作,并導(dǎo)入U(xiǎn)nity 3D 平臺(tái),搭建出模擬真實(shí)環(huán)境的虛擬海洋場(chǎng)景。
搭建虛擬近岸海洋場(chǎng)景所需要的三維模型主要有無(wú)人船三維模型、天空、海浪、島嶼以及海上可能出現(xiàn)的各類(lèi)障礙物。Unity 3D 平臺(tái)自帶的資源庫(kù)可以滿(mǎn)足本平臺(tái)基本的模型需求[17]。因此,除無(wú)人船模型外,其余模型均為在資源商店下載后導(dǎo)入平臺(tái)進(jìn)行參數(shù)配置后直接用于開(kāi)發(fā)。
為了更加真實(shí)的還原無(wú)人船在海上運(yùn)行的實(shí)際情況,平臺(tái)中的無(wú)人船三維模型是依據(jù)無(wú)人船實(shí)物繪制而成,利用solidworks 建模軟件搭建無(wú)人船模型。無(wú)人船是由多個(gè)零件組合而成的整體,其零件的組合關(guān)系復(fù)雜。在該軟件中,主要展示無(wú)人船的被控性能和運(yùn)動(dòng)情況,因此,建模時(shí)不需要過(guò)多考慮各個(gè)零件之間的組合關(guān)系[18-19]。圖5 與圖6 為無(wú)人船實(shí)船與三維模型圖。

圖5 無(wú)人船實(shí)物

圖6 無(wú)人船三維模型圖
將無(wú)人船模型導(dǎo)入U(xiǎn)nity 3D 后,繼續(xù)導(dǎo)入海浪、障礙物等環(huán)境模型,調(diào)整各個(gè)模型的尺寸比例及位置,設(shè)置燈光、相機(jī)等,完成軟件的環(huán)境場(chǎng)景搭建工作。
為了快速評(píng)價(jià)避障導(dǎo)航算法的優(yōu)劣,在所設(shè)計(jì)的軟件平臺(tái)中提供相關(guān)算法評(píng)價(jià)指標(biāo)的計(jì)算方法[20]。
在路徑規(guī)劃算法的評(píng)價(jià)指標(biāo)方面,給出路徑長(zhǎng)度、轉(zhuǎn)向次數(shù)、算法運(yùn)行時(shí)間三個(gè)算法有效性評(píng)價(jià)指標(biāo)。算法運(yùn)行時(shí)間為程序?qū)嶋H運(yùn)行時(shí)間,路徑長(zhǎng)度D表示為:
轉(zhuǎn)向次數(shù)S表示為:
Si表示為:
其中,路徑規(guī)劃算法插件共給出n個(gè)路徑點(diǎn),(xi,yi)為第i個(gè)路徑點(diǎn)坐標(biāo)。
在路徑跟蹤控制算法的評(píng)價(jià)指標(biāo)方面,使用平均跟蹤誤差作為算法有效性評(píng)價(jià)指標(biāo)。平均跟蹤誤差M用無(wú)人船在各時(shí)刻實(shí)際航行位置到期望航線(xiàn)最短距離的均值表示,如下:
其中,m為無(wú)人船沿期望航線(xiàn)運(yùn)動(dòng)過(guò)程中采樣到的航行點(diǎn)跡數(shù)量,(xj,yj)為第j時(shí)刻無(wú)人船實(shí)際位置,ki為無(wú)人船實(shí)際位置所對(duì)應(yīng)期望航線(xiàn)的斜率,bi為無(wú)人船實(shí)際位置所對(duì)應(yīng)期望航線(xiàn)的截距,ki、bi表示為:
無(wú)人船避障導(dǎo)航算法仿真測(cè)試驗(yàn)證平臺(tái)包含路徑規(guī)劃算法驗(yàn)證模塊與路徑跟蹤控制算法驗(yàn)證模塊,為驗(yàn)證平臺(tái)有效性,分別對(duì)兩大模塊進(jìn)行性能測(cè)試。
為驗(yàn)證路徑規(guī)劃算法驗(yàn)證模塊的有效性,將已開(kāi)發(fā)完成的A*算法動(dòng)態(tài)鏈接庫(kù)導(dǎo)入該模塊中進(jìn)行測(cè)試,軟件平臺(tái)能夠正常讀取算法插件,運(yùn)行效果如圖7 所示。

圖7 路徑規(guī)劃算法模塊測(cè)試效果
進(jìn)一步將算法在Matlab 中進(jìn)行仿真實(shí)驗(yàn),得到算法評(píng)價(jià)指標(biāo),兩系統(tǒng)中給出的算法評(píng)價(jià)指標(biāo)如表1所示。

表1 算法在多平臺(tái)的評(píng)價(jià)指標(biāo)對(duì)比表
結(jié)合圖表可得,所設(shè)計(jì)軟件平臺(tái)顯示效果更加直觀(guān)。與Matlab 相比,二者給出的評(píng)價(jià)指標(biāo)基本吻合,軟件平臺(tái)的路徑規(guī)劃算法驗(yàn)證模塊準(zhǔn)確可行。
為對(duì)路徑跟蹤控制算法驗(yàn)證模塊進(jìn)行有效性測(cè)試,將開(kāi)發(fā)完成的LOS 引導(dǎo)率算法動(dòng)態(tài)鏈接庫(kù)導(dǎo)入軟件平臺(tái)進(jìn)行測(cè)試,算法插件能夠正常讀取,運(yùn)行效果如圖8 所示。
進(jìn)一步將軟件平臺(tái)得到的評(píng)價(jià)指標(biāo)與實(shí)船實(shí)驗(yàn)結(jié)果相對(duì)比,兩者的算法評(píng)價(jià)指標(biāo)如表2 所示。

表2 算法在多平臺(tái)的評(píng)價(jià)指標(biāo)對(duì)比表
結(jié)合表2 可知,考慮到海浪對(duì)無(wú)人船航行的干擾,實(shí)船實(shí)驗(yàn)與軟件平臺(tái)給出的評(píng)價(jià)指標(biāo)誤差在可接受范圍內(nèi),評(píng)價(jià)指標(biāo)合理有效。且軟件平臺(tái)能夠便捷快速地復(fù)現(xiàn)算法驗(yàn)證過(guò)程,實(shí)驗(yàn)結(jié)果易于觀(guān)察,算法效果對(duì)比直觀(guān)。
根據(jù)無(wú)人船實(shí)船進(jìn)行建模,并利用Unity 3D 引擎構(gòu)建虛擬了近岸海洋場(chǎng)景,在虛擬海洋試驗(yàn)場(chǎng)中對(duì)無(wú)人船運(yùn)動(dòng)過(guò)程中的關(guān)鍵算法進(jìn)行測(cè)試,一方面,通過(guò)虛擬場(chǎng)景對(duì)無(wú)人船運(yùn)動(dòng)過(guò)程中的避障導(dǎo)航算法進(jìn)行測(cè)試驗(yàn)證并展示,減緩了大量海上實(shí)驗(yàn)極其耗費(fèi)人力物力等資源的問(wèn)題,另一方面,通過(guò)虛擬可視化技術(shù)對(duì)實(shí)驗(yàn)過(guò)程及其關(guān)鍵參數(shù)進(jìn)行復(fù)現(xiàn),為無(wú)人船技術(shù)的學(xué)習(xí)與推廣提供了可視化平臺(tái)。
目前,該仿真測(cè)試驗(yàn)證平臺(tái)已應(yīng)用在實(shí)驗(yàn)室無(wú)人船相關(guān)算法的測(cè)試驗(yàn)證中,實(shí)踐結(jié)果表明,該套系統(tǒng)可以有效地驗(yàn)證避障導(dǎo)航算法有效性,直觀(guān)地展示算法的優(yōu)劣,為算法的優(yōu)化提供數(shù)據(jù)支持,同時(shí)節(jié)省了大量物力財(cái)力,具備良好的工程應(yīng)用價(jià)值。