基于MFC和Vega的導(dǎo)航仿真系統(tǒng)
摘 要:為了加快艦載海上航行的慣性導(dǎo)航仿真,論述一種基于MFC和Vega開發(fā)環(huán)境開發(fā)虛擬現(xiàn)實(shí)仿真系統(tǒng)的方法,并且詳細(xì)闡述開發(fā)過程,用于開發(fā)艦載海上航行仿真系統(tǒng),通過對陀螺儀和加速度數(shù)學(xué)模型的建立,完成了慣性器件仿真和艦載航行仿真系統(tǒng)的研究。結(jié)果表明該系統(tǒng)能使設(shè)計(jì)人員很直觀地觀察艦載的航行,航行姿態(tài),同時(shí),采用面向?qū)ο蟮脑O(shè)計(jì)方法,遵循軟件的開發(fā)規(guī)范,驗(yàn)證了平臺(tái)的可行性和有效性,有利于艦載慣性導(dǎo)航仿真的設(shè)計(jì),同時(shí)對虛擬現(xiàn)實(shí)的開發(fā)也有很好的借鑒作用。
關(guān)鍵詞:虛擬現(xiàn)實(shí);系統(tǒng)仿真;艦載;Vega;MFC;慣性器件
虛擬現(xiàn)實(shí)(Virtual Reality,VR)是在信息科學(xué)的飛速發(fā)展中誕生的,其主要特點(diǎn)是將虛擬現(xiàn)實(shí)技術(shù)和系統(tǒng)仿真技術(shù)完美的結(jié)合在一起。其核心是由一些三維的交互式計(jì)算機(jī)生成的環(huán)境組成。這些環(huán)境可以是真實(shí)的,也可以是想象的世界模型,其目的是通過人工合成的經(jīng)歷表示信息。有了虛擬現(xiàn)實(shí)技術(shù),復(fù)雜或抽象系統(tǒng)的概念形成可以通過將系統(tǒng)的各子部件以某種方式表示成具有確切含義的符號而成為可能,從而有助于人們理解和認(rèn)識(shí)所研究系統(tǒng)的本質(zhì)和動(dòng)態(tài)規(guī)律。
1 虛擬航行仿真系統(tǒng)開發(fā)環(huán)境
隨著虛擬現(xiàn)實(shí)仿真技術(shù)的不斷發(fā)展,虛擬現(xiàn)實(shí)仿真開發(fā)平臺(tái)也得到了飛速的發(fā)展。尤其是Multigen—Paradigm公司的實(shí)時(shí)場景管理和驅(qū)動(dòng)軟件Vega,由于它在實(shí)時(shí)視景仿真、聲音仿真、虛擬現(xiàn)實(shí)及其他可視化領(lǐng)域的廣泛應(yīng)用,成為現(xiàn)在最流行的虛擬環(huán)境開發(fā)仿真平臺(tái)。這里研究的艦載海上仿真系統(tǒng)是基于MFC和Vega開發(fā)環(huán)境基礎(chǔ)上開發(fā)的。
Vega是在SDI Performer軟件的基礎(chǔ)之上發(fā)展起來的,為Performer增加了許多重要特性。它將易用的點(diǎn)擊式圖形界面開發(fā)環(huán)境LynX和高級仿真功能巧妙的結(jié)合起來,使用戶以簡單的操作迅速的創(chuàng)建,編輯和運(yùn)行復(fù)雜的仿真應(yīng)用程序。
Vega是一個(gè)類庫,每個(gè)Vega類都是一個(gè)完整的控制,該控制結(jié)構(gòu)包含用于處理和執(zhí)行特征等各項(xiàng)內(nèi)容,它以C語言的API形式出現(xiàn),為軟件人員提供最大限度的軟件控制的靈活性。
2 基于Windows平臺(tái)上Vega應(yīng)用程序的基本框架
Vega的函數(shù)庫都是基于多線程動(dòng)態(tài)鏈接庫(Mu—tithread DLL)版本的C運(yùn)行時(shí)庫(Run Time Library),直接用Windows API進(jìn)行Vega應(yīng)用程序的開發(fā)是一個(gè)非常繁瑣的過程,很多基礎(chǔ)工作(比如窗口的創(chuàng)建,菜單的創(chuàng)建等)都需要自己動(dòng)手寫,大部分的精力被耗費(fèi)在應(yīng)用程序框架的搭建和應(yīng)用程序界面的設(shè)計(jì)上,所以利用可視化的應(yīng)用程序開發(fā)工具(Microsoft VisuaI C++6.0)編寫基于MFC的Vega應(yīng)用程序是非常有必要的。Vega應(yīng)用程序編程接口自帶了必須的頭文件和鏈接庫,故首先配置Microsoft Vistlal C++6.O的環(huán)境。步驟如下:
(1)添加相關(guān)路徑,打開Microsoft Visual C++6.0界面,單擊“Tools”菜單條下的“Options”選項(xiàng),單擊“Directories”將Vega安裝目錄下的“Inelude”目錄添加進(jìn)來,單擊“Show directories for”下拉選項(xiàng),選擇“Library files”項(xiàng)把Vega安裝目錄下的“Include”目錄添加進(jìn)來。
(2)更改編譯選項(xiàng),單擊“Project”菜單下的“Set—tings…”選項(xiàng),將“PrOject Options”中的“MLd”,改為“MD”。
2.1 Vega應(yīng)用程序的基本框架和實(shí)現(xiàn)
典型Vega應(yīng)用程序的框架如圖1所示。
由
vgSyncFrame()和vgFrame()函數(shù)一起決定了Ve—ga進(jìn)程能夠與設(shè)定的幀頻率保持同步,從而能夠保證渲染出流暢的動(dòng)態(tài)視景仿真畫面,再加上相應(yīng)的控制代碼就可以完成各樣的仿真要求。
2.2 基于MFC的Vega的應(yīng)用程序開發(fā)
首先利用Microsoft Visual C++6.O的應(yīng)用程序向?qū)梢粋€(gè)單文檔界面(SDI)應(yīng)用程序框架,然后編輯和修改相應(yīng)的代碼,實(shí)現(xiàn)在視圖框架中顯示Vega的渲染窗口,再添加菜單、工具欄、對話框?qū)ega窗口的渲染過程進(jìn)行實(shí)時(shí)的交互式控制。在采用Cview類和其派生類CVegaView來實(shí)現(xiàn)的,并在派生類CVega—View中加入相應(yīng)的啟動(dòng)代碼。如圖2所示。
在定義CVegaView類定義的時(shí)候應(yīng)該加入如下成員函數(shù)。
定義一個(gè)全局函數(shù)UINT runvegaproc(LPVOIDpParam)以此作為啟動(dòng)Vega線程的入口,在此函數(shù)中加入線程的系統(tǒng)的初始化,系統(tǒng)定義,系統(tǒng)配置和vega線程的主循環(huán)和調(diào)用仿真模型的代碼等。
3 基于Vega海洋模塊模塊的程序設(shè)計(jì)
Vega海洋模塊提供API標(biāo)準(zhǔn)程序使得主程序能夠確認(rèn)海浪高度,這樣當(dāng)與用戶所提供的動(dòng)態(tài)模型結(jié)合后,可使得相應(yīng)的動(dòng)態(tài)模型隨著海浪的波動(dòng)而波動(dòng)。在編寫以海洋模塊為基礎(chǔ)的應(yīng)用程序時(shí),需要在Mi—crosoft Visual C++6.O環(huán)境中包含其模塊中的“vgma—rine.h”頭文件并鏈接模塊中相應(yīng)的庫文件到用戶的主程序中。當(dāng)在Vega仿真程序中調(diào)用Vega海洋模塊時(shí),需要調(diào)用vgInitMarine()和vgInitFx()對Vega海洋各模塊進(jìn)行初始化,當(dāng)調(diào)用vgConfigSys()時(shí),配置海洋模塊。
4 慣性導(dǎo)航系統(tǒng)數(shù)學(xué)模型的研究
由于條件有限,這里沒有實(shí)際數(shù)據(jù),一種辦法是模擬艦船的航跡,然后計(jì)算加速度計(jì)和陀螺的輸出,作為仿真的輸入,仿真結(jié)果與實(shí)際航跡比較,得到誤差曲線,慣導(dǎo)仿真框圖如圖3所示。
4.1 慣導(dǎo)仿真框圖
在真實(shí)的捷聯(lián)慣導(dǎo)系統(tǒng)中,ωbib和fb分別是由陀螺儀和加速度計(jì)提供的。由于條件的限制,在對捷聯(lián)慣導(dǎo)系統(tǒng)進(jìn)行仿真時(shí),首先建立陀螺儀仿真和加速度計(jì)的仿真器。
4.2 陀螺儀仿真器數(shù)學(xué)模型
(1)陀螺儀模型需要的輸入量。東向速度γtx、北向速度γty、當(dāng)?shù)鼐暥圈?、?dāng)?shù)馗叨萮;航向角ψ、俯仰角θ、橫滾角γ、x軸向角速率ωbtbx、y軸向角速率ωbtby,z軸向角速率ωbtbz。
(2)陀螺儀模型的理想輸出量。理想角速率陀螺儀測量的是艦體坐標(biāo)系(b系)相對于慣性坐標(biāo)系(i系)的轉(zhuǎn)動(dòng)角速率在艦體坐標(biāo)系中的投影ωbib。從軌跡數(shù)據(jù)中,可以得到艦體坐標(biāo)系相對于地理坐標(biāo)系(t系)的轉(zhuǎn)動(dòng)角速率在艦體坐標(biāo)系中的投影ωbtb。通過軌跡數(shù)據(jù)中的水平速度、緯度、高度可以計(jì)算出地理坐標(biāo)系相對于慣性坐標(biāo)系的轉(zhuǎn)動(dòng)角速率在地理坐標(biāo)系中投影ωtit:通過姿態(tài)角可以算出地理坐標(biāo)系到艦體坐標(biāo)系之間的轉(zhuǎn)換矩陣cbt;ωtit乘轉(zhuǎn)換矩陣cbt即可得到式ωbit,然后,將ωbit與ωbtb相加,就可以得到陀螺儀模型的理想輸出ωbib。
(3)陀螺儀仿真器的數(shù)學(xué)模型。陀螺儀是敏感載體角運(yùn)動(dòng)的元件,由于陀螺儀本身存在誤差,因此陀螺儀的輸出為:
式中,εb為陀螺儀元件的誤差。
4.3 加速度計(jì)仿真器數(shù)學(xué)模型
(1)加速度計(jì)模型的輸入量。加速度計(jì)模型所需的輸入量也是取自海浪軌跡數(shù)據(jù),具體為:東向速度vtx、北向速度vty、垂直速度vtz、東向加速度αtx、北向加速度αty、垂直加速度αty、航向角ψ、俯仰角θ、橫滾角γ,當(dāng)?shù)鼐暥圈?,?dāng)?shù)馗叨萮。
(2)加速度計(jì)模型的理想輸出量。加速度計(jì)感測的量是比力??梢杂孟旅娴氖阶觼斫忉尲铀俣扔?jì)所感測的比力與載體相對地球加速度之間的關(guān)系:
式中,為相對于地球速度在測量坐標(biāo)系中的變化率;ωepv載體相對于地球轉(zhuǎn)動(dòng)所引起的向心加速度;2ωiev載體相對于地球速度與地球自轉(zhuǎn)角速度的相互影響而形成的哥氏加速度;g為地球重力加速度。式中,中的v可以從海浪軌跡數(shù)據(jù)中獲得。ωep,ωie以通過海浪軌跡數(shù)據(jù)的水平中速度、緯度、高度算出,由上式可算出是地理坐標(biāo)系下的比力ft。通過姿態(tài)角可以算出從地理坐標(biāo)系到艦體坐標(biāo)系之間的轉(zhuǎn)換矩陣cbt,ft乘上轉(zhuǎn)換矩陣得到艦體坐標(biāo)系下的比力ft,ft就捷聯(lián)慣導(dǎo)系統(tǒng)中加速度計(jì)模型的理想輸出。
(3)加速度計(jì)仿真器的模型。加速度計(jì)是敏感載體線運(yùn)動(dòng)的元件。由于加速度計(jì)本身存在誤差,因此加速度計(jì)的輸出為:
式中,fb為加速度計(jì)實(shí)際測得的比力為加速度計(jì)的誤差。
5 坐標(biāo)轉(zhuǎn)換系統(tǒng)
在三維視景仿真中,坐標(biāo)系是建立算法和三維顯示的基礎(chǔ),因此,需要首先將不同設(shè)備的坐標(biāo)轉(zhuǎn)換成一致的坐標(biāo)系。在仿真中,主要涉及到兩種坐標(biāo)系,一是空間大地直角坐標(biāo);二是WGS84坐標(biāo)(地心坐標(biāo))。
6 艦載海上仿真系統(tǒng)開發(fā)
船艦的實(shí)時(shí)位置信息由地理緯度、經(jīng)度和海拔高度來確定,采用的是WGS84坐標(biāo)(地心坐標(biāo))。在建立船艦仿真模型時(shí),需要空間大地直角坐標(biāo)。因此,在進(jìn)行計(jì)算前,需要進(jìn)行必要的坐標(biāo)轉(zhuǎn)換,由地心坐標(biāo)轉(zhuǎn)換為空間大地直角坐標(biāo)。
圖4是作者開發(fā)的艦載捷聯(lián)慣導(dǎo)仿真系統(tǒng)的主界面,該系統(tǒng)主要模擬艦載海上慣導(dǎo)仿真,同時(shí)將陀螺和加速度器的仿真模型,慣性導(dǎo)航算法和虛擬現(xiàn)實(shí)模型有機(jī)結(jié)合。
由于主循環(huán)每循環(huán)1次虛擬場景就刷新1幀,因此在Vega主循環(huán)每循環(huán)1次時(shí),首先讀取位置信息,完成坐標(biāo)轉(zhuǎn)換;然后完成1次陀螺和加速度數(shù)學(xué)模型的計(jì)算,通過導(dǎo)航算法的處理,得到緯度、經(jīng)度、高度和姿態(tài)信息;最后在通過坐標(biāo)轉(zhuǎn)換到平面坐標(biāo)系,控制艦船的姿態(tài)和運(yùn)行。
該系統(tǒng)是基于MFc開發(fā)的,所以大大降低了編碼所用的時(shí)間,加速了開發(fā)效率。由于很好地將Ve—ga的功能嵌入到單文檔應(yīng)用程序框架中,充分發(fā)揮了Vega的強(qiáng)大的視景驅(qū)動(dòng)能力。
7 結(jié) 語
給出Microsoft Visual C++6.0和Vega的虛擬現(xiàn)實(shí)系統(tǒng);開發(fā)了艦載海上航行仿真系統(tǒng)。該系統(tǒng)使設(shè)計(jì)人員可以直觀地觀察航行過程和姿態(tài),對于分析陀螺和加速度計(jì)模型的設(shè)計(jì)是否合理,尤其在導(dǎo)航系統(tǒng)算法開發(fā)的初步階段具有非常有用的價(jià)值。同時(shí)對基于Microsoft Visual C++6.O和Vega的虛擬現(xiàn)實(shí)開發(fā)者也有很好的借鑒作用。