相 琳 周振華
(中國船舶第七一五研究所,杭州 310023)
本文所述仿真是將實際系統(tǒng)包括控制器的受控對象以及作用于該系統(tǒng)上的各種輸入信息全部用數(shù)學(xué)模型代替,并把數(shù)學(xué)模型變成仿真模型,在計算機上利用仿真手段對實際系統(tǒng)軟件進行測試和研究的過程。借助仿真引擎,它可以高效產(chǎn)生一個全棧的閉環(huán)仿真,模擬理想情況或特定環(huán)境擾動下的受控對象,并實時反饋信息。無人航行器執(zhí)行任務(wù)后,在水下進行遠距離自主航行時人們不能實時掌握其動態(tài),導(dǎo)致航行器水下任務(wù)安全性問題極為突出。因此,航行器研制和試驗過程中對內(nèi)部軟件進行測試和聯(lián)合仿真十分必要。本次仿真的目的為軟件開發(fā)、測試與評估提供了一個高效的環(huán)境。
Unity3D軟件支持3D內(nèi)容創(chuàng)作,開發(fā)生態(tài)環(huán)境良好,可擴展性強,近年來多用于虛擬仿真開發(fā),其中應(yīng)用在室內(nèi)三維漫游場景的情況較多,畫面渲染逼真。
如圖1所示,隨體坐標(biāo)系O-XBYBZB是一種笛卡爾非慣性坐標(biāo)系,將坐標(biāo)原點O取在無人水下航行器(Unmanned Underwater Vehicle,UUV)的浮心上[1]。其中:OXB指向航行器首部;OYB指向上方(當(dāng)航行器放置于地面)并垂直于OXB;OZB垂直于OXB與OYB,指向航行器右側(cè)。
圖1 坐標(biāo)系示意圖
根據(jù)歐拉定理,隨體坐標(biāo)系下的參數(shù)經(jīng)過3次旋轉(zhuǎn)平移即可轉(zhuǎn)化為大地坐標(biāo)系下的參數(shù)。假設(shè)大地坐標(biāo)系與隨體坐標(biāo)系原點位置相同,則進行3次旋轉(zhuǎn)即可。3次旋轉(zhuǎn)中的旋轉(zhuǎn)軸與旋轉(zhuǎn)角均符合右手定則,且旋轉(zhuǎn)順序需固定[2]。隨體坐標(biāo)系下的線速度[vx,vy,vz]T和大地坐標(biāo)系下的線速 度[v0x,v0y,v0z]T轉(zhuǎn)化關(guān)系如下:
表1 航行器運動學(xué)參數(shù)
為保持?jǐn)?shù)據(jù)的一一對應(yīng),規(guī)定將φ、ψ、θ的取值范圍限定為:
此時,有:
同理,有:
對于航行器的運動過程,主要計算其所受的慣性類水動力、粘性類位置力和阻尼力,相關(guān)參數(shù)如表2所示。其中:x、y、z是流體動力主矢在隨動坐標(biāo)系3個軸方向上的分量,分別為阻力、升力和側(cè)力;Mx、My、Mz是流體動力主矩在隨動坐標(biāo)系3個軸上的分量,分別為橫滾力矩、偏航力矩和俯仰力矩;Cx等為無量綱因數(shù)。
表2 流體動力參數(shù)
航行器外形關(guān)于橫平面XBOYB與XBOZB對稱,則有:
不計航行器的慣性積項、航行過程中的質(zhì)量及質(zhì)量分布變化,若航行器進行小機動運動,忽略運動參數(shù)二階項,并視質(zhì)心為一階小量,可得空間運動方程[3]:
航行器模型導(dǎo)入Unity中,根據(jù)需求選擇材料、紋理貼圖等屬性,使模型外觀貼近航行器外觀設(shè)計[4]。另外,確認(rèn)航行器模型的執(zhí)行器和傳感器,以便實例化到運動腳本中。此外,為航行器設(shè)置“剛體”屬性,為海底地形添加“碰撞器”屬性,外層設(shè)置包圍盒。這樣航行器與海底發(fā)生碰撞會停止,不會發(fā)生模型互相穿過的現(xiàn)象。
采用Unity3D經(jīng)典四叉樹方法生成不規(guī)則三角網(wǎng)(TriangulatedIrregularNetwork,TIN)海底地形。如圖2所示,四叉樹總的思想是視點經(jīng)過的時候才渲染地形,根據(jù)區(qū)域的有限個點集,將區(qū)域劃分為相連的三角面網(wǎng)絡(luò)。三角面的形狀和大小取決于不規(guī)則分布的測點的密度和位置,能夠避免地形平坦時的數(shù)據(jù)冗余,又能按地形特征點表示數(shù)字高程特征[5]。
圖2 四叉樹分化演示
如圖2所示,視點(Unity中模擬人眼瀏覽三維仿真畫面的觀察點)由左下側(cè)經(jīng)過大格子時,此時遠離視點的R1、R2、R4為一級分化,而靠近視點的R31~R34為二級分化,地形顯示分辨率更高。一般視點越近,分化等級越高。
分化步驟操作如下。
(1)從外部導(dǎo)入(2n+1)×(2n+1)的正方形地形高度矩陣,建立兩個數(shù)組分別存放地形頂點緩沖和渲染的索引緩沖,依據(jù)視點到網(wǎng)格節(jié)點的距離和計算網(wǎng)格地形復(fù)雜度,在視點經(jīng)過時對網(wǎng)格進行劃分,即設(shè)定視點到網(wǎng)格中心的距離L與正方形邊長d的比值C1為設(shè)定的一個經(jīng)驗常量值。C1設(shè)置越大,越易劃分。地形平緩程度C2表征區(qū)域地形越復(fù)雜,分割的次數(shù)越多。需要注意,C1和C2需要人為設(shè)定)。
(2)劃分網(wǎng)格時,渲染葉子節(jié)點(沒有被繼續(xù)分割的點);劃分完畢,遍歷待生成網(wǎng)格的節(jié)點,根據(jù)其中心和邊長生成對應(yīng)網(wǎng)格。
(3)對生成的地形利用強制劃分方法對裂縫進行修補,當(dāng)分化等級相差2及以上時,對其強制劃分。
三維仿真地形,如圖3所示。
圖3 三維仿真地形
海流對航行器影響的力可以分解為沿航行器隨體坐標(biāo)系3個方向的分量。如果不考慮海流垂向交換,則海流的影響作用可分解為航行器前進X方向的作用和垂直航行器Z方向的作用[6]。因此,已知外部輸入的海流方向和大小,將海流速度大小分解為航行器前進X方向的vx和垂直航行器的Z方向分速度量vz,通過動力學(xué)公式將其引入航行器總受力公式。
為方便用戶測試,海流模塊支持自定義輸入海流參數(shù),包含變化周期(不填默認(rèn)定向流)、初始方向和速度大小。仿真測試時可選擇開啟海流模塊,設(shè)置定常流或者周期變化流來測試UUV在海流作用下的航行測試。
搭建仿真測試系統(tǒng),按照以下步驟:
(1)建立硬件連接,開啟仿真軟件系統(tǒng);
可手動修改航行器水動力系數(shù),改變航行器水動力 特性;
(3)設(shè)置傳感器參數(shù),默認(rèn)開啟仿真慣導(dǎo)等傳感器;
(4)設(shè)置是否添加海流、海流方向和速度大??;
(5)仿真系統(tǒng)正式運行。
任務(wù)啟動后,仿真系統(tǒng)通信單元接收控制系統(tǒng)指令(轉(zhuǎn)速和舵角指令)傳給運動與動力學(xué)模型,驅(qū)動航行器模型(掛載運動腳本)在仿真系統(tǒng)內(nèi)位置移動。仿真慣導(dǎo)實時反饋航行器姿態(tài)和速度參數(shù)。
航行器水下自主航行任務(wù)期間,主要關(guān)注航行控制能力和航行途中避障情況。
(1)航行器遠距離水下遠距離航行至指定地點時,要對前方障礙物進行合理避障。仿真系統(tǒng)支持前方單一或多個連續(xù)固定障礙物航行測試(如圖4所示),支持手動選擇障礙物生成地點,支持測試過程中通過外部觸發(fā)在特定地點生成障礙物等,以滿足航行過程中避障測試需求。
圖4 航行前方遇到障礙物
(2)當(dāng)航行器遠距離三維仿真系統(tǒng)支持任意策略的航行下潛,如直線下潛和螺旋下潛,支持航行軌跡三維顯示,如圖5所示。
圖5 三維軌跡顯示窗口
本文提出了一種在無人航行器研制和試驗階段用于軟件聯(lián)調(diào)和任務(wù)測試的三維仿真系統(tǒng),通過Unity3D軟件構(gòu)建逼真水下三維仿真海洋環(huán)境,加入海底地形、水下障礙物和海流作用,基于無人航行器水下運動和動力學(xué)模型,可支撐無人航行器長距離水下自主航行任務(wù)測試和水下避障規(guī)劃。