FlightGear+MATLAB+飞行手柄实现实时飞控视景系统

文章目录

  • 一、软件配置
  • 二、FlightGear+MATLAB联合仿真
    • 第一步 复制文件
    • 第二步 新建文件夹
    • 第三步 打开demo
    • 第四步 demo说明
    • 第五步 打开Simulink
    • 第六步 连接FlightGear
    • 第七步 设置FlightGear
    • 第八步 生成FlightGear连接文件
      • FlightGear的设置
      • Network的设置
      • File的设置
      • 生成.bat文件
    • 第九步 启动FlightGear
    • 第十步 FlightGear+MATLAB联合仿真
  • 三、飞行手柄的连接
  • 四、Notice
    • 4.1 MATLAB与FlightGear的连接方式
      • 第1种方式
      • 第2种方式
    • 4.2 修改模型的方式
    • 4.3 地景地图的下载
  • 参考文章

一、软件配置

说明本篇文章使用的配置:

  1. MATLAB 2018b;
  2. FlightGear 2020.3;
  3. Windows 11。

MATLAB的安装不再赘述,网络上的教程很多。FlightGear请前往官网(https://www.flightgear.org/)下载,点击Download,找到Windows版本,选择FlightGear 2020.3 For Windows进行下载。至于使用Linux和Mac的朋友,自行选择对应系统的FlightGear下载即可。
在这里插入图片描述
点击之后进入SourceForge,等待5秒钟之后自动下载。

在这里插入图片描述
FlightGear-2020.3.19.exe下载完毕后,双击该程序安装FlightGear,一路点击Next或者Install即可。
在这里插入图片描述
这里没有中文可以选,就用英文了。

在这里插入图片描述
这里记得选择接受该许可证。

在这里插入图片描述

后面的步骤一直点击Next或者Install即可,注意安装FlightGear的安装路径,安装到一个自己记得住的位置。

至此,FlightGear安装完毕。

二、FlightGear+MATLAB联合仿真

第一步 复制文件

需要把MATLAB里面的..\MATLAB R2018b\toolbox\aero\astdemos文件夹全部复制一份到FlightGear里,FlightGear文件夹位置为...\FlightGear 2020.3\data\Aircraft里。

在这里插入图片描述

第二步 新建文件夹

(可选)为了查看方便,可以自己新建一个文件夹,我起名为FlightGear_Simu,大家按自己喜好取名就好。建一个新文件夹的目的是为了自己好找到MATLAB的demo,不然它藏在电脑的犄角旮旯里,很难找到。

第三步 打开demo

在MATLAB命令行里输入

asbhl20

MATLAB里面有一个与FlightGear联合仿真的demo,用的是NASA HL20飞行器,我们只需要调用这个demo学习就好。上面的代码就是调出来这个demo的命令。

第四步 demo说明

输入指令之后,会在MATLAB里面弹出来下面这样的界面。

在这里插入图片描述
上方红框区域为asbhl20的文件,说明了demo所有使用到的文件。

下方红框区域告诉了我们这个demo的位置,找到这个文件夹的位置,即../MATLAB\Projects\slexamples\asbhl202。这里最后的asbhl202的第3个文件夹,因为之间我创建过2个相同的demo了。如果大家是第一次调用asbhl20demo的话,它的文件夹名字是asbhl20。所以如果看见和我不一样的文件夹名字,请不用疑惑。

把文件夹../MATLAB\Projects\slexamples\asbhl202所有文件复制到前述步骤中新建的文件夹FlightGear_Simu里。如下图所示。

在这里插入图片描述

第五步 打开Simulink

打开asbhl20.prj,会弹出来下图所示的Simulink界面。

在这里插入图片描述

第六步 连接FlightGear

看见右上角红色边框的FlightGear Install FlightGear了么,现在要打开它,调出来下图所示界面。

在这里插入图片描述
这个界面分成了4个step。

Step 1:下载并且安装FlightGear。这一步我们之前已经做过了,所以不用再做。

Step 2:设置FlightGear路径。把之前安装FlightGear的路径填进去即可。

Step 3:检查路径是否正确。设置好路径之后,点击这个按钮,它会自动检查路径有没有设置正确。设置正确了才能进行Step 4。

Step 4:打开FlightGear。这个Step可以不用做,等到下一步再打开。我们不要从这里打开FlightGear,因为有一些必要的参数还没有设置好,等把所有参数设置好之后,再打开FlightGear。

第七步 设置FlightGear

再回到Simulink界面。
在这里插入图片描述
注意到FlightGear Install FlightGear下面的Viewer and Feedback了么,点这个框里的下箭头。进入下图所示界面。

在这里插入图片描述
再点击红框内的模块,进入如下所示界面。

在这里插入图片描述

第八步 生成FlightGear连接文件

FlightGear的设置

选中左上角的GEN FG RUN模块,双击这个模块,得到如下图所示的界面。

在这里插入图片描述
首先要设置的是FlightGear的基础参数,在Parameters区域里面,Select target architecture选择default选项,Select FlightGear data flow选择Send-Recieve选项。这里我觉得选择Send也可以,因为只有Simulink给FlightGear传输数据,FlightGear不会给Simulink传输数据,所以Simulink可以不用recieve数据。不过因为这是demo的缺省值,就不再动它了。

  • FlightGear geometry model name:要使用的飞行器模型名字,需要和xxx-set.xml一致,demo这里就是需要与HL20-set.xml一致;
  • Airport ID:机场编号,这里缺省值为KSFO机场;
  • Initial altitude:初始高度,单位为英尺(ft);
  • Initial heading:初始朝向角,单位为度(deg);
  • Offset distance:偏移距离,单位为英里(miles);
  • Offset azimuth:偏移方位角,单位为度(deg)。

上述设置demo已经设置好了,不用更改任何设置。

值得一提的是,Install FlightGear scenery during simulation (requires Internet connect...这个选项最好勾选上。因为第一次打开FlightGear时,很有可能没有地景图片,导致启动FlightGear后显示不了地面。勾选这个选项之后,它会在第一次打开FlightGear的时候,自动下载地景。**这个选项要求具备必须的网络条件。**如果没有,请看第4.3节所述方法。

Network的设置

再进入Network的设置,点击Network,得到下图所示界面。

在这里插入图片描述

  • Destination address:FlightGear所在计算机的IP地址,如果有多台计算机同时仿真,要填写FlightGear所在计算机的IP地址。
  • Origin IP address:Simulink所在计算机的IP地址,缺省值为127.0.0.1,即FlightGear和Simulink都在一台计算机上运行。如果有多台计算机同时仿真,要填写Simulink所在计算机的IP地址。
  • Destination port:UDP通信端口,即FlightGear监听的端口,用于接收来自Simulink的数据,需要与FlightGear配置中设置的端口一致,以便正确接收数据。从5501开始,这里设置的是5502。
  • Origin Port:Simulink发送数据到FlightGear所使用的端口,Simulink一般会自动生成。

上述端口必须确保没有被其他软件占用。

File的设置

最后进入File的设置,点击File,得到下图所示界面。

在这里插入图片描述

  • Output file name:生成的FlightGear运行脚本的文件名,启动FlightGear模拟器的命令脚本,包含所有必要的初始参数和设置,可自己定义文件名。
  • FlightGear base directory:指定FlightGear安装的基本目录,即FlightGear的主文件夹路径,在第六步已经设置完毕。

生成.bat文件

经过上面三部分的设置,最后需要生成.bat文件,用以启动FlightGear。点击上图中Parameters部分的Generate Script按钮,即可在../FlightGear_Simu/work(自己新建的文件夹,还记得之前的内容吗)里生成一个名为runfg.bat的批处理文件。

第九步 启动FlightGear

现在要启动FlightGear,假设刚才大家已经设置好了所有FlightGear参数,并且没有关闭Simulink。找到刚才生成的runfg.bat文件,双击,它会自动打开FlightGear,如下图所示。
在这里插入图片描述
等待几秒钟后,进入FlightGear。

在这里插入图片描述
可以看见地面上已经有场景了,说明我们成功地下载好了地景。但是还没有显示飞行器,按v键转换视角,即可显示飞行器。

在这里插入图片描述

注意:假如按v键没有反应,很有可能因为计算机正在使用中文输入法,请切换到英文输入法再按v键切换视角。

第十步 FlightGear+MATLAB联合仿真

回到Simulink,点击运行。即可看见Simulink在运行的同时,FlightGear的场景也会随之变化,直至飞行器成功降落至机场。

在这里插入图片描述

至此,大功告成。

三、飞行手柄的连接

我们使用的手柄是罗技X56,如下图所示。

在这里插入图片描述

左边是油门,右边是飞行摇杆。摇杆可实现六轴自由度。

在Simulink连接X56,要用到组件库中Joystick Input模块。

在这里插入图片描述

这里要使用的是飞行摇杆来控制飞行器姿态,所以只需要用到Axes的输出即可。Axes的输出是5维的,用demux分成5维即可。唯一需要提醒的就是,第1维控制的是俯仰角,第2维控制的滚转角,第5维控制的是偏航角,第3、4维没有用到。

至于Buttons的使用,可以从Joystick InputButtons接一个display,观察按下不同按钮的时候display里面的值怎么变化。之后可以用作标志位。

四、Notice

4.1 MATLAB与FlightGear的连接方式

MATLAB与FlightGear连接有2种方式。

在这里插入图片描述

第1种方式

数字“1”红框中带有摄像机的模块是第1种。输入信息为经度、纬度、高度(前三者单位为度数)和三轴角速度(单位为弧度),数据类型均为double类型。我们一般得到的都是XYZ三维坐标,需要把该三维坐标转换为经纬度。

FlightGear Preconfigured 6DoF Animation模块在Simulink中只能存在一个,因为模块里包含了一个Set Pace模块。有FlightGear Preconfigured 6DoF Animation模块,Simulink也只会生效一个 。

第2种方式

数字“2”红框中的Pack net_fdm Packet for FlightGear模块和Send net_ctrl Packet from FlightGear模块是第2种。输入信息为经度、纬度、高度和三轴角速度(单位皆为弧度),经度、纬度和高度的数据类型为double类型,三轴角速度的数据类型为single类型。注意数据类型之间的转换关系。

当然,也可以选择更多要输出到FlightGear里的数据,如下图所示。

在这里插入图片描述

还要注意一点的就是,要输出到FLightGear的数据要先进入Pack net_fdm Packet for FlightGear模块,再从Pack net_fdm Packet for FlightGearpacket接口接到Send net_ctrl Packet from FlightGear模块里。
像这样。
在这里插入图片描述

至于数字“3”红框中的GEN FG RUN模块则是不论用哪种方法,都需要配上的模块。

4.2 修改模型的方式

../FlightGear 2020.3\data\Aircraft里会有HL20模型的出现。

在这里插入图片描述

点进去会有一个HL20-set.xml文件,里面规定HL20模型的必需参数,要修改模型外观,就需要点开HL20->Models->HL20.ac,用AC3D软件打开这个.ac文件,按需修改即可。

在这里插入图片描述
在这里插入图片描述

要记得把修改后的.ac文件修改名字,然后在xxx-set.xml里面把相应的名称换成修改后的名字。

举个例子,我要做个导弹的模型,那么可以拿HL20.ac作为母本,用AC3D打开它然后修改,修改完毕后保存为Missle.ac。随后,记得在HL20-set.xml里,把所有HL20全部替换为Missle

至于文件夹里的thumbnail.jpghl20_glass.png是HL20飞机的纹理文件,可以不用理他。

4.3 地景地图的下载

在官网(https://www.flightgear.org/)里选择Download,找到Download Scenery那一项,点进去。建议下载v1.0.1,占用的空间不大,足够使用。

在这里插入图片描述

点击红框部分,进入到下面的界面。

在这里插入图片描述

它是以经纬度为划分准则。

  • “e”代表东经;
  • “w”代表西经;
  • “n”代表北纬;
  • “s”代表南纬。

根据自己的需要,找到对应机场的经纬度,下载相应的地景包就好了。下好的文件是.tgz格式的,下载好之后,把它解压,再把解压后的文件放到../FilghtGear 2020.3/data/Scenery/Terrain里。像下面这这样子。

在这里插入图片描述

参考文章

[1] matlab与flightGear联合仿真. (https://blog.csdn.net/zhengluanfeng1985/article/details/104776644)

[2] 【Matlab】详解Simulink中的Joystick Input模块(介绍+测试+应用). (https://blog.csdn.net/qq_40344790/article/details/118079923)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/63342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang并发编程模型之actor(一)

前言 多线程/进程编程是每个程序员的基本功,同时也是开发中的难点,处理各种“锁”的问题是让人十分头痛的一件事。 Actor模型,在1973由Carl Hewitt定义,被Erlang OTP推广,其消息传递更加符合面向对象的原始意图。Actor…

Android13 允许桌面自动旋转

一)需求-场景 Android13 实现允许桌面自动旋转 Android13 版本开始后,支持屏幕自动旋转,优化体验和兼容性,适配不同屏幕 主界面可自动旋转 二)参考资料 android framework13-launcher3【06手机旋转问题】 Launcher默…

vue2:el-select中的@change事件如何传入自定义参数

在 Element UI 中,el-select 组件用于创建一个下拉选择框。当选项发生变化时,你可以使用 @change 事件来监听这个变化。默认传入的是选中项的值(如果是多选,则传入一个数组) 但是有些时候需要传入额外的自定义参数,可以通过如下方式实现 1、template中定义事件响应函数时…

Go 1.19.4 HTTP编程-Day 20

1. HTTP协议 1.1 基本介绍 HTTP协议又称超文本传输协议,属于应用层协议,在传输层使用TCP协议。HTTP协议属是无状态的,对事务处理没有记忆能力,如果需要保存状态需要引用其他技术,如Cookie。HTTP协议属是无连接的&…

Tomcat使用教程

下载地址:https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…

WPF+LibVLC开发播放器-LibVLC在C#中的使用

LibVLC在C#中的使用 安装包Nuget使用控件使用播放器初始化加载视频文件 视频教程: 使用WPFLibVLC快速开发一个播放器 安装包Nuget 安装下面两个包,必须安装两个 一个是相关框架对应的包,Winform就安装LibVLCSharp.Winform;WPF就安装LibVLCSharp.WPF&am…

[创业之路-173]:《BLM战略规划》- 战略洞察 (战略能力中最最核心的能力) - 市场洞察 -3- 看竞争对手-要比你的竞争对手跟了解他们自己

目录 一、五看三定 二、看竞争 2.1 概述 1、分析竞争对手 2、进行价值链分析 3、紧盯标杆对手 4、关注新进入者和替代产品 5、制定竞争策略 2.2 看竞争的主要内容:背景信息、战略、价值定位、价值链、价值交付、组织架构、财务绩效 1、背景信息 2、战略 …

Mysql - 存储引擎

一 MYSQL体系结构简介 MYSQL的体系结构可以分为四个层级,从上往下依次为: 1. 连接层: 最上层为客户端以及一些连接服务,包含连接操作,例如JAVA想要与MYSQL建立连接就需要用到JDBC,PHP语言与Python也可以连接到MYSQL&am…

基于MinIO打造高可靠分布式“本地”文件系统

MinIO是一款高性能的对象存储服务,而S3协议是由亚马逊Web服务(AWS)制定的一种标准协议,用于云存储服务之间的数据交换。MinIO与S3协议的关系在于,MinIO实现了S3协议的接口,这意味着用户可以使用与AWS S3相同…

电子应用设计方案-43:智能手机充电器系统方案设计

智能手机充电器系统方案设计 一、引言 随着智能手机的广泛应用,对充电器的性能、效率和安全性提出了更高的要求。本方案旨在设计一款高效、安全、兼容多种快充协议的智能手机充电器。 二、系统概述 1. 系统目标 - 提供快速、稳定、安全的充电功能。 - 兼容主流的智…

vue3项目最新eslint9+prettier+husky+stylelint+vscode配置

一、eslint9和prettier通用配置 安装必装插件 ESlint9.x pnpm add eslintlatest -DESlint配置 vue 规则 , typescript解析器 pnpm add eslint-plugin-vue typescript-eslint -DESlint配置 JavaScript 规则 pnpm add eslint/js -D配置所有全局变量 globals pnpm add globa…

【环境搭建】WordPress本地部署搭建及历史版本插件安装(windows系统)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【环境搭建】WordPress本地部署搭建及历史版本插件安装(windows系统) WordPress搭建环境部署(…

qt QTemporaryFile详解

1、概述 QTemporaryFile类是Qt框架中用于创建和管理临时文件的类。它提供了一个安全且便捷的方式来生成唯一的临时文件,这些文件通常用于存储临时数据,如缓存、草稿或中间结果。QTemporaryFile确保了临时文件的唯一性,避免了文件名冲突&…

Gitee配置以及如何将本地项目提交到远程仓库

文章目录 准备远程仓库配置注册新建仓库 配置git 生成ssh,输入以下命令,然后连敲三次回车键配置公钥本地代码上传 准备 1.本地下载git 2.注册远程仓库账号 远程仓库配置 注册 官网:https://gitee.com 完成注册 新建仓库 头像->设置-…

基于Java和Vue开发的漫画阅读软件漫画阅读小程序漫画APP

前景分析 受众广泛:漫画的受众群体广泛,不仅限于青少年,还涵盖了成年人等多个年龄层和社会阶层。漫画文化在全球范围内的影响力不断扩大,未来漫画软件创业可以考虑全球市场的拓展。 市场需求大:数字化阅读趋势下&…

2024.12.2——[极客大挑战 2019]Secret File 1

知识点:抓包 代码审计 filter伪协议 一、解题步骤 step 1 查看源代码中的信息 查看源代码发现一个php文件:[./Archive_room.php](http://72df1f22-85bf-47bb-b23a-efcaf88701d4.node5.buuoj.cn:81/Archive_room.php) 点进去后发现没什么用&#xff0c…

距离与AoA辅助的三维测距算法,适用于自适应基站数量的情况。订阅专栏后可直接查看完整源代码

本MATLAB 代码实现了一个基于距离与到达角(AoA)的三维测距系统,主要用于在动态环境中估计目标物体的位置。提供本算法与仅侧角(AoA)的定位误差对比 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分AOA定位绘图部分输出部分代码的应用和意义总结代码运行结…

[241206] X-CMD 发布 v0.4.15:env 升级,mirror 支持华为/腾讯 npm 镜像,pb-wayland 剪贴板

目录 X-CMD 发布 v0.4.15📃Changelog📦 env|pkg🪞 mirror📑 pb🎨 theme|starship|ohmyposh🤖 chat📝 man✅ 升级指南 X-CMD 发布 v0.4.15 📃Changelog 📦 env|pkg 新增…

Python办公—DataMatrix二维条码制作

目录 专栏导读1、库的介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…

Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物

前言 在前端开发中,优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标,Tree Shaking 就是其中一种非常重要的优化技术,它通过在编译阶段移除未被使用的代码模块,从而显著减小最终…