基于FlightGear的虚拟现实应用_第1页
基于FlightGear的虚拟现实应用_第2页
基于FlightGear的虚拟现实应用_第3页
基于FlightGear的虚拟现实应用_第4页
基于FlightGear的虚拟现实应用_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FlightGear的虚拟现实应用展开全文1.FlightGear简介FlightGear[1]飞行模拟器于1997年建立,是一个开放源代码、多平台、合作的飞行模拟发展项目。该项目是由于对收费飞行模拟游戏不满而开发的飞行模拟游戏。遵从GPL许可,因此可以免费获得并且可以自己修改源代码。FlightGear项目的目标是创建一个先进的可用于科研或者学术的环境并且可以开发和验证其他飞行仿真的方案,同时可以作为用户的最终应用程序端的飞行模拟器框架。2.基于FlightGear的虚拟现实显示应用方案2.1.

基于Matlab/Simulink与FlightGear的联合仿真基于Matlab/Simulink与FlightGear的联合仿真是采用Matlab/Simulink构建飞行的动力学仿真模型,并采用FlightGear进行三维虚拟现实显示的仿真方法。现有的基于Matlab/Simulink的仿真程序已经基本构建完成[2],其采用的虚拟现实显示方案是利用VRML。相对于FlightGear来说,采用VRML作为虚拟现实显示端的有点是资源占用少。但其缺点也是显著的:一方面开发难度大。采用Matlab提供的VRML接口其场景比较少同时比较简单,若想更加真实的模拟实际情况就需要大量地建立模型。VRML是一种标记性的语言,本身无法进行建模,必须在三维软件中建模然后转换为VRML格式,这之间就有兼容性的问题。另一方面显示效果不如FlightGear真实和细腻,同时其源代码是开放的,可以通过网络驱动,接口方面Matlab有相应的模块,开发难度主要集中在飞艇模型的建立上。FlightGear本身支持部分3D软件,使得这部分的工作量也不是很大。目前采用Matlab/Simulink与FlightGear联合仿真的工作已经初步完成,建立的某飞行器的动力学仿真系统如图所示。FlightGear的虚拟显示平台与Matlab的仿真平台可以在同一台机器上运行,也可以在局域网不同的机器上分别运行。图1Simulink下的飞艇动力学仿真模型图2动力学仿真模型运行中图3FlightGear用于虚拟现实显示2.2.

FlightGear作为地面监控软件的虚拟显示终端FlightGear可以作为简单的虚拟现实显示终端,在实际飞行过程中使用。一方面,地面监控段需要完整的飞艇姿态和状态数据,仅仅靠飞行仪表和地面监控软件提供的数据无法直观判断飞艇的姿态和位置等信息。此时可以通过FlightGear给观察者直观的感受。另一方面,考虑到实际飞行的情况,在高空飞行的飞艇视距外遥控飞行。同时,在视距内飞行时由于飞艇目标庞大,以及与操纵者距离的关系,可能无法直观看出飞艇的飞行姿态。此时需要地面监控端提供飞艇的飞行姿态和状态数据。这些可以通过FlightGear直观地显示飞艇的飞行状态,从而为操纵者操纵飞艇建立直观的印象。再者,由于FlightGear可以由网络驱动,因此可以同时有若干台机器作为虚拟现实端,同时可以分散放置,以方便具体应用。FlightGear作为地面监控软件的虚拟显示终端,通过局域网与地面监控端主机相连,主机通过数传电台(串口)与艇载计算机相连。上述方案示意图如下:图4FlightGear作为地面监控软件的虚拟显示终端的连接图3.

基于FlightGear的动力学仿真应用方案目前的的仿真其动力学部分是由Matlab或者由银河仿真机完成。其实FlightGear本身也提供了若干动力学仿真的接口。目前支持的动力学仿真系统有YAsim[1],JSBsim[3],UIUC(LaRCsim)[4]等。因此也可以使用FlightGear作为完整的动力学仿真平台进行仿真。.JSBSim是一个通用的6自由度动态模型,模拟飞行工具的运动。它以C++语言写成,可以运行在单机方式下,也可以驱动有视觉子系统的大型程序。飞行器用XML配置文件来建模,质量特性,飞行动力学特性和控制特性都在这个文件中定义。YAsim是FlightGear内嵌的一种动力学仿真模型,是flightgear的集成部分,它通过模拟飞行器不同部分的气流的方法来实现,这点不同于JSBSim。UIUC,这个飞行动态模型是基于LaRCsim,最初是美国国家宇航局写的。通过使用飞行器配置文件来扩充代码。目前JSBsim和UIUC是比较流行的动力学仿真系统,并且均是开源项目。采用FlightGear与上述动力学仿真系统进行联合仿真时可以采用FlightGear进行虚拟现实显示,并驱动动力学仿真系统进行动力学解算,得到姿态和位置等状态参数给飞控计算机(或者驱动转台,转台加载传感器测量姿态参数给飞控计算机),飞控计算机根据状态解算出控制命令返回给FlightGear。因此,FlightGear和上述动力学仿真系统给我们提供了一个完整的动力学仿真平台。4.

FlightGear作为显示终端的接口4.1.

协议FlightGear可以采用UDP协议利用局域网接收数据,并动态地显示所接收到的数据。UDP协议是一个简单的面向数据报的传输层协议,IETFRFC768是UDP的正式规范在TCP/IP模型中,UDP为网络层以下和应用层以上提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。UDP首部字段由4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。图5UDPSegmentstructure4.2.

格式上述协议传输的数据结构定义如下(C描述):classFGNetFDM{public:enum{FG_MAX_ENGINES=4,FG_MAX_WHEELS=3,FG_MAX_TANKS=4};uint32_tversion; //incrementwhendatavalueschangeuint32_tpadding; //padding//Positionsdoublelongitude; //geodetic(radians)doublelatitude; //geodetic(radians)doublealtitude; //abovesealevel(meters)floatagl; //abovegroundlevel(meters)floatphi; //roll(radians)floattheta; //pitch(radians)floatpsi; //yawortrueheading(radians)floatalpha;//angleofattack(radians)floatbeta;//sideslipangle(radians)//Velocitiesfloatphidot; //rollrate(radians/sec)floatthetadot; //pitchrate(radians/sec)floatpsidot; //yawrate(radians/sec)floatvcas; //calibratedairspeedfloatclimb_rate; //feetpersecondfloatv_north;//northvelocityinlocal/bodyframe,fpsfloatv_east;//eastvelocityinlocal/bodyframe,fpsfloatv_down;//down/verticalvelocityinlocal/bodyframe,fpsfloatv_wind_body_north;//northvelocityinlocal/bodyframe//relativetolocalairmass,fpsfloatv_wind_body_east;//eastvelocityinlocal/bodyframe//relativetolocalairmass,fpsfloatv_wind_body_down;//down/verticalvelocityinlocal/body//framerelativetolocalairmass,fps//AccelerationsfloatA_X_pilot; //Xaccelinbodyframeft/sec^2floatA_Y_pilot; //Yaccelinbodyframeft/sec^2floatA_Z_pilot; //Zaccelinbodyframeft/sec^2//Stallfloatstall_warning;//0.0-1.0indicatingtheamountofstallfloatslip_deg; //slipballdeflection//Pressure//Enginestatusuint32_tnum_engines; //Numberofvalidenginesuint32_teng_state[FG_MAX_ENGINES];//Enginestate(off,cranking,running)floatrpm[FG_MAX_ENGINES]; //EngineRPMrev/minfloatfuel_flow[FG_MAX_ENGINES];//Fuelflowgallons/hrfloatfuel_px[FG_MAX_ENGINES];//Fuelpressurepsifloategt[FG_MAX_ENGINES]; //ExhuastgastempdegFfloatcht[FG_MAX_ENGINES]; //CylinderheadtempdegFfloatmp_osi[FG_MAX_ENGINES];//Manifoldpressurefloattit[FG_MAX_ENGINES]; //TurbineInletTemperaturefloatoil_temp[FG_MAX_ENGINES];//OiltempdegFfloatoil_px[FG_MAX_ENGINES];//Oilpressurepsi//Consumablesuint32_tnum_tanks; //Maxnumberoffueltanksfloatfuel_quantity[FG_MAX_TANKS];//Gearstatusuint32_tnum_wheels;uint32_twow[FG_MAX_WHEELS];floatgear_pos[FG_MAX_WHEELS];floatgear_steer[FG_MAX_WHEELS];floatgear_compression[FG_MAX_WHEELS];//Environmentuint32_tcur_time;//currentunixtime//FIXME:makethisuint64_tbefore2038int32_twarp;//offsetinsecondstounixtimefloatvisibility;//visibilityinmeters(forenv.effects)//Controlsurfacepositions(normalizedvalues)floatelevator;floatelevator_trim_tab;floatleft_flap;floatright_flap;floatleft_aileron;floatright_aileron;floatrudder;floatnose_wheel;floatspeedbrake;floatspoilers;};5.

附录FlightGear可以通过局域网获取UDP包进行显示,同时也可以对飞行器加以控制。虚拟显示UDP包数据结构定义的源文件:<flightgearsourcefile>/src/Network/net_fdm.hxx控制时的UDP包数据结构定义源文件:<flightgearsourcefile>/src/Network/net_ctrls

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论