flightgear
FlightGear软件的IO系统
1. FGFS 的IO系统∙FGFS是一个做研究的非常优秀的系统,飞行,气动,控制等,做这些免不了要和FG进行数据交换,本文主要说说FG的IO系统,包括FG的IO架构,支持的IO协议,及与FG的通信。
1.1. FG的IO系统架构∙FG支持许多IO协议,这些协议均由一个simgear的SGSubsystem模块形式实现的FGIO子系统来进行管理。
这些协议在功能和作为可能有相同的以可能不同,并且这些模块可以同时启动。
在一个FG运行实例中可以同时使用多种协议与其进行通信。
FG支持的协议有generic,garmin,joyclient,jsclient,native-ctrls,native-fdm,native-gui,native,nmea等等,详细的列表参见fgfs的手册。
1.2. IO架构∙每个协议模块都是一个FGProtocal的子类,实现了相应的操作接口。
主程序先根据命令行的参数确定要启用哪些IO协议,然后创建对应的io协议的实例,并以指定的参数初始化。
主程序起动后,使用Options对像来处理命令行参数,所有支持的参数在options.cxx:struct OptionDesc结构中定义,该结构还定义的参数的类型,类型是OPTION_CHANNEL的都是IO子系统的。
通过在Options::init() ->parseOption()->addOption()将参数以参数名、参数值创建一个OptionValue对像实例,保存到一个vector中。
然后主程序调用Options::processOptions() -> Optons:ptionsPrivate::processOption()来处理每个参数。
如果参数类型为OPTION_CHANNEL,就将其添加到全局的FGGlobals::channel_options_list中,至此参数处理完成。
主程序在fg_init.cxx:fgInitSubssytems()中加载各个子系统,其中就包括FGIO子系统,最后调用globals.get_subsystem_mgr().init()初始化所有注册的子系统,对于IO子系统来说,前面已经将从参数指定的要启动的IO协议保存到了列表中,在FGIO::init()中遍历已经从命令行分析到的要使用的IO协议的信息,根据参数指定的协议创建相应的IO协议的实例,见FGIO::parse_port_config()函数. 每种协议参数配置不尽相同,后面在说.∙FGProtocal主类定义一操作框架的接口,及几个主要的属性,hz: 数据更新/发送的频率;dir:数据的方向,指定FG是发送还是接收都, in 表示接收,out表示是发送;io:数据收发通道,根据协议不同,通道可以是串口,socket, 文件等,这些属性在FGIO::parse_port_config()的后半部分中设置的。
基于Flightgear实现通用飞行仿真软件
1 概 述 通用 飞行 仿真 软件 包括 Presagis公 司 的 Flightsim 和 He—
lisim,Flightlab等 ,这 些软件都可 以实现飞机或直升机 的飞行 仿 真。但是 它们 的可扩展性 和可定制 性 比较 差 ,并 且采购 价 格 昂贵 。
Flightgrear是一些模 拟飞行和编程爱 好者开发 的一 款免费 和 自由的模 拟飞行 软件 。它 的源代码 对于任 何人都 是公开 和 可修改 的,且具有 良好 的开放性 、可扩展性和跨平 台应 用。
基 于 Flightgrear开 发平 台来 实现 通用 飞行 仿 真 软 件 ,可 以 充 分利用其 现有 功能 ,在较 高的起 点上进 行二次 开发 。由于 Flightgrear平 台一直不断地在完善升级 ,使得通用 飞行仿真软 件也可 以进行相应 的升级完善 。
由 于 Flightgrear设 计 时就 考 虑 了 它 的 通用 性 .很 多 重 要 功 能 模块 都可 以通过 XML进行 配置 。不 同飞机通 过 XML文件 配 置气 动参数 、环境 因素 、仪表面板等 。另外 ,Flightgrear提 供 了丰 富的接 口通信关 系 .使得 它很容 易与外部 的其 他系统 进行 交互。
控制 台软件 主要 实现仿真 的控 制 、环境 的设置 和飞机参 数 的配置等功 能 。另外控 制台软件 还实现语 音通信 服务器模 块 和多机联 网服务器模块 ,通过这 些服 务器模块 可 以实现 多 机之 间的信息交互和语 音通话。
收 稿 日期 :2015—12—24
… . . 一 I啊柏 EPROCESSING&啊删【T哪 EDIAT^CHNOLOGY…………n… ……… ………………… … .…… ………
基于FlightGear的客机飞行模拟软件设计
航空航天科学技术科技创新导报 Science and Technology Innovation Herald10DOI:10.16660/ki.1674-098X.2018.15.010基于FlightGear的客机飞行模拟软件设计①侯学智(北京首都国际机场北京飞机维修工程有限公司 北京 100621)摘 要:基于FlightGear的飞行仿真模型,设计了适用于客机飞行模拟器的软件。
软件核心为采用FlightGear实现的飞行仿真软件,同时为用户开发了丰富的图形化接口软件:导航台编辑软件、航路编辑软件及动力学编辑软件。
基于以上设计,用户可开展对客机驾驶舱仪表、导航台数据库、航路及动力学的设计。
该飞行模拟器软件开放性及图化性程度高,能够满足教学、科研及实验需求。
关键词:飞行模拟 飞行仿真 导航台 航路中图分类号:TP391.9 文献标识码:A 文章编号:1674-098X(2018)05(c)-0010-02①作者简介:侯学智(1980—),男,汉族,山西人,硕士,中级工程师,主要从事科技项目管理。
近年来,一方面是中国民航进入持续成长期,运量持续增长,运营飞机大量投入;另一方面是狭窄的空域、有限的民航航线时刻资源,使得机场拥挤和堵塞现象更加突出,民航飞行正越来越多地受到空管系统的影响。
因此,客机飞行模拟不仅要模拟客机本身的飞行特性,更要能提供对导航台和航路的编辑接口。
本文提出的客机飞行模拟软件对以上功能均进行了详细的阐述。
1 系统总体设计客机飞行模拟器软件主要由飞行仿真软件、导航台编辑软件、航路编辑软件及动力学编辑软件组成。
其中,飞行仿真软件是飞行模拟软件的核心,用于仿真飞行逻辑,显示飞机驾驶舱仪表等,导航台编辑软件、航路编辑软件及动力学编辑软件用于对导航台、航路及动力学系数等飞行参数进行编辑。
2 分系统设计2.1 飞行仿真软件飞行仿真软件采用FlightGear实现。
它可以提供完整的飞机仿真框架,允许用户添加自己的各种模拟功能和模型。
FlightGear帮助手册第一部分
•小手册 /Docs/InstallGuide/FGShortRef.html, •其他文档 /FlightGear/Docs. • flightgear 维基百科 , 最后:
一般大家都不太喜欢阅读这些帮助手册,如果您确信您的显卡支持 OpenGL 以及操作系统是以下中的一个
The FlightGear Manual version 1.9.0 December 20, 2008
For FlightGear version 1.9.0
序言
FlightGear 是由网络上一些模拟飞行和编程爱好者开发的一款免费和自由
的模拟飞行软件。这本使用手册编写的目的是指导初学者如何使用 FlightGear。
� 所有商业模拟飞行软件都有一个严重的缺点:商业软件都是由一小 队开发人员根据自己定义软件的功能和需求进行开发的,所以只能 提供有限的接口给用户。开发团队也一般不会采用用户提出的软件 改进意见。相反,FlightGear 是一款开源的软件,源代码对于任何人 都是公开和可修改的。
� 商业模拟飞行软件只能在软件功能和特点方面进行折中。商业公司 都希望为用户能提供一个宽广的平台,包括飞行员,开发人员,和 普通游戏用户。在现实中,结果往往由于期限或者资金问题无法做 到。但 FlightGear 是免费和开放的,它没有出版商限定日期,开发周 期也是有我们自己把握的。FlightGear 不是一个科学研究项目,也不 需要考虑软件的市场化需求。
FlightGear 使用手册
作者:Michael Basler, Martin Spott, Stuart Buchanan, Jon Berndt,
Bernhard Buckel, Cameron Moore, Curt Olson, Dave Perry,
FlightGear基本飞行操作快捷键
FlightGear基本飞行操作快捷键
表1 常用操作
按键
说明
操纵面(在数字键盘上,控制航向、滚转和俯仰等,必须激活数字锁定)
9/3
推力:9增加推力(油门),3减小推力(油门)
4/6
副翼:4向左滚转,6向右滚转
8/2
升降舵:8推杆低头,2拉杆抬头
0/Enter
方向舵:0向右偏航,Enter向右偏航
NAV 开关
Ctril + T
地形跟随开关
Ctril + U
高度增加 1000 英尺(紧急情况)
Enter
增加航向自动驾驶
F6
开关目标自动驾驶:当前航向/航路点
F11
高度自动驾驶对话框
F12
航向自动驾驶对话框
s
启动发动机
!
选择第一台发动机
@
选择第二台发动机
#
选择第三台发动机
$
选择第四台发动机
}
增加点火电源
{
消减点火电源
~
选择所有发动机
襟翼、起落架与刹车
]/[
放/收襟翼
g/G
收/放起落架
B
刹车锁死开关
b
刹车(全部轮胎)
,
左轮胎刹车
.
右轮胎刹车
Cessna 172P仪表介绍:
常用的仪表有空速表、地平仪、高度表、罗盘(指南针)、航向陀螺仪和协调转弯指示仪。如下图所示
5
居中副翼/升降舵/方向舵
观察方位(在数字键盘上,必须关闭数字锁定)
Shift + 8
无人机全数字仿真的Flightgear三维显示
无人机全数字仿真的Flightgear三维显示作者:钱伟来源:《无人机》2018年第12期本文介绍了无人机三维显示需求,介绍了Flightgear软件的功能和使用特点,建立了无人机数字仿真模型,并基于仿真模型和Flightgear软件,采用udp网络通讯协议建立了二者之间的连接,将无人机仿真数据实时传输到Flightgear软件,驱动Flightgear中无人机模型、场景模型等的实时运行,完成无人机的三维实时显示工作。
无人机在试飞之前需要对各个系统部件进行大量的测试和仿真,以检测系统的控制部分的极性、逻辑、量值等等,但是有时实验室测试并不直观,容易使人忽略重要的细节。
例如,某型无人机在地面测试时一切正常,但在起飞后全自主飞行过程中,发生了一加自主飞行功能就向北飞的现象。
发生这一现象的原因是程序员在设计航路时,将无人机所用磁航向传感器的单位弄错,弧度当成了角度。
最终虽然依靠人工手动将其控制返航,依然表明了传统的测试存在盲区。
如果能加入仿真的实时显示功能,将无人机沿着航路模拟飞行的经纬度高度、速度、姿态角、实时舵面值等,以以无人机三维运动的形式直观地反映出来,可使系统测试人员直接看到无人机能否完成航路、是否存在问题。
Flightgear软件是一款开源飞行软件,内部集成了多款飞机模型数据,具有良好的人机界面,容易进行二次开发,并可接收外部传送过来的飞行动力学数据进行飞行,是无人机全数字仿真和地面测试阶段三维显示的较好选择。
无人机三维显示需求目前我们的无人机无论是进行实验室仿真或外场飞行试验,一般都能拿到较为准确、实时性也较强的遥测数据,这些数据包括无人机系统飞行的各种信息,如GPS经纬度、高度等定位信息;无人机俯仰角、滚转角等姿态角信息;三轴加速度信息、舵面控制量及反馈量信息等等。
按照以往经验,有了这些信息,如需对无人机的飞行性能进行分析,可以对各路信息分别汇总,绘出曲线,即能较直观地看出参数的数值走向和有无异常等。
Flightgear简介
Flghtgear当前版本3.2.0(程序主要由C++编写)
1、程序组件:
主要使用flightgear和simgear两个模块,现在集中研究simgear的使用2、模拟程序功能
暂时没有具体分清楚对应程序代码,主要需要了解控制系统
3、程序运行流程
飞行数据由循环2产生,循环2由simgear模块实现
4、程序运行经验:
(1)刚装好程序,运行可能会出错,一般是.dll文件版本过时,根据错误报告下载对应dll 文件替换就可以了。
(2)飞机起飞成功关键在于不偏离跑道,达到速度,自行起飞,不用强行提起机头起飞。
否则一般会出现高度不能爬升的问题。
(3)飞机飞行过程中,如果姿态变化太大,飞机容易坠落,飞行数据也会跳变(貌似是一个bug)
5、相关网址
编译经验:/thread-528-1-1.html
中文论坛:/forum.php。
flightgear文件配置
FG的汉化分下面几个部分。
其实就是对plib的汉化。
(一)首先把XML文件转为UTF-8编码格式,注意是不要BOM的UTF-8,Editplus软件可以完成这项功能。
因为如果直接改为中文的话,中文是多字节的,有可能会导致XML解析时碰到特殊字符出错,UTF-8格式就没有问题。
至于什么是UTF-8,以及UTF-8,UNICODE,ASCII,国标码之间的关系请百度一下,这些都是基本知识,下面的程序要用。
(二)FG的菜单使用的是plib中的fnt点阵字体,不过,由于在程序中内置了英文的显示方式,不适合中文,所以要想办法加载汉字库,网上有现成的HZK16,是宋体的。
还有一个软件可以自定义字体,字号然后输出点阵字体。
修改fnt的点阵字体模块,读取汉字,注意读出的是UTF-8,要转换为ASCII才能用,然后根据汉字编码查询汉字库文件,读出点阵信息,记住要上下翻转一下,就是把字上下颠倒,第一行在最下面。
替换原英文的buff就可以显示汉字。
(三)FG中的操作提示,如tutorials中的操作提示,ATC的语音,就是在屏幕中间显示的一句话,可以用鼠标拖动的,还有程序中的对话框,控件中的字也是用点阵方式实现的,有的在nas文件中实现,那么nas文件也要改为UTF-8编码方式。
划,加载飞机等等的英文提示是用osgtext实现的,osgtext原生支持宽字节编码,就是UNICODE编码,只要修改一下输出函数就可以了,并且可以使用ttf字体,效果非常好。
(五)最难的就是纹理字体,比如在HUD上显示汉字,在面板上显示汉字就要用到plib中的纹理字体,plib的纹理字体是txf格式的,说白了就是一张图片,上面画好了各种字母数字符号等,然后抠出部分图片作为纹理贴到面板上显示。
但汉字显然是不能这么做的,因为汉字太多了,无法预做成纹理图片。
不过可以使用FreeType来动态生成纹理贴图,这部分可以参考ttf2txf程序的代码,这个程序是利用freetype生成txf字库的程序,我们不生成txf文件,而是把汉字直接渲染到buffer中,然后把buffer显示出来就可以了。
Flightger翻译
这mini-HOWTO解释了如何在FlightGear中添加3d飞机模型FlightGear,以及这些模型如何动画和地位。
不需要c++编程,但是用户需要FlightGear的一些知识产权制度和XML标记,并将需要了解FlightGear使用坐标系统的模型:.在米的距离.角在度.x轴纵向运行,向后面.y轴横向运行,向右边.z轴向上运行.标题是在z轴旋转,正面是顺时针从上面.音高是一个绕y轴旋转,正面是顺时针从左边.辊绕x轴旋转,正面是顺时针从背后看到的关于HThis mini-HOWTO包含三个部分:1、加载模型2、重新定位模型3、动画模型1、加载模型通过OpenSceneGraph FlightGear支持许多不同的3 d文件格式,包括VRML2 AC3D,DXF,和许多其他格式。
性能/ sim /模型/路径在主FlightGear属性树控制模型将被加载;它需要从FG_ROOT得到一个字符串值给模型的相对路径(基地的根包,如/usr/local/lib/FlightGear或C:\ FlightGear \)。
加载一个新模型的最简单方法是在启动时设置的属性——道具:命令行选项;例如,使用3d飞机模型,您已经安装了$FG_ROOT/Models/my-cessna.wrl。
wrl,您可以调用FlightGear这样(在类unix系统):fgfs --prop:/sim/model/path=Models/my-cessna.wrl(注:一般来说任何使用的纹理模型必须出现在相同的目录中。
如果my-cessna。
wrl使用纹理cessna01。
rgb和cessna02。
rgb,您应该安装这些纹理 $FG_ROOT/Models/。
可以指定一个能找到指定纹理的位置的路径(相对于模型路径))。
当您想要设置一个3d模型永久作为默认的飞机而不是在命令行中指定它,您需要编辑一个飞机设置文件。
在FG_ROOT美元/飞机/目录,设置一系列文件结束。
flightgear 2020.3 编译
【飞行模拟软件 FlightGear 2020.3 编译指南】FlightGear 2020.3 是一款开源的飞行模拟软件,其最新版本推出了一系列更新和改进,包括图形效果、机场建模、飞行模型以及多人模式等方面的优化。
然而,有些用户可能遇到了使用二进制发行版时不够满意的问题,因此他们希望自行编译 FlightGear 2020.3 版本。
下面我们将探讨 FlightGear 2020.3 的编译过程,并为您提供一些编译指南。
1. 准备工作在开始编译之前,您需要确保安装了一系列的软件,包括 CMake、Git、gcc/g++ 等开发工具,并且安装了OSG、SimGear、OpenAL、libpng 等相关库。
还需要获取 FlightGear 2020.3 版本的源代码,您可以通过 Git 仓库克隆源代码,或者直接下载源代码压缩包。
2. 配置环境在获取了源代码之后,您需要配置编译环境,包括设置环境变量、配置 CMake、指定编译选项等。
您可以根据自己的系统和需求,进行环境的配置和定制化,以确保编译过程的顺利进行。
3. 开始编译接下来,您可以开始编译 FlightGear 2020.3 的源代码。
在这个过程中,您可能会遇到一些依赖库缺失、编译错误等问题,需要及时解决。
编译成功后,您将获得一个可执行文件,您可以通过执行该文件来启动 FlightGear 2020.3 版本。
4. 测试与调试在编译完成后,您可以对 FlightGear 2020.3 进行测试和调试。
您可以验证新添加的功能、修复的bug 是否生效,以及性能是否得到提升。
对于编译出现的错误或者不完善之处,您还可以进行进一步的修改和改进,并再次编译,直至满意为止。
总结与回顾通过本次编译,您不仅获得了 FlightGear 2020.3 最新版本的可执行文件,还学习到了如何配置编译环境、解决依赖问题,以及验证和调试编译结果的过程。
这将有助于您更深入地理解和掌握 FlightGear 2020.3 的代码结构和编译流程,从而为后续的开发和定制工作打下坚实的基础。
基于FlightGear的无人直升机飞行仿真技术研究
针对FlightGear在直升机飞行模拟中的问题,本次演示从以下几个方面进行 研究:
1、FlightGear直升机模型库的建立与完善:整理和归纳各类直升机的气动 模型和结构特点,将其集成到FlightGear中,形成完整的直升机模型库。
2、真实控制逻辑的引入:通过深入分析实际直升机的控制逻辑,将其引入 到FlightGear中,实现更为真实的直升机操控体验。
3、空气动力学效应的模拟:研究并实现更为精确的空气动力学模型,包括 升力、阻力、侧力和扭矩等,提高FlightGear在直升机飞行模拟中的精度。
4、评价体系的建立:通过定义一系列评估指标,对改进后的FlightGear直 升机飞行模拟系统进行性能评估。
4、评价体系的建立:通过定义 一系列评估指标
基于FlightGear的无人直升机飞 行仿真技术研究
目录
01 一、引言
03 三、技术原理
02 二、概述 04 四、实现方法
目录
05 五、应用场景
07 参考内容
06 六、未来展望
一、引言
随着无人机技术的迅速发展,无人直升机在军事、民用等领域的应用越来越 广泛。为了提高无人直升机的性能和使用效果,对其进行飞行仿真成为了一个重 要的研究课题。FlightGear是一款开源的飞行仿真软件,其强大的仿真功能和灵 活的扩展性使得它成为了无人直升机飞行仿真技术的重要工具。
2、虚拟实验:在FlightGear仿真环境中进行无人直升机的各种实验,如风 洞实验、稳定性实验等,以降低实际实验的成本和风险。
3、技术研究:利用FlightGear进行无人直升机的技术研究,如飞行控制算 法优化、导航系统设计等。
4、作战模拟:在FlightGear中模拟无人直升机的作战过程,进行作战策略 制定和评估,提高作战效益。
FlightGear帮助手册第一部分
MAC 下 FlightGear 的安装
2
使用
开始运行 FlightGear(所有用户)
3
按键,鼠标,面板等的使用(所有用户)
4
问题处理
一般性问题
其他
我们强烈建议您阅读以下资料,尤其是遇到问题的时候
•当您想得到更多关于 FlightGear 的知识或遇到难以解决的问题时,请查阅
FAQ
/Docs/FlightGear-FAQ.html,
手册内容分为以下三个部分。
Part I: 安装
第一章,介绍 FlightGear 背景知识和运行所需要的系统条件。
第二章,飞行前准备:安装 FlightGear。您将学会怎样安装 FlightGear 主
程序、飞行场景和各种飞机。
Part II: 自由飞行
第三章,起飞:介绍如何运行已经安装好的程序,包括如何输入命令行参数 ,
建议按以下顺序阅读此手册安装安装包的使用主要是windows用户2linuxunix下flightgear的安装2mac下flightgear的安装2使用开始运行flightgear所有用户3按键鼠标面板等的使用所有用户4问题处理一般性问题其他我们强烈建议您阅读以下资料尤其是遇到问题的时候?当您想得到更多关于flightgear的知识或遇到难以解决的问题时请查阅faqdocsflightgearfaqhtml?小手册docsinstallguidefgshortrefhtml?其他文档flightgeardocs
您可能玩过微软模拟飞行或者别的商业模拟飞行软件,一般来说,这些 软件的价格在 50 美金左右,购买这些软件并不需要花费太多,但是运行这 些软件所需要的 PC 硬件估计在 1500 美金左右。
flightgear使用帮助
如果想选择飞机或者机场可以加入参数--airport=KSFO --aircraft=777 Flightgear 程序的参数很多,可以选择飞机类型,机场,环境等,具体参数配置可以参考帮助手 册。 一般在 windows 操作系统下,我们是以有图形化界面的向导程序来运行 flightgear 的。 直接双击 fgrun.exe 出现如下界面
i/I 最小化/最大化仪表板 h/H 打开关闭 HUD/改变 HUD 的颜色 x/X c 开关仪表板鼠标操作指示标记
z/Z 改变能见度(好/坏) F8 开关雾特效
F10 显示/隐藏菜单栏 自动驾驶及相关控制
Ctril + A 高度保持开关
Ctril + G 下滑角跟随开关
然后,执行放襟翼,推油门,滑跑,拉杆起飞等动作,开始飞行之旅。具体如何飞 行我就不介绍了。网上也许多飞行教程,例如:中国飞行模拟组织( ) 的 官 方 网 站 即 提 供 许 多 有 用 的 信 息 可 供 下 载 。 下 面 给 出 FlightGear 键盘操纵飞机的常用操作说明(见表 1),也可以在 FlightGear 的“Help” 菜单中的“Basic Keys”和“Commnon Aircraft Keys”选项里获取部分按键说明。 表 1 常用操作 按键 说明 操纵面(在数字键盘上,控制航向、滚转和俯仰等,必须激活数字锁定)
是不是有了以上的键盘操作表就可以玩好飞行模拟了呢?显然是不行的。飞行模拟 游戏决不等同于“F-22”等空战模拟游戏,除了娴熟的(键盘、游戏杆和鼠标)操作
flightgear 气动模型 jsbsim 介绍
What's the point?Pure unlimited aerobatic aircraft have seldom been modeled in any mainstream simulator. Many will argue that the Extra 300 introduced in Microsoft® Flight simulator-98 is a clear proof of the contrary, yet the FS flight model was (and still is) too limited to provide a decent sensation of flying. The most recent aerobatics planes correctly modeled are the SF260 and Spitfire MkXIV from Real Air® but those are not dedicated “stunt airplanes”.The last serious attempt to model this category of aircraft was the first Flight Unlimited simulator back in 1996! It was nicely packaged with a fine tutorial (remember, this was at a time when games came with a manual) and allowed one to fly machines ranging from an aerobatic sailplane to the Su-31 unlimited aerobatic aircraft.Many reasons can be found for the lack of interest in this cate-gory. The most obvious is that aerobatic aircraft are limited to Visual Flight Rules since in-struments are heavy and sensi-tive to the kind of flying in-volved. What's worse, they have a very short rangebecause a routine of 10 minutes of high-g maneu-vers will bring the pilot to his (or her) knees, and the less fuel, the better for maneuverability. Finally,performing a correct maneuver requires a lot oftraining (first loops look awful when replayed!).All this being said, it is an extremely rewardingway to fly as it gives a sense of the third dimensionwith fine management of potential vs. kinetic en-ergy being the key. Flight modeling is the most important part when recreating the feeling of aerobatic flight. Most of the maneuvers are performed inside or near a stall. Asymmetric stalls are also a key ingredient of ma-neuvers such as the snap roll. JSBSim already pro-vides a fine experience of flying and, being open source, has the potential to evolve to give the whole envelope. Why did I choose the Su-26? Let us say that it is amatter of personal taste. Sure enough, there are bet-ter aircraft around (Cap-232 or the superlative Su-31 come to my mind), but one can hardly fight his aesthetic judgment!Modeling the BeastAerobatic aircraft have plenty of features that make them easy to model (which is good since this is my first add-on aircraft for FlightGear):•Straight wing with little taper ratio (this allowsusing the lifting line theory for 3D wing deri-vations (Prandtl) •Symmetric Airfoils•Low Mach number (incompressible flow) •Reciprocating engines•No high lift devices (lift is obtained through thick airfoils) •Simple avionicsNevertheless as I wrote before, the post-stall enve-lope must be modeled for the magic to begin and this is were it gets tough.I did not have explicit references for the SU-26 air-foil. The only data I could get was a relative thick-ness (see The Incomplete Guide to Airfoil Usage, /m-selig/ads/aircraft.html). So, I started with a typical symmetric airfoil and scaled it to match a relative thickness of 15%. While this may look like an appalling approxima-tion, thin airfoil theory indicate that the thickness law (which is the only variable for a symmetrical(Continued on page 2)Building an Aerobatics Aircraft for JSBS im : The Su-26Enrique Laso LeonInside this issue:Aerobatics Aircraft: Su-26 1 Scripting Multiple Runs in JSBSim 3 Scripting Changes in JSBSim 6 JSBSim and MSFS 9 News 10Modeling Aerodynamic Moments11OpenEaagles Simulation Framework12The 2006 AIAA Modeling and Simulation Conference14Simulators Aboard the U.S.S. Lexington Museumat Corpus Christi, Texas 16Simulate This! EndThe quarterly newsletter for JSBSim, an open source flightdynamics model in C++S UMMER 2006V OLUME 3, I SSUE 2See Page 12:(Continued from page 1)airfoil) only influences pressure repartition, not C lift vs. alpha slope (2*π for incompressibleflow). This in turn will change the stall character-istics (abruptness, critical angle, etc.), but I thought the difference would be too small for anybody to notice, provided the airfoil had a rounded leading edge:The software used to compute the stall character-istics was xfoil (/drela/Public/web/xfoil) which gave polar curves up to 30 de-grees of angle of attack.Post stall behavior derivations was found from an article written for the blades of wind turbines(Stall coefficient, aerodynamic airfoil coeffi-cients at large angle of attack, C. Lindenburg réf. ECN-RX-001-04 Energy research center of theNetherlands).These computations were made using Open Of-fice Calc v2.0 (any spreadsheet would do for that matter). It should be noted that the curve from 0 to 30 degrees (xfoil) matches quite well with the curve for AOA higher than 30 degrees (post stall).Derivations for the finite span wing was obtained using the Prandtl theory of the (vortex) lifting line (the one that gives the induced drag as afunction of the aspect ratio). For post-stall behav-ior the article mentioned above provides a correc-tion for finite span. The combination of both pro-vides the following coefficient curves :It is interesting to notice that the values given by Aeromatic (blue curve on the lift diagram, see for Aeromatic) are not that far from the complete deriva-tion. They would even be better if the airfoil camber effects could be taken into account (at zero camber, i.e. symmetrical airfoil lift at zero incidence is zero).Drag at zero incidence was increased by impos-ing a minimum value in order to model fuselage drag (very very crude).The result of all this is an aircraft accomplishing simple aerobatics neatly (barrel rolls, loops, Cu-ban eights) and even complex ones such as the spin with a nice feel. The latter came as a surprise sinceJSBSim comes without asymmetric stall effects so far. Snap rolls, while being possible, are somewhat slow and induce a large loss of altitude. Stall on the other hand is extremely brisk with g-loading dropping sud-denly as elevator authority is huge (purposely in order to get adequatecontrol all through the envelope)Future ImprovementsThe beta version of the Su-26 will be released sometime soon in order to get a first feedback (hopefully from real life pilots, too!).The model can stand a lot of improvement with(Continued on page 3)Page 2Edited by Jon Berndt“Back of the Envelope ” is a communication tool writtengenerally for a wider audience than core JSBSim developers, including instructors, students, and other users. The articles featured will likely tend to address questions and comments raised in the mailing lists and via email. If you would like to suggest (or even author) an article for a future issue, please email the editor at:**************About this newsletter ...(Continued from page 2)the current definition of JSBSim. The next step is to correctly model the moment coefficient of the whole aircraft (that is, taking the wing and tail separately) for the whole AOA range. This does not require a lot of additional theory, just to take into account the direction of motion (the “focus” is at a quarter of the chord for low incidence, but measured in the direction of the flow !).Fine tuning of the propeller is really lacking for now. Particularly thrust in the low speed envelope is abundant, making landings quite difficult. Other improvements could come from evolutionsPage 3 of JSBSim, itself. In order to model post stall be-havior, asymmetric effects could be taken into ac-count, especially since propeller airplanes will tendto depart in asymmetric stall due to engine torqueand P-factor.Furthermore variations of lift along span wouldadd an extra feeling, since loss of aileron effi-ciency at low speed is related to wingtips beingmore loaded than roots for tapered or swept wings.But in turn that would have little influence onaerobatics airplanes as they often have full spanailerons to handle this problem! ▲Scripting Multiple Runs in JSBSim Agostino De MarcoA couple of months ago I began to think over the following idea: One may have the need to run JSBSim multiple times and compare the results; would it be worthwhile to implement a new capa-bility into the scripting language supported by JSBSim's FGScript class that would make it possi-ble to launch one or more successive simulations with one single script?After all, in each of the many scripting languages available today we always find the following ele-ments: conditions (if-then-else clauses), selection (switch clauses), iterations (for clauses), inclusion of blocks of code (include/import clause) etc. Then, what if we had something vaguely similar in JSBSim scripts?As someone said in the development-issues mail-ing list, there are many reasons for wanting multi-ple runs from a simulation. When designing or modifying a control or guidance system, one may want to evaluate the design at multiple test points within the flight envelope. Having the ability to set up a file with a number of initial conditions, trims, etc. would allow the user to do multiple tests with-out having to play around with a bunch of files. Thinking at the simplest level, suppose that one has prepared N scripts, for example,737_runway_1.xml, 737_runway_2.xml, ... ,737_runway_N.xml, that clearly let us guess that the user is trying to simulate different variations of a take off run for the B737 aircraft. According to the above idea, he would like to have the chance to run JSBSim through each of the above cases by using a single script, the "driver", which could be something like: A first problem arises here. After each run this approach should incorporate a "post-run"step to save the output (if specified), e.g.B737_datalog.csv, in a number of unique files, i.e. B737_datalog_1.csv, B737_datalog_2.csv, ... ,B737_datalog_N.csv.From the coders point of view the development of advanced scripting features would of course become quite demanding, as this job would be like implementing a sort of interpreter on top ofthe main JSBSim structure.Actually, looking more closely at the kind of code that JSBSim is and how it is intended by the developers, even if the above "capability" would be nice to have, one can comment that (quoting Jon Berndt) this is the kind of thing that, in spite of being explicitly provided for in the scripting lan-guage, should be done externally, through a feature in JSBSimCommander or via a shell script. In fact, an application like JSBSim Commander, being that just a "Commander," will hopefully have that abil-ity sooner or later.Finally I convinced myself that the capability to launch multiple runs of JSBSim, collect output data appropriately, and prepare plots for the analy-sis should not be required to the flight dynamic model, because this is not his job, but should rather be implemented outside via a shell script. And that's what I did. Eventually, I will also to have an animation (i.e. an .avi file) of the simulation, auto-matically generated.Multiple runs done in this way are really helping me in the analysis of a number of variants of stan-dard flight maneuvers starting from steady equili-brated conditions, in flight andon ground.Thanks to a grant fromENAV, the Italian authorityon flight safety, I have ana-lyzed a number of take offruns from Milano Linate air-(Continued on page 4)<runscript name="B737 takeoff runs" action="MULTIPLE"> <script file="737_runway_1.xml"><script file="737_runway_2.xml">...<script file="737_runway_N.xml"><!-- this is just a naive attemptto define something... --></runscript>Page 4(Continued from page 3)port. I have investigated on the possible failures during take-off runs and consequent inadequate pilot reactions/maneuvers that end up with the airplane colliding with a par-ticular radar tower, which is going to be build in the vicinity of the main run-way. For the sake of brevity, I will discuss below, with an annotated example, how I have tackled the most relevant prob-lem from JSBSim users' perspective: running JSBSim a number of times in a row through a shell script. I will reserve some final observations as hints for the development of similar scripts that, from logged output files, generate relevant plots and automati-cally produce a document collecting them. This involves the use of well known, freely available, programs like Gnuplot and LaTeX. Before going on further we have to note that the 0.9.11 version of JSBSim "suspends" the simu-lation, i.e. the time increment is set to zero when a crash is detected. Consequently, when JSBSim is launched as a stand-alone batched application and the simulation ends up with the aircraft crashing on the ground the program enters into an infinite idle loop and the user must manually kill the corresponding process. The need to work with failure situations during take-off and with scripted runs has required me to modify a little bit JSBSim's main loop in order to have the program executionterminated each time, with no possibility of suspen-sion.The code snippet In Code Sample 2 illustrates the modifications I made in JSBSim.cpp.Multiple runs of JSBSim are now easier to achievewith a bash (Bourne-Again SHell) shell script. Bash is a command language interpreter that exe-cutes commands read from the standard inputor from a file. Bash also incorporates useful features from the Korn and C shells (ksh and csh), popularinterpreters from the Unix world. Bash is freely available for all Linux distributions, for Unix and for Windows (Cygwin). The basic idea behind multiple runs via a bash script (that I'll call "multiple-run.sh") is to concentrate in a given directory a number of JSBSim scripts, e.g. "B737_script1.xml", "B737_script2.xml","B737_script3.xml", etc., and have a tool that per-forms the following tasks:1.list the eligible xml files,2.put them into an array,3.generate a unique ID for each of them, andunch JSBSim as many times as the number ofcases listed. The unique ID will help to rename and manipulate the output files further. A possible "multiple-run.sh" is listed in Script 1 (see page 5), with appropriate annotations. It is a good idea to put the script where JSBSim.exe resides and give it the usual attributes (execute per-mission) like the following command does:chmod u+rx ./multiple-run.shThe multiple runs will be launched with the com-mand, ./multiple-run.sh [The command must be run in the directory where the shell script resides.] Once all JSBSim runs are done (according to the con-tents of the directory <JSBSim root>/test/scripts) the user will find a bunch of output csv files in the JSBSim root dir.Their names start with a unique numeric code as produced in the script main loop. At this point, it is a straightforward task to pre-pare a script that lists all (Continued on page 6)Code Sample 2 // *** CYCLIC EXECUTION LOOP, AND MESSAGE READING *** //while (result) {while (FDMExec->ReadMessage()) {msg = FDMExec->ProcessMessage();switch (msg->type) { case JSBSim::FGJSBBase::Message::eText: { cout << msg->messageId << ": " << msg->text << endl;// I just warn the user the simulation will be stopped anyway#if defined(AGO_NO_SUSPEND) // agodemarstring::size_type loc = msg->text.find( "Crash Detected: Simulation STOP", 0 );if ( loc != string::npos )cout << ".............. simulation will be stopped " << endl; #endif break; }}// ...if ( ! FDMExec->Holding()) {if ( ! realtime ) { // IF THIS IS NOT REALTIME MODE, IT IS BATCHresult = FDMExec->Run(); // Here I break and stop the loop avoiding program suspension #if defined(AGO_NO_SUSPEND) if ( FDMExec->GetState()->Getdt()==0.0 ) // check if SUSPENDED after CRASHbreak;#endifPage 5 #!/bin/bash# The sha-bang (#!) at the head of the script tells the system# that the file is a set of commands to be fed to the indicated command interpreter,# in this case /bin/bash. Thus #! is actually a two-byte magic number# that designates here an executable shell scriptecho "-------------------------------------------------"echo " Multiple JSBSim runs "echo "-------------------------------------------------"echo# JSBSim root dir, executable name, and working directory# (change them conveniently for your system)JSBSim_ROOT="l:/agodemar/jsbsim/JSBSim-0.9.11_dotNET2005/JSBSim/"JSBSim_EXEC=$JSBSim_ROOT"JSBSim.exe"WORK_DIR="test/scripts/"# Note: must be a relative path to JSBSim root dir !!# we will put here the scripts "B737_script1.xml", "B737_script2.xml", ... etc.#------------------------------------------------------------------------------------# collect script file names (from WORK_DIR)#------------------------------------------------------------------------------------SCRIPT_FILES0=`ls "$JSBSim_ROOT$WORK_DIR"B737_script*.xml`# The back ticks `...` return the result of the system command, ls, into a string.# File names returned here do not include the path.#------------------------------------------------------------------------------------# give the scripts a proper name, including the path#------------------------------------------------------------------------------------SCRIPT_FILES=for file in $SCRIPT_FILES0dofile="$WORK_DIR/"$file # prepend the appropriate path#echo $fileSCRIPT_FILES="$SCRIPT_FILES"$file" " # collect the namesdoneecho "scripts: "$SCRIPT_FILESecho#------------------------------------------------------------------------------------# run JSBSim multiple times# and generate the unique ID for each run#------------------------------------------------------------------------------------prefix=PREFIXES=for scriptfile in $SCRIPT_FILESdoif [ ! -e "$scriptfile" ] # Check if file exists.thenecho "$scriptfile does not exist."; echocontinue # On to next scriptfile in the list.fi# File exists, print name and sizels -l $JSBSim_ROOT$scriptfile | awk '{ print $9 " file size: " $5 }'# This is an example of piping (<command 1>|<command 2>):# $JSBSim_ROOT$scriptfile expands to the name of the current JSBSim script that is to# be used for the simulation. Command ls -l returns a number of fields, whose 9th and 5th# are printed by the awk utility (actually on cygwin gawk, Gnu awk, is invoked)# Now generate a unique id by using the date commandprefix=$(date +%N)# "+%s" option (GNU-specific): seconds since 1970-01-01 00:00:00 UTC# "+%N" : nanoseconds (000000000..999999999)# The following alternative would strip off leading and trailing zeroes, if present.# prefix=`date +%N | sed -e 's/000$//' -e 's/^0//'`# by using sed# store ID in an array(Continued on page 7)Page 6responding postscript figure will be produced bysimply launching Gnuplot with the appropriate plotting script on the command line:gnuplot 00091110230_B737_velocities.plt gnuplot 000622010230_B737_velocities.plt …It is worth making this procedure automatic like the one that launches JSBSim multiple times. The same ideas apply to the generation of a LaTex document: scan for *.ps, retrieve the unique prefixes, parse a template document, generate a unique one, collect all, and finally run through the LaTeX compiler to obtain a final postscript or pdf document with all the desired plots for all the simulated cases. ▲(Continued from page 4)these newly created csv file (for example by look-ing for the XXXX_jsbsimrun.log). Retrieving their unique prefix, e.g. like in 00091110230_B737_velocities.cvs000622010230_B737_velocities.cvs etc, mayprove useful in plotting the results.Suppose one has prepared the simple Gnuplotscript:One can parse the Gnuplot script with sed, substi-tute the string "CHANGEME" with the unique IDs retrieved from the list of JSBSim output files, and produce a unique plotting script, e.g. 00091110230_B737_velocities.plt000622010230_B737_velocities.plt, etc. The cor-#-----------------------------------------------------------#Gnuplot script#----------------------------------------------------------- # set the terminal and the output fileset term postscript color enhanced linewidth 2.0 set out "CHANGEME_B737_velocities.ps" set key top left # plot from file plot \"CHANGEME_B737_velocities.csv" u 1:($13/10) w l t "V_C [kts/10]",\ "CHANGEME_B737_position.csv" u 1:($2/100) w l t "h [ft/100]",\"CHANGEME_B737_aerodeflections.csv" u 1:($4*10) w l t "delta_e [deg*10]",\ "CHANGEME_B737_attitude.csv" u 1:($3*180.0/pi) w l t "theta [deg]" set out # free the output # EOF#----------------------------------------------------------- Gnuplot script, “template-velocities.plt”Scripting Changes in JSBSimJon S. BerndtSubstantial changes have been made to the script-ing capability for JSBSim. In doing so, the version number has been incremented to 0.9.12.The scripting changes were needed for some test-ing and debugging. Some of the items had been getting thought about for a year or two.It should not be too difficult to modify exist-ing scripts to run using the new format. There are new attributes and keywords for some of the ele-ments (example below). The major changes are:•The "when" element is changed in name to"event"•The conditional test[s] that must be fulfilled for a set of actions to take place is handled by the FGCondition class from the flight con-trols code. The class now moves to the math/ subdirectory as it will have even more use in the near future.•The "persistent" element is now an attribute of the event element.•You can specify to "notify" when an event is triggered, which results in a message being printed out.(Continued on page 8)<?xml version="1.0"?><runscript name="C172-01A takeoff run"><!-- This run is for testing the C172 altitude hold autopilot --> <use aircraft="c172x" initialize="reset00"/> <run start="0.0" end="3000" dt="0.0083333"> <event name="engine start"> <notify/><condition> sim-time-sec >= 0.25 </condition><set name="fcs/throttle-cmd-norm" value="1.0" action="FG_RAMP" tc="0.5"/> <set name="fcs/mixture-cmd-norm" value="0.87" action="FG_RAMP" tc="0.5"/> <set name="propulsion/magneto_cmd" value="3"/> <set name="propulsion/starter_cmd" value="1"/> </event> </runscript>Page 7 (Continued from page 5, Scripting Multiple Runs in JSBSim)PREFIXES=$PREFIXES" "$prefixecho "running JSBSim ..."JSBSim_RUN_CMD=$JSBSim_EXEC" --root="$JSBSim_ROOT" --script="$scriptfile# ...here only assembles the command line for launching JSBSimecho $JSBSim_RUN_CMDecho "writing log in file: "$prefix"_jsbsimrun.log"$JSBSim_RUN_CMD > $prefix"_jsbsimrun.log"# ...here the command line is actually launched and the output redirected into a# unique log file# Note: this log file, actually its name, will be useful in post processing# task by other scripts# Next is a list of output files pre-defined appropriately in the aircraft# config file.# I assume here that the scripts deal with a single aircraft type, i.e. "737.xml".# The output properties are specified in that aircraft config file and are logged# to different files for convenience of analysisOUTPUT_FILES="B737_accelerations.csvB737_attitude.csvB737_forcesmoments.csvB737_position.csvB737_velocities.csvB737_aerodeflections.csvB737_commands.csvB737_gear.csvB737_propulsion.csvB737_animation.csv"echo "moving output files ..."# Now the current JSBSim output files are renamed into unique file names by prepending# the id generated aboveMOVE_CMD=for outputfile in $OUTPUT_FILESdoMOVE_CMD="mv $JSBSim_ROOT$outputfile"" "$JSBSim_ROOT$prefix"_"$outputfileecho $MOVE_CMD$MOVE_CMDdoneechodone# summaryecho "-------------------------------------------------"echo "Summary of runs"echo "-------------------------------------------------"# count runsn=0for logprefix in $PREFIXESdolet "n = $n + 1"doneecho "N. of JSBSim runs: "$necho -n "Run log-files: "for logprefix in $PREFIXESdoecho -n $logprefix".log "doneechoecho "-------------------------------------------------"exit 0Page 8(Continued from page 6)•Events can be named.• A delay can be specified for an event, so thatit executes a certain number of seconds afterit is triggered.•An event can be a notify-only event. That is,you do not have to specify actions for anevent, it can exist to notify the user of somekind of event.•The “use” command combines selection ofthe initialization file and the aircraft.•Properties can be defined in a script, so thatevents can be repeated, etc.In order to help convert scripts from the old formatto the new one, an XSL transformation has beencreated and is available for download at:/convert_script.xslAdditionally, an XSL script has been created forthe script itself, so double-clicking on the script inMicrosoft Explorer (for instance) or other filemanager application should bring up the file in abrowser, formatted to be more easily human read-able (see accompanying illustration). See:/JSBSimScript.xslAn XML Schema has also been written that allows a JSBSim script to be validated. The schema is located at the JSBSim web site at:/JSBSimScript.xsd The conditional tests are now modeled using a “standard” JSBSim conditional construct, that is also used in the flight control switch component. When coupled with the new property declaration capability and the notify flag, some interesting effects can be achieved. One of those is a repeating notification that is printed at time or altitude inter-vals. For example:<run start="0"end="100"dt="0.0083333"> <property>simulation/notify-time-trigger</property>…<event name="Time Notify"type="FG_DELTA"persistent="true"> <description>Interval</description><notify/><condition>sim-time-sec >= simulation/notify-time-trigger</condition><set name="simulation/notify-time-trigger"value="100"type="FG_DELTA"/></event></run>The above construct will print out a message every 100 seconds. ▲Page 9exchange betweenmodule configura-tion is stored in an。
FlightGear初学教程
FlightGear初学教程1.怎样运行FlightGear安装完FlightGear在\FlightGear v1.9.1\bin\Win32目录下能发现很多可执行文件,其中fgrun.exe为向导程序,fgfs.exe为FlightGear主程序。
直接双击fgfs.exe 或者在命令行下输入fgfs.exe是无法正常运行程序的,程序会提示版本检测失败。
如下我们必须给输入参数才能正常运行程序,一般只要指定资源文件目录就能运行程序了,在命令行下输入fgfs.exe --fg-root="d:\Program Files\FlightGear v1.9\data" 就能正常运行flightgear了,如下图所示。
如果想选择飞机或者机场可以加入参数--airport=KSFO --aircraft=777FlightGear程序的参数很多,可以选择飞机类型,机场,环境等,具体参数配置可以参考帮助手册。
一般在windows操作系统下,我们是以向导程序来运行FlightGear的。
直接双击fgrun.exe出现如下界面点击Prev按钮出现如下界面Executive:FlightGear主程序路径FG_ROOT:资源路径FG_SCENRY:场景(地形)路径设置好这些路径点击NEXT到如下选择飞机界面在此可选择飞机机型,并能预览飞机。
点击NEXT到机场选择界面,在此界面可以选择起飞机场,初始跑道,选择好机场和跑道后点击NEXT到以下界面:选中Show command line我们可以看到命令行下运行程序我们应该输入的参数,这个功能是非常有用的。
在此界面中可以设置运行环境,联网飞行等,点击ADVANCED按钮有更多选项,具体这些设置有什么用要靠玩家自己去试试或者参考帮助手册,我不再啰嗦。
点击RUN,向导程序将调用主程序fgfs.exe,开始飞吧!2.FlightGear基本飞行操作本教程以Cessna 172P Skyhawk(1981 model)为例,介绍一些飞行的基本操作。
基于FlightGear的虚拟现实应用
基于FlightGear的虚拟现实应用11.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 的仿真平台可以在同一台机器上运行,也可以在局域网不同的机器上分别运行。
FlightGear帮助手册第二部分
� --disable-hud 关闭 HUD(屏显)
� --enable-hud 开启 HUD
开启副翼与方向舵之间的自动协调切换(当没有踏板时推荐采用) � --browser-app=/path/to/app
指定网页浏览器的位置。例如:--browser-app=”C:\Program Files\Internet Explorer\iexplore.exe” (注意不要漏掉双引号)。 � --prop:name=value 设置属性树对应变量值,例如:--prop:/engines/engine0/running=true是 启动FlightGear后发动机自动点火, 其他例子: --aircraft=c172 --prop:/consumables/fuels/tank[0]/level-gal=10 --prop:/consumables/fuels/tank[1]/level-gal=10 是短途飞行时的油量。 � --config=path 指定路径加载附加的配置文件,例如: FlightGearfs --config=./Aircraft/X15-set.xml � --units-feet 距离单位为英尺 � --units-meters 距离单位为米
如果你设置了错误的目录或想改变场景目录,在启动程序的选择飞机界面可 以点击“Prev”按钮重新设置目录路径。
3.3.1 从命令输入行启动
当然,你也可以在命令行下启动 FlightGear。此时需要手动设置 FlightGear_ROOT 和 FlightGear_SCENERY 环境变量。
打开命令行窗口,把 当前目录改为你的可执行程序目录(一般是:c:\Program Files\FlightGear\Win32\bin),通过输入一下命令进行设置: SET FlightGear_HOME="c:\Program Files\FlightGear" SET FlightGear_ROOT="c:\Program Files\FlightGear\data" SET FlightGear_SCENERY="c:\Program Files\FlightGear\data\Scenery";\
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本架构,架构分析的前提是编译flightgear在flightgear内部,命令行参数分为6种类型:BOOL、String、Double、Int、Channel、Func其中Bool、String、Double、Int都是直接对相应的属性(可以理解为内部的变量)进行赋值;如:--airport=ZSSS 初始化时设置机场ICAO为ZSSS(上海虹桥)Func类型则是在初始化阶段直接调用内部函数进行处理。
如:--random-wind 初始化时调用fgOptRandomWind,设置随即风不过有些Func类型的参数是需要输入参数的,如:--func_key=func_argvChannel类型参数主要用于外部接口通信,一般都可以复用(如:在命令行中可以有多个--native-fdm=xxx)这种类型的参数有大家熟知的--native-fdm、--generic、--atlas等具体的源码解析流程见图flightgear网络接口模块是有FGIO子系统来完成的。
FGIO子系统支持各种通信协议。
通信协议包括大家常用的:Native-fdm,Native,generic,jsclient等(也即前篇介绍的channel 类型参数)对应的参数形式:--protocol=medium,direction,hz,medium_options,...在flightgear架构分析中提到了,对于子系统,flightgear在初始化阶段调用子系统的bind(),init(),主循环阶段调用子系统的update(),最后调用子系统的shutdown。
因此对于FGIO子系统,在程序中也主要体现在bind、init、update和shutdown这几个函数的处理上。
关于FGIO的结构如下图通信协议的具体实现在FGIO的FGProtocol列表中,FGIO在每个周期都会调用每个FGProtocol 的处理函数,关于FGProtocol的结构如下图下面具体对generic通信进行介绍,generic是通过FGGeneric(FGProtocol子类)来完成的,结构如图所示Flightgear多人飞行对应的参数是multiplay。
具体参数结构如下:--multiplay=dir,freq,ip,port --callsign=your_name其中callsign代表自己的ID官方文档上给出的例子是:For two players on a local network or across the internet:----------------------------------------------------------Player1:--multiplay=out,10,192.168.0.3,5500 --multiplay=in,10,192.168.0.2,5501--callsign=player1Player2:--multiplay=out,10,192.168.0.2,5501 --multiplay=in,10,192.168.0.3,5500--callsign=player2For multiple players on a local network:----------------------------------------Player1:--multiplay=out,10,255.255.255.255,5500 --multiplay=in,10,255.255.255.255,5500--callsign=player1Playern:--multiplay=out,10,255.255.255.255,5500 --multiplay=in,10,255.255.255.255,5500--callsign=playern对于局域网内,2人联机飞行是没问题的,但是多人联机,通过广播的方式通信时会报错!!!因为在程序内部不能对广播地址进行绑定。
所以文档上关于广播方式联机的例子是有误的。
原因在于,flightgear对于广播地址没有进行判断,直接按照常规地址进行绑定,所以会绑定失败。
对于局域网多人(至少3人)联机飞行,这里给大家提供3种方案:1.自己单独在一台主机上搭建服务器,目的很简单:数据转发。
所有联机的客户机把--multiplay=out,10,server_ip,5501中的地址设为服务器地址。
服务器则把收到的数据发给所有的客户机。
2.通过组播方式进行通信,虽然flightgear(实质是simgear)没有对广播进行特殊处理,但是它能识别组播地址。
3.修改flightgear程序。
对于广域网多人联机飞行,由于路由器一般不支持广播和组播,因此这里提供2中方案:1.使用flightgear提供的在线服务器,连上去即可2.自己搭建服务器(思路与局域网方案1一致),但是服务器需要固定IP下面来分析如果修改flightgear程序来达到联机飞行的目的:multiplay主要是有FGMultiplayMgr子系统来管理的,根据前面分析,对于子系统的处理主要是以下几个过程:bind()init()update()shutdown()FGMultiplayMgr的重点是init:init进行以下几个处理:mSocket.reset(new simgear::Socket());mSocket->open(false)mSocket->setBlocking(false);mSocket->bind(rxAddress.c_str(), rxPort)这几个处理没有判断地址的类型,因此在bind阶段就会出现广播地址绑定失败!为了解决这个问题,可以把以上过程改成以下过程:mSocket.reset(new simgear::Socket());mSocket->open(false)mSocket->setBlocking(false);mSocket->setBroadcast(true);mSocket->bind(“0.0.0.0.”, rxPort)Flightgear支持4个输入方式:鼠标输入键盘输入游戏杆输入事件输入对应的子系统分别为:FGMouseInput、FGKeyboardInput、FGJoystickInput、FGEventInput 这几种输入的处理方式大同小异,本文以键盘输入为例,分析flightgear是如何响应键盘消息,以及如何自定义键盘消息。
flightgear处理键盘消息分为以下3个过程:1.加载配置文件,配置文件包括"preferences.xml",“(your_aircraft)-set.xml/(your_aircraft)-set-common.xml”等。
其中键盘的配置信息在/input/keyboard节点内2.FGKeyboardInput的初始化,也即flightgear注册按键响应函数3.FGKeyboardInput 的postinit过程,也即绑定按键到对应对象(该对象实现具体的按键响应过程)具体的流程图如下:下面来具体看看flightgear是如何响应按键:以777-20飞机为例,在飞机的配置文件中注册了Ctrl-L按键消息:<key n="12"><name>Ctrl-L</name><desc>toggle cabin lights</desc><binding><command>property-toggle</command><property>controls/lighting/cabin-lights</property></binding></key>处理过程如下:1.窗口接收到按键信号2.窗口任何查询按键注册函数3.按键注册函数根据按键的类型,得到对应的FGButton,FGButton触发绑定对应的处理函数fire4.在处理函数中通过<command>property-toggle</command>的property-toggle查找命令,得到的命令为:do_property_toggle5.传入该按键的属性节点处理:do_property_toggle(&property)最后来谈谈如何注册自己的按键消息,该过程如果抛开nasal来说,过程是比较简单的:1.首先定位文件,一般来说在飞机的配置文件中注册比较合适,对于777飞机来说,可以在777-set-common.xml中注册2.复制上面xml内容,修改按键的ascii、响应命令,如<key n="65"><name>A</name><desc>toggle cabin lights</desc><binding><command>property-toggle</command><property>controls/lighting/cabin-lights</property></binding></key>这时按键'A'也可以到达CTL-L的效果。
最后,如果大家更深入的了解,可以跟进以下几方面知识:1.nasal脚本(flightgear内嵌编译器的一种脚本语言)2.flightgear支持的命令以及对应的字符串。