懷紅旗 王愛民
摘 要:為了加快艦載海上航行的慣性導航仿真,論述一種基于MFC和Vega開發環境開發虛擬現實仿真系統的方法,并且詳細闡述開發過程,用于開發艦載海上航行仿真系統,通過對陀螺儀和加速度數學模型的建立,完成了慣性器件仿真和艦載航行仿真系統的研究。結果表明該系統能使設計人員很直觀地觀察艦載的航行,航行姿態,同時,采用面向對象的設計方法,遵循軟件的開發規范,驗證了平臺的可行性和有效性,有利于艦載慣性導航仿真的設計,同時對虛擬現實的開發也有很好的借鑒作用。
關鍵詞:虛擬現實;系統仿真;艦載;Vega;MFC;慣性器件
中圖分類號:TN965文獻標識碼:B
文章編號:1004 373X(2009)02 167 04
Navigation Simulation System Based on MFC and Vega
HUAI Hongqi,WANG Aimin
(The School of Instrument Science and Engineering,Southeast University,Nanjing,210096,China)
Abstract:To speed up the inertial navigation simulation of shipborne marine navigation,a method of virtual reality simulation system based on MFC and Vega,and its development process are studied,it is applied to develop shipborne marine navigation.The research on inertial device simulation and shipborne navigation simulation are completed by building gyroscope and accelerated math model.The results show that the navigation of shipborne can be observed by designers,using object-oriented method,the feasibility and effectiveness of platform is verificated.It is useful for developing virtual reality.
Keywords:virtual reality;system simulation;shipborne;Vega;MFC;inertial device
虛擬現實(Virtual Reality,VR)是在信息科學的飛速發展中誕生的,其主要特點是將虛擬現實技術和系統仿真技術完美的結合在一起。其核心是由一些三維的交互式計算機生成的環境組成。這些環境可以是真實的,也可以是想象的世界模型,其目的是通過人工合成的經歷表示信息。有了虛擬現實技術,復雜或抽象系統的概念形成可以通過將系統的各子部件以某種方式表示成具有確切含義的符號而成為可能,從而有助于人們理解和認識所研究系統的本質和動態規律。
1 虛擬航行仿真系統開發環境
隨著虛擬現實仿真技術的不斷發展,虛擬現實仿真開發平臺也得到了飛速的發展。尤其是Multigen-Paradigm公司的實時場景管理和驅動軟件Vega,由于它在實時視景仿真、聲音仿真、虛擬現實及其他可視化領域的廣泛應用,成為現在最流行的虛擬環境開發仿真平臺[1]。這里研究的艦載海上仿真系統是基于MFC和Vega開發環境基礎上開發的。
Vega是在SDI Performer 軟件的基礎之上發展起來的,為Performer 增加了許多重要特性。它將易用的點擊式圖形界面開發環境LynX和高級仿真功能巧妙的結合起來,使用戶以簡單的操作迅速的創建,編輯和運行復雜的仿真應用程序。
Vega是一個類庫,每個Vega類都是一個完整的控制,該控制結構包含用于處理和執行特征等各項內容,它以C語言的API形式出現,為軟件人員提供最大限度的軟件控制的靈活性[2]。
2 基于Windows 平臺上Vega應用程序的基本框架
Vega的函數庫都是基于多線程動態鏈接庫(Mutithread DLL)版本的C運行時庫(Run Time Library ),直接用Windows API進行Vega應用程序的開發是一個非常繁瑣的過程,很多基礎工作(比如窗口的創建,菜單的創建等)都需要自己動手寫,大部分的精力被耗費在應用程序框架的搭建和應用程序界面的設計上,所以利用可視化的應用程序開發工具(Microsoft Visual C++6.0)編寫基于MFC的Vega應用程序是非常有必要的。Vega應用程序編程接口自帶了必須的頭文件和鏈接庫,故首先配置Microsoft Visual C++6.0的環境[3]。步驟如下:
(1) 添加相關路徑,打開Microsoft Visual C++6.0 界面,單擊“Tools”菜單條下的“Options”選項,單擊“Directories”將Vega安裝目錄下的“Include”目錄添加進來,單擊“Show directories for ”下拉選項,選擇“Library files”項把Vega安裝目錄下的“Include”目錄添加進來。
(2) 更改編譯選項,單擊“Project”菜單下的“Settings…”選項,將“Project Options”中的“MLd”,改為“MD”。
2.1 Vega應用程序的基本框架和實現
典型Vega應用程序的框架如圖1所示[3]。
圖1 Vega應用程序框架圖
由圖1可以看出,Vega應用程序可以分成2個主要的階段,首先是Vega系統的靜態描述階段,然后進入Vega系統的動態循環。第一個階段主要為Vega系統的正確運行進行必要的系統配置,包括內存分配,參數設置,Vega類的定義等。而Vega仿真應用程序主要是在Vega動態循環中實現的,故每一個Vega應用程序都包含如下的函數語句:
void main( int argc,char *argv[] )
{
// init,define,and config the system //
vgInitSys();// initialize Vega//
vgDefineSys( argv[1] );//read in the ADF//
vgConfigSys();//configure Vega//
while(1){
vgSyncFrame ();
vgFrame();
// the simulation code//
}
}
vgSyncFrame()和vgFrame()函數一起決定了Vega進程能夠與設定的幀頻率保持同步,從而能夠保證渲染出流暢的動態視景仿真畫面,再加上相應的控制代碼就可以完成各樣的仿真要求[4]。
2.2 基于MFC的Vega的應用程序開發
首先利用Microsoft Visual C++6.0的應用程序向導生成一個單文檔界面(SDI)應用程序框架[5],然后編輯和修改相應的代碼,實現在視圖框架中顯示Vega的渲染窗口,再添加菜單、工具欄、對話框對Vega窗口的渲染過程進行實時的交互式控制。在采用Cview類和其派生類CVegaView來實現的,并在派生類CVegaView中加入相應的啟動代碼[6]。如圖2所示。
圖2 單文檔應用程序框架基本關系
在定義CVegaView類定義的時候應該加入如下成員函數。
void ownship_update( void );
void Platform2Xyz(const double *pxyz,double *BLH,double *xyz);
void convert2platform(const double *xyz,double *BLH,double *p_xyz);
void BLH2XYZ(const double *earth,double *xyz);
void XYZ2BLH(const double *xyz,double *earth);
void GD(float a[18],float b[12]);//the InertialNavigation function
void WibbASFB(float a[9],float b[7]);//the model of gyro and accelerometer function
void Initial(float a[3],float b[13]);//INS initial function
定義一個全局函數UINT runvegaProc(LPVOID pParam)以此作為啟動Vega線程的入口,在此函數中加入線程的系統的初始化,系統定義,系統配置和vega線程的主循環和調用仿真模型的代碼等。
3 基于Vega海洋模塊模塊的程序設計
Vega海洋模塊提供API標準程序使得主程序能夠確認海浪高度,這樣當與用戶所提供的動態模型結合后,可使得相應的動態模型隨著海浪的波動而波動。在編寫以海洋模塊為基礎的應用程序時,需要在Microsoft Visual C++6.0環境中包含其模塊中的“vgmarine.h”頭文件并鏈接模塊中相應的庫文件到用戶的主程序中。當在Vega仿真程序中調用Vega海洋模塊時,需要調用vgInitMarine()和vgInitFx()對Vega海洋各模塊進行初始化,當調用vgConfigSys()時,配置海洋模塊[2]。
4 慣性導航系統數學模型的研究
由于條件有限,這里沒有實際數據,一種辦法是模擬艦船的航跡,然后計算加速度計和陀螺的輸出,作為仿真的輸入,仿真結果與實際航跡比較,得到誤差曲線,慣導仿真框圖如圖3所示。
圖3 慣導仿真框圖
4.1 慣導仿真框圖
在真實的捷聯慣導系統中,ωb璱b和fb分別是由陀螺儀和加速度計提供的[7]。由于條件的限制,在對捷聯慣導系統進行仿真時,首先建立陀螺儀仿真和加速度計的仿真器[8]。
4.2 陀螺儀仿真器數學模型
(1) 陀螺儀模型[9]需要的輸入量。東向速度γt瓁、北向速度γt瓂、當地緯度φ、當地高度h;航向角ψ、俯仰角θ、橫滾角γ、x軸向角速率ωb璽bx、y軸向角速率ωb璽by,z軸向角速率ωb璽bz。
(2) 陀螺儀模型的理想輸出量。理想角速率陀螺儀測量的是艦體坐標系(b系)相對于慣性坐標系(i系)的轉動角速率在艦體坐標系中的投影ωb璱b。從軌跡數據中,可以得到艦體坐標系相對于地理坐標系(t系)的轉動角速率在艦體坐標系中的投影ωb璽b。通過軌跡數據中的水平速度、緯度、高度可以計算出地理坐標系相對于慣性坐標系的轉動角速率在地理坐標系中投影ωt璱t:通過姿態角可以算出地理坐標系到艦體坐標系之間的轉換矩陣cb璽;ωt璱t乘轉換矩陣cb璽即可得到式ωb璱t,然后,將ωb璱t與ωb璽b相加,就可以得到陀螺儀模型的理想輸出ωb璱b。
(3) 陀螺儀仿真器的數學模型。陀螺儀是敏感載體角運動的元件,由于陀螺儀本身存在誤差,因此陀螺儀的輸出為:
b璱b=ωb璱b+εb(1)
式中,εb為陀螺儀元件的誤差。
4.3 加速度計仿真器數學模型
(1) 加速度計模型的輸入量。加速度計模型所需的輸入量也是取自海浪軌跡數據,具體為:東向速度νt瓁、北向速度νt瓂、垂直速度νt瓃、東向加速度αt瓁、北向加速度αt瓂、垂直加速度αt瓂、航向角ψ、俯仰角θ、橫滾角γ,當地緯度φ,當地高度h。
(2) 加速度計模型的理想輸出量。加速度計感測的量是比力??梢杂孟旅娴氖阶觼斫忉尲铀俣扔嬎袦y的比力與載體相對地球加速度之間的關系:
f=dνdt璸+ω璭pν+2ω璱eν-g(2)
式中,dνdt璸為相對于地球速度在測量坐標系中的變化率;ω璭pν 載體相對于地球轉動所引起的向心加速度;2ω璱eν載體相對于地球速度與地球自轉角速度的相互影響而形成的哥氏加速度;g為地球重力加速度。式中,dνdt璸中的ν可以從海浪軌跡數據中獲得。ω璭p,ω璱e以通過海浪軌跡數據的水平中速度、緯度、高度算出,由上式可算出是地理坐標系下的比力ft。通過姿態角可以算出從地理坐標系到艦體坐標系之間的轉換矩陣cb璽,ft乘上轉換矩陣得到艦體坐標系下的比力ft,ft就捷聯慣導系統中加速度計模型的理想輸出。
(3) 加速度計仿真器的模型。加速度計是敏感載體線運動的元件。由于加速度計本身存在誤差,因此加速度計的輸出為:
b=fb+齜璦(3)
式中,b為加速度計實際測得的比力齜璦為加速度計的誤差。
5 坐標轉換系統
在三維視景仿真中,坐標系是建立算法和三維顯示的基礎,因此,需要首先將不同設備的坐標轉換成一致的坐標系。在仿真中,主要涉及到兩種坐標系,一是空間大地直角坐標;二是WGS84坐標(地心坐標)。
6 艦載海上仿真系統開發
船艦的實時位置信息由地理緯度、經度和海拔高度來確定,采用的是WGS84坐標(地心坐標)。在建立船艦仿真模型時,需要空間大地直角坐標。因此,在進行計算前,需要進行必要的坐標轉換,由地心坐標轉換為空間大地直角坐標[10]。
圖4是作者開發的艦載捷聯慣導仿真系統的主界面,該系統主要模擬艦載海上慣導仿真,同時將陀螺和加速度器的仿真模型,慣性導航算法和虛擬現實模型有機結合。
由于主循環每循環1次虛擬場景就刷新1幀,因此在Vega主循環每循環1次時,首先讀取位置信息,完成坐標轉換;然后完成1次陀螺和加速度數學模型的計算,通過導航算法的處理,得到緯度、經度、高度和姿態信息;最后在通過坐標轉換到平面坐標系,控制艦船的姿態和運行[7]。
圖4 仿真系統的主界面
該系統是基于MFC開發的,所以大大降低了編碼所用的時間,加速了開發效率。由于很好地將Vega的功能嵌入到單文檔應用程序框架中,充分發揮了Vega的強大的視景驅動能力[11]。
7 結 語
給出Microsoft Visual C++6.0和Vega的虛擬現實系統;開發了艦載海上航行仿真系統。該系統使設計人員可以直觀地觀察航行過程和姿態,對于分析陀螺和加速度計模型的設計是否合理,尤其在導航系統算法開發的初步階段具有非常有用的價值。同時對基于Microsoft Visual C++6.0和Vega的虛擬現實開發者也有很好的借鑒作用。
參考文獻
[1]MultiGen-Paradigm Inc.Creating Terrain for Simulations.Version 2.6.
[2]MultiGen-Paradigm Inc.The Multigen Creator Desktop Tutor.Version 2.6.U.S.A.
[3]王乘,李麗軍,周均清,等.Vega實時三維視景仿真技術[M].武漢:華中科技大學出版社,2005.
[4]MultiGen-Paradigm Inc.Multigen Creator User′s Guide.Version 2.6.
[5]候俊杰.深入淺出MFC[M].2版.武漢:華中科技大學出版社,2001.
[6]唐勝景,汪群山,王憲宗,等.基于Visual C++ 和Vega的導彈虛擬飛行仿真系統[J].北京理工大學學報,2007(5):413-416.
[7]以光衢.慣性導航原理[M].北京:航空工業出版社,1987.
[8]趙玉霞.捷聯慣導系統仿真算法的研究及其實現[D].大連:大連理工大學,2005.
[9]董秋泉,肖尚彬,蔡泰信.陀螺系統[M].西安:西北工業大學出版社,1985.
[10]任亮,龍建忠,李華.三維航跡的仿真數學模型及其在Vega環境中的實現[J].計算機仿真,2006(3):59-60.
[11] David Kruglinski.Visual C++技術內幕[M].潘愛民,王國印,譯.北京:清華大學出版社,1999.
作者簡介
懷紅旗 男,1981年出生,碩士研究生。主要研究方向為虛擬現實仿真。
王愛民 男,1968年出生,副教授。主要研究方向為機器人控制技術、臨場感技術、數字信號處理技術。