一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法
【專利摘要】本發(fā)明涉及一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法,將虛擬現(xiàn)實(shí)技術(shù)應(yīng)用到水下機(jī)器人實(shí)時(shí)仿真領(lǐng)域,實(shí)現(xiàn)了對水下機(jī)器人運(yùn)動(dòng)狀態(tài)的直觀觀察;借助計(jì)算機(jī)圖形庫的強(qiáng)大圖形建模和渲染能力,將仿真平臺搭建在DirectX環(huán)境下對水下機(jī)器人進(jìn)行仿真的方法。本發(fā)明實(shí)現(xiàn)了三維軟件建模模型和計(jì)算機(jī)圖形庫所需模型的對應(yīng),簡化了數(shù)據(jù)讀入量,增大了測試渲染效果時(shí)的靈活性;配合Direct2D和DirectWrite平面庫,實(shí)現(xiàn)了仿真系統(tǒng)的用戶界面問題,自定義的方式使得界面美觀合理,避免使用傳統(tǒng)木訥的用戶界面框;有良好的拓展性。
【專利說明】一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及實(shí)時(shí)仿真領(lǐng)域,尤其是一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法。
【背景技術(shù)】
[0002]水下機(jī)器人主要用于大壩水下構(gòu)筑物檢測和清刷,其工作環(huán)境特殊,水下機(jī)器人現(xiàn)實(shí)作業(yè)時(shí),先將其放入水中漂浮起來,再由控制人員操控游戲手柄控制推進(jìn)器螺旋槳旋轉(zhuǎn)速度,將其調(diào)整為側(cè)立姿態(tài),貼在大壩墻體上行走,其在大壩中的位置實(shí)時(shí)改變著。期間,伴隨水流、水深的影響,其姿態(tài)也會產(chǎn)生一定波動(dòng),同樣是實(shí)時(shí)變化的。而現(xiàn)實(shí)作業(yè)中無法用肉眼直接觀察其運(yùn)動(dòng)情況;而由于傳感器傳回的數(shù)據(jù)量大,值變化快,且多個(gè)傳感器的操作界面并不相同,操作人員和觀察人員很難直觀、快速地了解水下機(jī)器人的運(yùn)動(dòng)和其在水下的具體位置。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問題是:提出一種將虛擬現(xiàn)實(shí)技術(shù)應(yīng)用到水下機(jī)器人實(shí)時(shí)仿真領(lǐng)域,實(shí)現(xiàn)了對水下機(jī)器人運(yùn)動(dòng)狀態(tài)的直觀觀察;借助計(jì)算機(jī)圖形庫的強(qiáng)大圖形建模和渲染能力,將仿真平臺搭建在DirectX環(huán)境下對水下機(jī)器人進(jìn)行仿真的方法。
[0004]本發(fā)明所采用的技術(shù)方案為:一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法,包括以下步驟:
[0005]I)利用三維軟件完成水下機(jī)器人三維建模,創(chuàng)建水下機(jī)器人實(shí)體模型;并分別細(xì)化和縮減模型層次以獲得面片數(shù)多、細(xì)節(jié)豐富的高模和面片數(shù)少、只具有基本造型特征的低模;將低模展開UV,并將高模分別渲染為低模的法線貼圖、漫反射貼圖和光照貼圖,留作水下虛擬場景中渲染使用;
[0006]2)設(shè)計(jì)水下虛擬場景;
[0007]3)將機(jī)器人模型以O(shè)BJ文件格式輸出以獲取各實(shí)體表面的數(shù)據(jù),然后提取頂點(diǎn)坐標(biāo)和面片信息寫入TXT文件格式,在D3D環(huán)境下將其導(dǎo)入仿真系統(tǒng)中;實(shí)現(xiàn)三維實(shí)體模型由三維軟件向D3D的轉(zhuǎn)換;同時(shí),在虛擬場景中繪制模型時(shí)計(jì)算其頂點(diǎn)法線向量和正切向量用于渲染;
[0008]4)校準(zhǔn)虛擬場景世界坐標(biāo)系和安裝在真實(shí)的水下機(jī)器人框架上用于接收姿態(tài)數(shù)據(jù)的陀螺儀坐標(biāo)系,確保虛擬環(huán)境中機(jī)器人模型的姿態(tài)擺動(dòng)方向和真實(shí)環(huán)境相同;校準(zhǔn)虛擬大壩和真實(shí)大壩的尺寸比,縮小超短基線、水深傳感器數(shù)據(jù)的比例;
[0009]5)使用HLSL配合C++應(yīng)用程序渲染虛擬場景和水下機(jī)器人模型,從效果文件(.fx)計(jì)算每個(gè)模型頂點(diǎn)的光線向量,根據(jù)步驟3)中得到的頂點(diǎn)信息插值計(jì)算每個(gè)像素點(diǎn)的漫反射、鏡面反射、環(huán)境光、法線貼圖等材質(zhì)信息;確定計(jì)算機(jī)更新頻率,并以時(shí)間為自變量設(shè)定步驟2)中水下景物、燈光產(chǎn)生動(dòng)態(tài)效果所需的物理方程;
[0010]6)編寫通信協(xié)議;讓仿真系統(tǒng)實(shí)時(shí)接收來自真實(shí)水下機(jī)器人陀螺儀、超短基線和水深傳感器的數(shù)據(jù),并每幀更新虛擬場景中機(jī)器人模型的三維位置和姿態(tài),再現(xiàn)真實(shí)機(jī)器人在水下的運(yùn)動(dòng)狀態(tài)。
[0011]進(jìn)一步的說,本發(fā)明所述的步驟3)中,將水下機(jī)器人三維模型低模每個(gè)頂點(diǎn)的位置坐標(biāo)、每個(gè)三角形面片上三個(gè)頂點(diǎn)的編號、排列數(shù)據(jù)寫入到TXT文件后在D3D水下虛擬場景中讀入,同時(shí)計(jì)算模型頂點(diǎn)的法線向量、切線向量;將水下虛擬場景中景物模型導(dǎo)出為自定義類型文件,包含其頂點(diǎn)位置、法線向量、切線向量、UV貼圖信息和三角形面片拓?fù)湫畔ⅲ?br>
[0012]再進(jìn)一步的說,本發(fā)明所述的步驟4)中,根據(jù)虛擬場景世界坐標(biāo)系X、Y、Z軸和水下機(jī)器人實(shí)物框架上安裝的陀螺儀坐標(biāo)系X、Y、Z軸的對應(yīng)關(guān)系,確定俯仰角、橫滾角、航向角所繞的軸及它們的正反向;根據(jù)真實(shí)測定的大壩尺寸和聲吶定位原點(diǎn),確定水下機(jī)器人實(shí)物位置數(shù)據(jù)縮小到虛擬場景中所需的比例和偏移量;
[0013]再進(jìn)一步的說,本發(fā)明所述的步驟6)中,使用Winsock中TCP/IP客戶端協(xié)議傳輸陀螺儀姿態(tài)數(shù)據(jù)、超短基線和水深傳感器的位置數(shù)據(jù)到虛擬場景中,并根據(jù)步驟4)中確定的轉(zhuǎn)換算法解析為相應(yīng)的數(shù)據(jù)傳給機(jī)器人模型和場景光照,仿真系統(tǒng)每幀刷新后臺緩沖區(qū)將新的模型位置、姿態(tài)顯示到屏幕上。
[0014]本發(fā)明的有益效果是:
[0015]a、實(shí)現(xiàn)了三維軟件建模模型和計(jì)算機(jī)圖形庫所需模型的對應(yīng),只提取模型的頂點(diǎn)和拓?fù)渌饕P(guān)系,大大簡化了數(shù)據(jù)讀入量。各模型材質(zhì)在模型進(jìn)入D3D后再進(jìn)行設(shè)定,省去了每次修改模型材質(zhì)都要重新回到三維軟件中調(diào)整的麻煩,方便在D3D中直接修改,增大了測試渲染效果時(shí)的靈活性;
[0016]b、由于DirectX和Winsock都是WindowsAPI,故只要將虛擬環(huán)境作為客戶端,通過簡單的消息函數(shù)即可實(shí)現(xiàn)水下機(jī)器人傳回的傳感器數(shù)據(jù)和虛擬環(huán)境的通信,減小了開發(fā)不必要的復(fù)雜性,只需在了解Windows下各種API接口的交互方法后,即可專注在仿真效果和準(zhǔn)確性上,更多地考慮算法和效率問題;
[0017]C、配合Direct2D和DirectWrite平面庫,實(shí)現(xiàn)了仿真系統(tǒng)的用戶界面問題,自定義的方式使得界面美觀合理,避免使用傳統(tǒng)木訥的用戶界面框;
[0018]d、可按照邏輯合理地定義水下機(jī)器人模型的運(yùn)動(dòng)原理,而不必受到三維動(dòng)畫軟件、游戲引擎既定的物理運(yùn)動(dòng)的限制,有良好的拓展性;
[0019]e、由于采用C++直接編程開發(fā),故很容易增添新的功能或與其他部分,如水下機(jī)器人控制方面交互、配合,并且省去了版權(quán)問題;
[0020]f、可在水下機(jī)器人實(shí)體正在作業(yè)時(shí)實(shí)現(xiàn)仿真系統(tǒng)的回放,查看之前的數(shù)據(jù);還能在作業(yè)結(jié)束后,將傳感器傳回的姿態(tài)、位置、水深數(shù)據(jù)保存為TXT文檔,方便以后分析。
【專利附圖】
【附圖說明】
[0021]下面結(jié)合附圖和實(shí)施例對本發(fā)明進(jìn)一步說明。
[0022]圖1是本發(fā)明的仿真方法流程圖;
[0023]圖2是本發(fā)明的軟件流程圖。
【具體實(shí)施方式】
[0024]現(xiàn)在結(jié)合附圖和優(yōu)選實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)的說明。這些附圖均為簡化的示意圖,僅以示意方式說明本發(fā)明的基本結(jié)構(gòu),因此其僅顯示與本發(fā)明有關(guān)的構(gòu)成。
[0025]如圖1、2所示,一種在C++圖形庫DirectX環(huán)境下實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法。其原理是:在三維建模環(huán)境下,構(gòu)建水下機(jī)器人實(shí)體模型和大壩虛擬水下場景,將機(jī)器人模型以O(shè)BJ文件格式輸出以獲取各實(shí)體表面的數(shù)據(jù),然后提取頂點(diǎn)坐標(biāo)和面片信息寫入TXT文件格式,在D3D環(huán)境下將其導(dǎo)入仿真系統(tǒng)中,實(shí)現(xiàn)三維實(shí)體模型由三維軟件向D3D的轉(zhuǎn)換,同時(shí),在虛擬場景中繪制模型時(shí)計(jì)算其頂點(diǎn)法線向量和正切向量用于渲染。校準(zhǔn)虛擬場景世界坐標(biāo)系和安裝在真實(shí)的水下機(jī)器人框架上用于接收姿態(tài)數(shù)據(jù)的陀螺儀坐標(biāo)系,確保虛擬環(huán)境中機(jī)器人模型的姿態(tài)擺動(dòng)方向和真實(shí)環(huán)境相同;校準(zhǔn)虛擬大壩和真實(shí)大壩的尺寸比,合理縮小超短基線、水深傳感器數(shù)據(jù)的比例,以免超出虛擬大壩范圍。編寫通信協(xié)議,讓仿真系統(tǒng)實(shí)時(shí)接收來自真實(shí)水下機(jī)器人陀螺儀、超短基線和水深傳感器的數(shù)據(jù),并每幀更新虛擬場景中機(jī)器人模型的三維位置和姿態(tài),再現(xiàn)真實(shí)機(jī)器人在水下的運(yùn)動(dòng)狀態(tài)。設(shè)計(jì)用戶交互界面,通過鼠標(biāo)鍵盤改變相機(jī)位置便于觀察,回放實(shí)時(shí)仿真后的數(shù)據(jù)等。
[0026]具體步驟如下:
[0027]1、創(chuàng)建水下機(jī)器人實(shí)體模型。根據(jù)水下機(jī)器人實(shí)物的外形尺寸和造型特點(diǎn),在三維軟件里完成水下機(jī)器人三維建模,并分別細(xì)化和縮減模型層次以獲得面片數(shù)多、細(xì)節(jié)較為豐富的高模和面片數(shù)少、只具有基本造型特征的低模;將低模展開UV,并將高模分別渲染為低模的法線貼圖、漫反射貼圖和光照貼圖,留作水下虛擬場景中渲染使用。
[0028]2、設(shè)計(jì)水下虛擬場景。此款水下機(jī)器人主要用于大壩水下構(gòu)筑物的檢測,因此,水下虛擬場景模型主要有大壩壩體、壩底凹凸地形、泥沙石子、水面水波和水下水流、水下動(dòng)植物等裝飾物等;特效主要有隨著水深而顏色加深的燈光、表現(xiàn)水下全景的天空立方盒、水下機(jī)器人模型上的探照燈、增強(qiáng)水下景物真實(shí)性的法線貼圖、陰影貼圖等,以及水流粒子和隨水流擺動(dòng)的水下動(dòng)植物等。
[0029]3、將水下機(jī)器人三維模型低模每個(gè)頂點(diǎn)的位置坐標(biāo)、每個(gè)三角形面片上三個(gè)頂點(diǎn)的編號、排列數(shù)據(jù)寫入到TXT文件后在D3D水下虛擬場景中讀入,同時(shí)計(jì)算模型頂點(diǎn)的法線向量、切線向量;將水下虛擬場景中景物模型導(dǎo)出為自定義類型文件,包含其頂點(diǎn)位置、法線向量、切線向量、UV貼圖信息和三角形面片拓?fù)湫畔ⅰ?br>
[0030]4、根據(jù)虛擬場景世界坐標(biāo)系X、Y、Z軸和水下機(jī)器人實(shí)物框架上安裝的陀螺儀坐標(biāo)系X、Y、Z軸的對應(yīng)關(guān)系,確定俯仰角、橫滾角、航向角所繞的軸及它們的正反向;根據(jù)真實(shí)測定的大壩尺寸和聲吶定位原點(diǎn),確定水下機(jī)器人實(shí)物位置數(shù)據(jù)縮小到虛擬場景中所需的比例和偏移量。
[0031]5、使用HLSL配合C++應(yīng)用程序渲染虛擬場景和水下機(jī)器人模型,從效果文件(.fx)計(jì)算每個(gè)模型頂點(diǎn)的光線向量,根據(jù)步驟3中得到的頂點(diǎn)信息插值計(jì)算每個(gè)像素點(diǎn)的漫反射、鏡面反射、環(huán)境光、法線貼圖等材質(zhì)信息;確定計(jì)算機(jī)更新頻率,并以時(shí)間為自變量設(shè)定步驟2中水下景物、燈光產(chǎn)生動(dòng)態(tài)效果所需的物理方程。
[0032]6、編寫通信協(xié)議。使用Winsock中TCP/IP客戶端協(xié)議傳輸陀螺儀姿態(tài)數(shù)據(jù)、超短基線和水深傳感器的位置數(shù)據(jù)到虛擬場景中,并根據(jù)步驟4中確定的轉(zhuǎn)換算法解析為相應(yīng)的數(shù)據(jù)傳給機(jī)器人模型和場景光照,仿真系統(tǒng)每幀刷新后臺緩沖區(qū)將新的模型位置、姿態(tài)顯示到屏幕上。
[0033]7、為了方便實(shí)驗(yàn)暫停時(shí)段以及實(shí)驗(yàn)過后的進(jìn)一步研究,設(shè)置了回放功能。首先,將服務(wù)端每次傳入的數(shù)據(jù)傳遞給系統(tǒng)中的變量,方便在仿真進(jìn)行過程中隨時(shí)回放之前機(jī)器人行走過的位置和運(yùn)動(dòng)姿態(tài);將每次仿真軟件運(yùn)行時(shí)服務(wù)端傳入的數(shù)據(jù)存為一個(gè)TXT文件,保存實(shí)驗(yàn)數(shù)據(jù),留作以后分析之用。
[0034]8、設(shè)計(jì)人機(jī)交互界面。此處需要配合DirectX中另外兩個(gè)AP1:Direct2D和DirectWrite,實(shí)現(xiàn)在顯示窗口上創(chuàng)建二維文字和菜單,實(shí)時(shí)顯示水深、時(shí)間、水下機(jī)器人的位姿信息等;將窗口分為多個(gè)視口,分別顯示水下全景、水下機(jī)器人特寫等,方便從多角度觀察水下機(jī)器人的運(yùn)動(dòng)狀態(tài)。
[0035]以上說明書中描述的只是本發(fā)明的【具體實(shí)施方式】,各種舉例說明不對本發(fā)明的實(shí)質(zhì)內(nèi)容構(gòu)成限制,所屬【技術(shù)領(lǐng)域】的普通技術(shù)人員在閱讀了說明書后可以對以前所述的【具體實(shí)施方式】做修改或變形,而不背離本發(fā)明的實(shí)質(zhì)和范圍。
【權(quán)利要求】
1.一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法,其特征在于包括以下步驟: 1)利用三維軟件完成水下機(jī)器人三維建模,創(chuàng)建水下機(jī)器人實(shí)體模型;并分別細(xì)化和縮減模型層次以獲得面片數(shù)多、細(xì)節(jié)豐富的高模和面片數(shù)少、只具有基本造型特征的低模;將低模展開UV,并將高模分別渲染為低模的法線貼圖、漫反射貼圖和光照貼圖,留作水下虛擬場景中渲染使用; 2)設(shè)計(jì)水下虛擬場景; 3)將機(jī)器人模型以O(shè)BJ文件格式輸出以獲取各實(shí)體表面的數(shù)據(jù),然后提取頂點(diǎn)坐標(biāo)和面片信息寫入TXT文件格式,在D3D環(huán)境下將其導(dǎo)入仿真系統(tǒng)中;實(shí)現(xiàn)三維實(shí)體模型由三維軟件向D3D的轉(zhuǎn)換;同時(shí),在虛擬場景中繪制模型時(shí)計(jì)算其頂點(diǎn)法線向量和正切向量用于渲染; 4)校準(zhǔn)虛擬場景世界坐標(biāo)系和安裝在真實(shí)的水下機(jī)器人框架上用于接收姿態(tài)數(shù)據(jù)的陀螺儀坐標(biāo)系,確保虛擬環(huán)境中機(jī)器人模型的姿態(tài)擺動(dòng)方向和真實(shí)環(huán)境相同;校準(zhǔn)虛擬大壩和真實(shí)大壩的尺寸比,縮小超短基線、水深傳感器數(shù)據(jù)的比例; 5)使用HLSL配合C++應(yīng)用程序渲染虛擬場景和水下機(jī)器人模型,從效果文件(.fx)計(jì)算每個(gè)模型頂點(diǎn)的光線向量,根據(jù)步驟3)中得到的頂點(diǎn)信息插值計(jì)算每個(gè)像素點(diǎn)的漫反射、鏡面反射、環(huán)境光、法線貼圖等材質(zhì)信息;確定計(jì)算機(jī)更新頻率,并以時(shí)間為自變量設(shè)定步驟2)中水下景物、燈光產(chǎn)生動(dòng)態(tài)效果所需的物理方程; 6)編寫通信協(xié)議;讓仿真系統(tǒng)實(shí)時(shí)接收來自真實(shí)水下機(jī)器人陀螺儀、超短基線和水深傳感器的數(shù)據(jù),并每幀更新虛擬場景中機(jī)器人模型的三維位置和姿態(tài),再現(xiàn)真實(shí)機(jī)器人在水下的運(yùn)動(dòng)狀態(tài)。
2.如權(quán)利要求1所述的一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法,其特征在于:所述的步驟3)中,將水下機(jī)器人三維模型低模每個(gè)頂點(diǎn)的位置坐標(biāo)、每個(gè)三角形面片上三個(gè)頂點(diǎn)的編號、排列數(shù)據(jù)寫入到TXT文件后在D3D水下虛擬場景中讀入,同時(shí)計(jì)算模型頂點(diǎn)的法線向量、切線向量;將水下虛擬場景中景物模型導(dǎo)出為自定義類型文件,包含其頂點(diǎn)位置、法線向量、切線向量、UV貼圖信息和三角形面片拓?fù)湫畔ⅰ?br>
3.如權(quán)利要求1所述的一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法,其特征在于:所述的步驟4)中,根據(jù)虛擬場景世界坐標(biāo)系X、Y、Z軸和水下機(jī)器人實(shí)物框架上安裝的陀螺儀坐標(biāo)系X、Y、Z軸的對應(yīng)關(guān)系,確定俯仰角、橫滾角、航向角所繞的軸及它們的正反向;根據(jù)真實(shí)測定的大壩尺寸和聲吶定位原點(diǎn),確定水下機(jī)器人實(shí)物位置數(shù)據(jù)縮小到虛擬場景中所需的比例和偏移量。
4.如權(quán)利要求1所述的一種實(shí)現(xiàn)水下機(jī)器人實(shí)時(shí)仿真的方法,其特征在于:所述的步驟6)中,使用Winsock中TCP/IP客戶端協(xié)議傳輸陀螺儀姿態(tài)數(shù)據(jù)、超短基線和水深傳感器的位置數(shù)據(jù)到虛擬場景中,并根據(jù)步驟4)中確定的轉(zhuǎn)換算法解析為相應(yīng)的數(shù)據(jù)傳給機(jī)器人模型和場景光照,仿真系統(tǒng)每幀刷新后臺緩沖區(qū)將新的模型位置、姿態(tài)顯示到屏幕上。
【文檔編號】G05D1/10GK104407521SQ201410642408
【公開日】2015年3月11日 申請日期:2014年11月13日 優(yōu)先權(quán)日:2014年11月13日
【發(fā)明者】廖華麗, 李珅, 周軍, 彭海強(qiáng) 申請人:河海大學(xué)常州校區(qū)