,
(大連海事大學(xué) 航海動態(tài)仿真和控制交通行業(yè)重點實驗室,遼寧 大連 116026)
水下環(huán)境具有不可預(yù)知性,操作人員所進(jìn)行的水下作業(yè)是一種復(fù)雜且強(qiáng)度極高的過程,須對其進(jìn)行大量的綜合訓(xùn)練來保證作業(yè)效率及安全性[1]。目前,對從事相關(guān)深潛工作人員的水下作業(yè)訓(xùn)練大多采用實物進(jìn)行,存在著培訓(xùn)成本高、效率低且風(fēng)險大等問題。隨著虛擬現(xiàn)實技術(shù)的蓬勃發(fā)展,設(shè)計一套模擬機(jī)械手水下作業(yè)過程的仿真系統(tǒng)可使操作人員在具有一定沉浸感的海底模擬視景系統(tǒng)中進(jìn)行大量虛擬訓(xùn)練積累相關(guān)經(jīng)驗,避開深海環(huán)境給操作訓(xùn)練帶來的風(fēng)險,提高培訓(xùn)效率進(jìn)而促進(jìn)深潛技術(shù)的發(fā)展[2]。
目前,國內(nèi)外主流的深潛模擬器廠商和科研機(jī)構(gòu),都有比較成熟的全功能大型載人深潛操縱訓(xùn)練模擬器,該模擬器可以用于操作人員的培訓(xùn)[3-5],但是其本身存在2個問題,第一,將載人潛水器的布放回收、水下航行作為重點模擬對象,而對其機(jī)械手水下作業(yè)過程涉及較少;第二,成本高且進(jìn)行培訓(xùn)和練習(xí)的時間、場地受限。針對第一個問題,將我國第一臺載人深潛器“蛟龍?zhí)枴弊鳛榉抡鎸ο?,開發(fā)具有高度沉浸感的“蛟龍?zhí)枴彼伦鳂I(yè)機(jī)械手的三維交互仿真平臺,重點對其搭載機(jī)械手的水下作業(yè)過程進(jìn)行模擬。針對第二個問題,在仿真系統(tǒng)的設(shè)計時,充分利用Unity3D引擎多平臺發(fā)布的特點,使其在Windows、iPhone、Android等多個主流平臺上運(yùn)行,既可降低硬件設(shè)備的成本又可以作為桌面版的仿真平臺提高培訓(xùn)效率。
基于模塊化的程序設(shè)計思想,設(shè)計3個模塊:①三維建模模塊;②運(yùn)動學(xué)建模與求解模塊;③人機(jī)交互模塊。仿真系統(tǒng)的開發(fā)流程見圖1。
根據(jù)載人潛水器的實際尺寸采用3D Studio Max創(chuàng)建“蛟龍?zhí)枴奔捌浯钶d機(jī)械手的三維模型,利用PhotoShop對處理好的結(jié)構(gòu)圖片進(jìn)行貼圖,完成材質(zhì)球的制作[6];對需要進(jìn)行人機(jī)交互的結(jié)構(gòu)進(jìn)行分離,使其成為獨立的模型,而對不需要進(jìn)行人機(jī)交互的模型進(jìn)行三角面優(yōu)化,同時進(jìn)行渲染烘焙生成最終的紋理貼圖。
運(yùn)動學(xué)建模與求解模塊時主要利用D-H法建立機(jī)械手的運(yùn)動學(xué)模型并求出正、逆運(yùn)動學(xué)解,然后在Visual Studio開發(fā)平臺基于MFC對話框調(diào)用OpenGL圖形庫搭建機(jī)械手運(yùn)動學(xué)解算平臺并為“蛟龍?zhí)枴彼伦鳂I(yè)仿真系統(tǒng)提供運(yùn)動學(xué)解算接口。
在人機(jī)交互模塊,將三維模型保存為.FBX格式文件并導(dǎo)入到Unity3D引擎中,添加攝像機(jī)、燈光以及碰撞檢測的設(shè)置,調(diào)用運(yùn)動學(xué)解算接口實現(xiàn)機(jī)械手水下作業(yè)過程的仿真;借助GUI組件在主界面上顯示機(jī)械手各個關(guān)節(jié)及其運(yùn)動的操作鍵實現(xiàn)交互功能,并利用多視角功能及Shader編程渲染出海底霧效增強(qiáng)環(huán)境真實感;最終通過Unity3D的跨平臺功能將其發(fā)布在多平臺上,實現(xiàn)“蛟龍?zhí)枴彼伦鳂I(yè)仿真系統(tǒng)的跨平臺使用。
“蛟龍?zhí)枴贝钶d的機(jī)械手是水下作業(yè)過程中的關(guān)鍵部分,該機(jī)械手由6個旋轉(zhuǎn)關(guān)節(jié)組成,其中3個自由度描述機(jī)械手的末端位置,另外3個自由度用來描述機(jī)械手的末端姿態(tài)。根據(jù)“蛟龍?zhí)枴睓C(jī)械手的結(jié)構(gòu)特點,利用D-H法[7]在每個關(guān)節(jié)處建立直角坐標(biāo)系,將其基座定義為0坐標(biāo)系,得到連桿坐標(biāo)系見圖2。
根據(jù)各關(guān)節(jié)坐標(biāo)系確定D-H參數(shù)見表1。
表1中參數(shù)定義如下[8]。
表1 機(jī)械手的D-H參數(shù)
θi為沿Zi軸從Xi-1軸旋轉(zhuǎn)到Xi軸的角度。
?i-1為繞Xi-1軸從Zi-1軸旋轉(zhuǎn)到Zi軸的角度。
ai-1為沿Xi-1軸從Zi-1軸移動到Zi軸的距離。
di為沿Zi軸從Xi-1軸移動到Xi軸的距離。
2.2.1 運(yùn)動學(xué)正解
正運(yùn)動學(xué)的求解是根據(jù)關(guān)節(jié)變量θi(i=1,2,,6)求末端執(zhí)行器相對于參考坐標(biāo)系位姿的過程。將相鄰連桿間的變換矩陣通式[9]以及由表(1)中的D-H參數(shù)得到的各連桿變換矩陣相乘,求出關(guān)節(jié)末端相對于基坐標(biāo)系的變換矩陣,即末端執(zhí)行器相對于基坐標(biāo)系的位置。
(1)
式中:
nx=s6(c4s1-s4c1c23)-c6(s5c1s23-c5(s1s4+c4c1c23));ny=-c6(s5s1s23+c5(c1s4-c4c23s1))-s6(c1c4+s4c23s1);nz=s4s6s23-c6(s5c23+c4c5s23);ox=s6(s5c1s23-c5(s1s4+c4c1c23))+c6(c4s1-s4c1c23);oy=s6(s5s1s23+c5(c1s4-c4c23s1))-c6(c1c4+s4c23s1);oz=s6(s5c23+c4c5s23)+c6s4s23;ax=-c5c1s23-s5(s1s4+c4c1c23);ay=s5(c1s4-c4c23s1)-c5s1s23;az=c4s5s23-c5c23;px=a1c1+a3c1c23-d4c1s23+a2c1c2;py=a1s1+a3c23s1-d4s1s23+a2c2s1;pz=-a2s2-a3s23-d4c23。
其中:s23=s2c3+c2s3;c23=c2c3-s2s3。
將θ1=90°,θ2=-90°,θ3=90°,θ4=0°,θ5=0°,θ6=0°代入式(1)中,計算得到末端位姿為
(2)
由式(2)可見,末端執(zhí)行器的位姿與圖2所示的位姿一致,證明運(yùn)動學(xué)求解正確。
2.2.2 運(yùn)動學(xué)逆解
在實際應(yīng)用中,上述過程的逆過程非常實用,即已知機(jī)器臂末端執(zhí)行器的位姿,求解各關(guān)節(jié)轉(zhuǎn)角。機(jī)器人逆運(yùn)動學(xué)求解常用解析法,解析解的存在性與機(jī)械臂的結(jié)構(gòu)有關(guān)。3個相鄰的軸相交于一點的6自由度操作臂,必定存在解析解。顯然,“蛟龍?zhí)枴睓C(jī)械手的連桿坐標(biāo)系{4},{5},{6}原點相交于一點,可求出解析解。將式(2)中的2端分別乘上對應(yīng)的逆矩陣并令等式2端左右相等,求得各關(guān)節(jié)轉(zhuǎn)角如下。[10]
(0T1)-10T6=1T22T33T44T55T6
(0T2)-10T6=2T33T44T55T6
(0T3)-10T6=3T44T55T6
(0T4)-10T6=4T55T6
(0T5)-10T6=5T6
逆運(yùn)動學(xué)求解過程中涉及反三角函數(shù)的求解問題,所以要使機(jī)械手末端執(zhí)行器到達(dá)空間中的任意位姿,各關(guān)節(jié)存在多種轉(zhuǎn)角情況。然而由于機(jī)械手自身結(jié)構(gòu)以及關(guān)節(jié)旋轉(zhuǎn)角度范圍會限制到各關(guān)節(jié)轉(zhuǎn)角,有些解在實際過程中是不存在的,因此從滿足轉(zhuǎn)角限制的關(guān)節(jié)角中選擇從初始位姿到目標(biāo)位姿的運(yùn)動過程中代價最小的解作為最優(yōu)解。
2.2.3 運(yùn)動學(xué)解驗證與解算平臺的搭建
運(yùn)動學(xué)解的驗證與解算均涉及較多的機(jī)器人學(xué)求解問題,采用VC++作為編程語言。
在運(yùn)動學(xué)解的驗證方面,利用正運(yùn)動學(xué)算法,根據(jù)任意選取的幾組關(guān)節(jié)轉(zhuǎn)角可以得到相應(yīng)的末端位姿矩陣;根據(jù)得到的機(jī)械手末端姿態(tài)矩陣以及逆運(yùn)動學(xué)求解算法,反解出各個位姿所對應(yīng)的八組關(guān)節(jié)角;根據(jù)最優(yōu)關(guān)節(jié)角的選取原則[11],將最優(yōu)解與初始選取的關(guān)節(jié)角進(jìn)行對比并分析,在誤差允許的情況下,驗證逆運(yùn)動學(xué)解的正確性。
以初始狀態(tài)的關(guān)節(jié)角θ=[θ1,θ2,θ3,θ4,θ5,θ6] =[90°,-90°,90°,0°,0°,0°]為例,正、逆運(yùn)動學(xué)求解結(jié)果見圖3。其中兩組解為可行解。在誤差允許的情況下,根據(jù)最優(yōu)關(guān)節(jié)角的選取原則,對比最優(yōu)解與初始關(guān)節(jié)角,得到的第一組解與初始輸入角度一致。由此,驗證了運(yùn)動學(xué)求解算法的正確性,可將該仿真平臺作為“蛟龍?zhí)枴彼伦鳂I(yè)仿真系統(tǒng)的運(yùn)動學(xué)解算接口。
由于運(yùn)動學(xué)解算軟件使用MFC開發(fā),而機(jī)械手水下作業(yè)仿真系統(tǒng)的開發(fā)是采用Unity3D三維引擎,二者之間不能直接通信,因此借助HTML文件解決運(yùn)動學(xué)解算軟件中MFC應(yīng)用程序接口與Unity3D程序的對接問題,實現(xiàn)將“蛟龍?zhí)枴睓C(jī)械手三維仿真系統(tǒng)與運(yùn)動學(xué)解算模塊相結(jié)合[12]。運(yùn)動學(xué)解算的應(yīng)用程序接口和“蛟龍?zhí)枴彼伦鳂I(yè)機(jī)械手仿真系統(tǒng)間的函數(shù)關(guān)系見圖4。
利用3DMax場景建模工具建立“蛟龍?zhí)枴比S模型,在Unity3D場景開發(fā)平臺下,基于用戶體驗設(shè)計開發(fā)人機(jī)交互界面,調(diào)用三維視景庫及機(jī)械手的運(yùn)動學(xué)模型,驅(qū)動機(jī)械手在場景中運(yùn)動與交互,建立載人潛水器水下作業(yè)機(jī)械手的三維交互仿真平臺。
用戶體驗設(shè)計包括信息架構(gòu)、內(nèi)容文本、視覺設(shè)計、交互設(shè)計等[13]。載人潛水器水下作業(yè)機(jī)械手仿真系統(tǒng)的用戶主要是海事院校的師生及參加評估培訓(xùn)的操作人員,這些用戶群體對航海操作實踐有著較高的要求,這就使得所開發(fā)的系統(tǒng)需要緊密結(jié)合航海操作實踐。充分考慮用戶使用需求,基于Unity3D開發(fā)出的水下作業(yè)仿真系統(tǒng)增加了多視角切換功能,用戶在操作仿真系統(tǒng)時可以根據(jù)自身的需求進(jìn)行調(diào)整,使得在增強(qiáng)仿真系統(tǒng)的真實感和靈活性的同時提升用戶體驗效果;在交互界面的右上角,增加了顯示機(jī)械手細(xì)節(jié)的小窗口,可方便用戶觀察其操作過程;在人機(jī)交互界面中使用GUI組件,用戶可以在利用鍵盤進(jìn)行人機(jī)交互的前提下,使用主界面中GUI組件顯示的機(jī)械臂各關(guān)節(jié)的操作鍵來控制其運(yùn)動;采用Shader編程渲染出海底霧效,增強(qiáng)了三維仿真系統(tǒng)的操作真實感。設(shè)計效果見圖5、6。
在本仿真系統(tǒng)中,把末端執(zhí)行器坐標(biāo)系相對于固定坐標(biāo)系原點的位置坐標(biāo)值x,y,z和繞固定坐標(biāo)系x軸,y軸,z軸的3個轉(zhuǎn)角β、?、γ這6個參數(shù)作為確定末端執(zhí)行器位姿的一種方式。將上述6個坐標(biāo)參數(shù)確定的坐標(biāo)系映射到由向量n、o、a、p確定的坐標(biāo)系中,調(diào)用運(yùn)動學(xué)解算接口即可求得要到達(dá)指定位姿時機(jī)械手各關(guān)節(jié)的旋轉(zhuǎn)角度。求得關(guān)節(jié)角后,將其轉(zhuǎn)換為模型在場景中的歐拉角即可在三維場景中控制機(jī)械臂的運(yùn)動。操作過程見圖7。
碰撞檢測是保障三維仿真系統(tǒng)真實感的必要條件。通過在機(jī)械手末端執(zhí)行器上添加Unity3D引擎中自帶的碰撞檢測組件Mesh Collider(網(wǎng)格碰撞器)以提高碰撞檢測的精確程度。同時,編寫相應(yīng)的碰撞檢測函數(shù)可控制機(jī)械手檢測到碰撞后的行為。操作機(jī)械手進(jìn)行取樣的過程見圖8。
該仿真系統(tǒng)突破了時間及場地的限制,基于該平臺,可以對操作人員的水下作業(yè)技術(shù)進(jìn)行系統(tǒng)訓(xùn)練,在一定程度上降低訓(xùn)練成本并提高操作人員的培訓(xùn)效率。后續(xù)研究可以考慮從以下兩個方向:建立被操作物體與機(jī)械手末端執(zhí)行器的碰撞檢測模型,使對不規(guī)則物體進(jìn)行的作業(yè)仿真更為精確;構(gòu)建更多的作業(yè)海區(qū)海底復(fù)雜環(huán)境,如富鈷結(jié)殼區(qū)、熱液噴口以及冷泉區(qū)等。