李 珅,廖華麗
(河海大學機電工程學院,江蘇 常州 213022)
ROV(Remotely Operated Vehicle)在水下工程應用方面有著突出的實用性,普遍用于海洋湖泊水下構筑物的檢測,然而其工作環(huán)境的特殊性導致人們無法直觀地了解其工作狀態(tài)和健康狀況[1]。利用類似虛擬現(xiàn)實[2]中動作捕捉技術[3]實時檢測穿戴者位姿并在三維圖形軟件中繪制動畫的原理,可以開發(fā)一個實時仿真平臺[4],利用ROV傳感器傳回的位姿信息,驅(qū)動三維模型運動[5],為觀測者提供一目了然的視景平臺。
UDK(Unreal Development Kit)是Epic公司著名的虛幻游戲引擎的免費版本,具有渲染效率高、物理屬性逼真、與多種三維圖形軟件無縫相接等優(yōu)勢,不僅適用于大型網(wǎng)游制作,同樣適用于仿真平臺的開發(fā)。由于是免費版本,底層代碼并未開放,故需用其腳本語言UnrealScript編寫大部分代碼[6]。
圖1 ROV實物結構圖
這套水下構筑物探測機器人系統(tǒng)由機械結構和控制模塊組成,后者被封裝在密封艙內(nèi),而前者在人為控制和水流的綜合作用下朝著指定的位置前進并進行作業(yè)。其中,除了機械框體本身,還產(chǎn)生“運動”的機械零部件有提供推進力的舵機螺旋槳和ROV用于貼著水下構筑物表面行走的萬向輪。通過框體的位姿、螺旋槳的旋轉(zhuǎn)速度及萬向輪的前進方向、速度來表征ROV運動狀態(tài)。此套ROV實物結構圖如圖1所示。
本系統(tǒng)結構如圖2所示,其開發(fā)可分為4個方面:通信協(xié)議、虛擬環(huán)境、模型控制和操作界面。要實時模擬ROV運動狀態(tài),需將傳感器采集的GPS、位姿和ROV遠程操縱桿上使用的速度等級信息通過通信協(xié)議實時傳輸?shù)教摂M環(huán)境中來控制三維模型進行相同的動作[7],而用戶則使用操作界面來與虛擬環(huán)境進行交互。這里需要用到的開發(fā)軟件主要有3DS Max、UDK、VS2010和一些TCP/IP調(diào)試工具等。
圖2 實時仿真系統(tǒng)結構圖
之所以選擇UDK作為主要的開發(fā)軟件,是因為虛幻引擎具有炫目逼真的視覺效果,區(qū)別于工程類仿真軟件精確的數(shù)據(jù)計算,它更注重仿真效果的表現(xiàn)力和浸沒感。因此,虛擬環(huán)境的搭建先在3DS Max和Photoshop中完成模型的形體、材質(zhì)貼圖和其他必要設置,通過FBX插件導入UDK中,再在VS2010中創(chuàng)建ROV整體和零部件自定義類[8],確定添加到環(huán)境中的模型組件類型和默認屬性后,擺放到虛幻編輯器(UnrealEd)中[9],并用其自帶的豐富的建模、材質(zhì)、燈光、關卡設定工具來進一步完善虛擬環(huán)境[10],為之后的模型控制做好準備。
ROV模型由框體和零部件組成,為了節(jié)省工作量,將重點放在ROV的控制代碼上,將ROV框體、舵機極其渦輪建模為靜態(tài)網(wǎng)格物體(StaticMesh),省去在3DS Max[11-13]中繁瑣的骨骼蒙皮等問題。高低模型的創(chuàng)建有利于渲染光照、凹凸貼圖,以更少的面片數(shù)獲得更好的視覺效果,同時也節(jié)約軟件運行消耗。
模型在導出前必須坐標歸零,保證導入到UDK中后坐標中心在正確的位置,方便后期模型按理想的參考點運動;須Reset Xform,保留模型最后的狀態(tài)方可導出,避免導入后模型變形等問題。
實時仿真流程如圖3所示,主要是仿真系統(tǒng)接收服務器發(fā)送的數(shù)據(jù)后,解析成驅(qū)動模型運動的變量;模型達到最后一組數(shù)據(jù)位姿后,向服務器反饋信號,提示可繼續(xù)發(fā)送下一組數(shù)據(jù)。
圖3 實時仿真流程圖
圖4 客戶機程序代碼流程圖
利用UnrealScript預留的TcpLink類,編寫客戶端程序,實現(xiàn)從網(wǎng)絡服務器向UDK傳輸文本的功能[14]。將實時采集的ROV位姿、舵機速度等信號以TXT文本的形式發(fā)送到腳本工程并解析為位置(vector)、角度(rotator)和速度等級(speedgrade)信息。具體代碼流程如圖4所示。
直接繼承Actor類得到ROV框架類、舵機類、渦輪類,并按照舵機的方向布置分別得到另外2個子類。UnrealEd地圖里擺放一個ROV框架,6個舵機和渦輪,需要在程序初始化時在主控制類里使用ForEach迭代器識別各個模型后方可進行控制。
3.2.1 框架控制
框架的運動狀態(tài)表現(xiàn)為傳感器實時測得的位置和角度信息,經(jīng)由通信協(xié)議傳遞給框架類中的動態(tài)數(shù)組[15];由于ROV運動相對緩慢,每次測得的位姿差距并不大,加之仿真需盡量與ROV同步,故計算動態(tài)數(shù)組中前后2個位置和角度的矢量差值,即計算最短距離,然后用SetLocation()和SetRotation()函數(shù)分多次到達位姿,模擬連續(xù)平滑的運動效果;當框架位置和角度到達指定位置后,讀取下一個位置和角度坐標;反復進行,當遍歷過所有動態(tài)數(shù)組中坐標后,直到到達動態(tài)數(shù)組中最后一個位姿,反饋完成標識符給服務器,請求發(fā)送更多的數(shù)據(jù)??蚣芪恢煤徒嵌冗\動流程圖如圖5所示。
圖5 框架位姿控制流程圖
3.2.2 舵機控制
舵機本身與框架的相對運動是靜止的,故而作為子物體綁定在框架上,并將標識符bHardAttach設為True;渦輪在跟隨舵機位置改變的同時也沿著舵機軸心自轉(zhuǎn),故也作為子物體綁定在舵機上,卻保留其旋轉(zhuǎn)自由度。其自轉(zhuǎn)速度由通信協(xié)議解析TXT文本得到的速度等級信號(SpeedGrade)和舵機角度變化速率,即ROV框架角度變化速率共同決定。由于相對角度計算較為復雜,這里借助旋轉(zhuǎn)矩陣[16-17],在UDK中,旋轉(zhuǎn)量由回轉(zhuǎn)角、俯仰角和偏轉(zhuǎn)角決定,其軸向和正方向如圖6所示。
圖6 Rotator(Pitch,Yaw,Roll)空間表示
從圖6可知,旋轉(zhuǎn)坐標系相對參考坐標系的旋轉(zhuǎn)矩陣有:
1)繞X軸旋轉(zhuǎn)γ:
2)繞Y軸旋轉(zhuǎn)α:
3)繞Z軸旋轉(zhuǎn)β:
其中[9],Cα =cos α,Sα =sin α。
在UDK中,旋轉(zhuǎn)坐標系相對參考坐標系的旋轉(zhuǎn)矩陣表示為:
渦輪在以舵機坐標系為參考系沿著Yaw旋轉(zhuǎn)角度Δ,得到的旋轉(zhuǎn)矩陣表示為:M'=rot(z,Δ)×M。
從TcpLink類中解析得到ROV框架的角度值,即(α,β,γ)和渦輪速度等級低速、中速、高速分別設置Δ的值,由這4個已知量計算M',令M'=M,得到渦輪的旋轉(zhuǎn)值(α',β',γ'),實現(xiàn)舵機和渦輪的同步。渦輪旋轉(zhuǎn)速度快慢、起止時間流程如圖7所示。
圖7 渦輪旋轉(zhuǎn)控制流程圖
3.2.3 用于ROV模型運動控制的主要函數(shù)列表
運動控制主要函數(shù)列表見表1。
表1 運動控制主要函數(shù)列表
利用TCP/IP調(diào)試工具對仿真系統(tǒng)進行測試并將控制臺輸出的三維模型位姿與輸入數(shù)據(jù)相比較來驗證仿真結果的準確性,同時在渲染窗口中觀察仿真效果。步驟如下:進入仿真系統(tǒng)界面;由控制臺輸入開啟TCP/IP傳輸命令行;讓TCP/IP調(diào)試工具作為服務端輸入一組數(shù)據(jù);仿真系統(tǒng)運行完成后反饋信息給服務端并請求下一組數(shù)據(jù)。
控制臺初始化TCP/IP、三維模型實時位姿以及反饋信息如圖8所示(以一組9套數(shù)據(jù)為例)。
圖8 控制臺信息顯示圖
這組數(shù)據(jù)對應的仿真界面渲染窗口中三維模型每到達一套數(shù)據(jù)的效果圖如圖9所示。用戶在觀察期間,可通過鼠標、鍵盤改變觀測角度,以方便全方位了解ROV運動狀態(tài)。
圖9 渲染窗口效果圖
用虛擬現(xiàn)實的表現(xiàn)手法來展示ROV的實時運動狀態(tài),討論了基于3DS Max和UDK平臺的實時仿真系統(tǒng),包括三維建模、通信協(xié)議和模型控制。經(jīng)調(diào)試,ROV模型能到達指定的位置和角度,各零部件也配合良好,讓觀測者對ROV運動狀態(tài)有更加直觀的感受。筆者將進一步研究ROV與虛擬環(huán)境的交互,及后者與前者拍攝的水下視頻之間的融合,以便在逼真地還原前者運動狀態(tài)的同時,獲得更佳的浸沒感。
[1] 葛新,郭威.基于虛擬現(xiàn)實的ROV輔助控制系統(tǒng)設計[J].機械設計與制造,2012(11):91-93.
[2] 胡西偉.基于三維動畫與虛擬現(xiàn)實技術的理論研究[D].武漢:武漢大學,2005.
[3] 徐捷.結合動作捕捉數(shù)據(jù)的三維卡通人物的動畫生成方法研究[D].杭州:浙江大學,2003.
[4] 張禹,劉開周,邢志偉,等.自治水下機器人實時仿真系統(tǒng)開發(fā)研究[J].計算機仿真,2004,21(4):155-158.
[5] 王清泉.基于UNREAL的虛擬環(huán)境與駕駛系統(tǒng)交互控制研究[D].秦皇島:燕山大學,2011.
[6] Cordone R.Unreal Development Kit Game Programming with UnrealScript:Beginner’s Guide[M].Packt Publishing,2011.
[7] Epic Games.UDN虛幻引擎3技術指南[EB/OL].http://udn.epicgames.com/Three/WebHomeCH.html,2013-12-20.
[8] X9.Isometric Camera Including Pathfinding from the Ground Up[DB/OL].http://x9productions.com/blog/?page_id=357,2010-04-02.
[9] Busby J,Parrish Z,Wilson J.精通 Unreal Engine 3卷Ⅰ:3D游戲關卡設計基礎篇[M].武俠,等譯.北京:清華大學出版社,2011.
[10] Busby J,Parrish Z,Wilson J.精通 Unreal Engine 3卷Ⅱ:3D游戲關卡設計高級篇[M].武俠,等譯.北京:清華大學出版社,2011.
[11] 王巖,陳邑.3DS Max材質(zhì)與貼圖技術精粹[M].北京:機械工業(yè)出版社,2007:149-198.
[12] 火星時代.3DS Max 2010大風暴[M].北京:人民郵電出版社,2010.
[13] 王琦.Autodesk 3DS Max 2010標準培訓教材Ⅱ[M].北京:人民郵電出版社,2010.
[14] 任泰明.TCP/IP協(xié)議與網(wǎng)絡編程[M].北京:人民郵電出版社,2009:184-199.
[15] Lippman S B,Lajoie J,Moo B E.C++Primer中文版[M].李師賢,等譯.北京:人民郵電出版社,2012.
[16] Craig J J.機器人學導論[M].贠超,等譯.北京:機械工業(yè)出版社,2013:30-35.
[17] 陳銳.C/C++函數(shù)與算法速查手冊[M].北京:中國鐵道出版社,2012.