基于MFC和Vega的导航仿真系统

时间:2022-03-03 03:42:29

基于MFC和Vega的导航仿真系统

摘 要:为了加快舰载海上航行的惯性导航仿真,论述一种基于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 惯导仿真框图

在真实的捷联惯导系统中,ωbib和fb分别是由陀螺仪和加速度计提供的[7]。由于条件的限制,在对捷联惯导系统进行仿真时,首先建立陀螺仪仿真和加速度计的仿真器[8]。

4.2 陀螺仪仿真器数学模型

(1) 陀螺仪模型[9]需要的输入量。东向速度γtx、北向速度γty、当地纬度φ、当地高度h;航向角ψ、俯仰角θ、横滚角γ、x轴向角速率ωbtbx、y轴向角速率ωbtby,z轴向角速率ωbtbz。

(2) 陀螺仪模型的理想输出量。理想角速率陀螺仪测量的是舰体坐标系(b系)相对于惯性坐标系(i系)的转动角速率在舰体坐标系中的投影ωbib。从轨迹数据中,可以得到舰体坐标系相对于地理坐标系(t系)的转动角速率在舰体坐标系中的投影ωbtb。通过轨迹数据中的水平速度、纬度、高度可以计算出地理坐标系相对于惯性坐标系的转动角速率在地理坐标系中投影ωtit:通过姿态角可以算出地理坐标系到舰体坐标系之间的转换矩阵cbt;ωtit乘转换矩阵cbt即可得到式ωbit,然后,将ωbit与ωbtb相加,就可以得到陀螺仪模型的理想输出ωbib。

(3) 陀螺仪仿真器的数学模型。陀螺仪是敏感载体角运动的元件,由于陀螺仪本身存在误差,因此陀螺仪的输出为:

bib=ωbib+εb(1)

式中,εb为陀螺仪元件的误差。

4.3 加速度计仿真器数学模型

(1) 加速度计模型的输入量。加速度计模型所需的输入量也是取自海浪轨迹数据,具体为:东向速度νtx、北向速度νty、垂直速度νtz、东向加速度αtx、北向加速度αty、垂直加速度αty、航向角ψ、俯仰角θ、横滚角γ,当地纬度φ,当地高度h。

(2) 加速度计模型的理想输出量。加速度计感测的量是比力。可以用下面的式子来解释加速度计所感测的比力与载体相对地球加速度之间的关系:

f=dνdtp+ωepν+2ωieν-g(2)

式中,dνdtp为相对于地球速度在测量坐标系中的变化率;ωepν 载体相对于地球转动所引起的向心加速度;2ωieν载体相对于地球速度与地球自转角速度的相互影响而形成的哥氏加速度;g为地球重力加速度。式中,dνdtp中的ν可以从海浪轨迹数据中获得。ωep,ωie以通过海浪轨迹数据的水平中速度、纬度、高度算出,由上式可算出是地理坐标系下的比力ft。通过姿态角可以算出从地理坐标系到舰体坐标系之间的转换矩阵cbt,ft乘上转换矩阵得到舰体坐标系下的比力ft,ft就捷联惯导系统中加速度计模型的理想输出。

(3) 加速度计仿真器的模型。加速度计是敏感载体线运动的元件。由于加速度计本身存在误差,因此加速度计的输出为:

b=fb+ba(3)

式中,b为加速度计实际测得的比力ba为加速度计的误差。

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年出生,副教授。主要研究方向为机器人控制技术、临场感技术、数字信号处理技术。

上一篇:I2C总线接口的设计及验证 下一篇:基于ARM的嵌入式TCP/IP协议的实现