当前位置: 首页 > news >正文

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)

相关文章:

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

文章目录 一、软件配置二、FlightGearMATLAB联合仿真第一步 复制文件第二步 新建文件夹第三步 打开demo第四步 demo说明第五步 打开Simulink第六步 连接FlightGear第七步 设置FlightGear第八步 生成FlightGear连接文件FlightGear的设置Network的设置File的设置生成.bat文件 第九…...

深入 Java 基础 XML:高级特性与最佳实践

在上一篇文章中,我们对 Java 基础 XML 有了一个初步的认识,了解了 XML 的基本结构以及在 Java 中常见的解析方式。今天,我们将进一步深入探讨 Java 与 XML 的结合,包括一些高级特性和最佳实践。 一、XML 命名空间 在复杂的 XML …...

【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective

学习体会: ISCA会议近五十年文章分析, 了解论文热点方向, 处理器依旧是热点! AI和并行是大趋势, 做XPU相关目前来说还是热点~ 摘录自原文 摘录: 数据来源和分析方法: 作者收集了 ACM 数字图书馆中所有 ISCA 论文,并使用 DBLP、Google Schol…...

TVbox源贡献指南

欢迎各路大佬踊跃提PR,分享爬虫代码。 源码仓库地址 https://github.com/lushunming/AndroidCatVodSpider 快速开始 本工程是一个完整的AndroidStudio工程,请你用AS打开编辑。 工程调试完毕后要需要导出生成jar文件配合软件使用,执行根目…...

qt数据类型定义(包含签名)

先推荐一个处理markdown表格的网站,超级好用:markdown表格处理,我就是用这个表格处理的excel中的数据上传。 下表整理了数据类型的值范围、签名、qt如何定义等内容。 类型范围/子类型dbus签名qt支持的签名qt类型定义方式转换为variantint8(…...

docker逃逸总结

一、 检查是否在docker容器中 通过以下两个地方来判断 # 是否存在此文件 ls -al /.dockerenv# 在其中是否包含docker字符串 cat /proc/1/cgroup除了上面两种外还有其他方式判断,如检测mount、fdisk -l查看硬盘 、判断PID 1的进程名等也可用来辅助判断。 容器逃逸…...

MySql:表的操作

目录 创建表 查看创建表时的信息 查看表的结构描述 删除一张表 修改表 创建表 CREATE TABLE [IF NOT EXISTS] table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; field 表示列名 datatype 表示…...

LVGL9 开关控件 (lv_switch) 使用指南

文章目录 前言主体1. **控件概述**2. **控件的样式和组成部分**3. **使用控件**改变开关状态 4. **事件处理**5. **按键支持**6. **示例代码** 总结 前言 lv_switch 是 LittlevGL 提供的一个开关控件,外观类似一个小型滑块,常用于实现开关功能&#xff…...

fastadmin 登录退出忽略中间提示页面

背景 研究了一圈CMS,从fastadmin、easyadmin、buildadmin、onethink等等几乎所有的框架CMS,当然也包括若依。 最后,根据当前项目综合考虑,还是选择的fastadmin: 预算经济实惠、维护成本低;工期端&#x…...

游戏引擎学习第36天

仓库 :https://gitee.com/mrxiao_com/2d_game 回顾之前的内容 在这个程序中,目标是通过手动编写代码来从头开始制作一个完整的游戏。整个过程不使用任何库或现成的游戏引擎,这样做的目的是为了能够全面了解游戏执行的每一个细节。开发过程中&#xff0…...

准确率99.9%的离线IP地址定位库 ip2region - python 示例

简介:ip2region是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。号称准确率99.9%的开源离线IP地址定位库。 历史攻略: Python:暴力破解密…...

wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库

wordpress网站使用Linux宝塔面板添加mysql数据库,使用phpMyAdmin工具导入sql数据库文件,会有最大限制50M。即使把sql数据库文件压缩为gzip或zip压缩包,压缩包也超过50M,该怎么办?怎样导入超过50M数据库呢? …...

开发基础(3):开发应用沉浸式效果 组件安全区方案

什么是沉浸式效果 典型应用全屏窗口UI元素包括状态栏、应用界面和底部导航条,其中状态栏和导航条,通常在沉浸式布局下称为避让区;避让区之外的区域称为安全区。 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感…...

Python中的数据可视化实战

一、前言 数据可视化是数据分析和报告中不可或缺的环节,它能够帮助我们直观地理解数据规律。Python提供了多个强大的可视化库,如Matplotlib、Seaborn、Plotly等。本文将通过实例演示这些工具的基本用法和高级技巧。 二、Matplotlib基础 1. Matplotlib的基本用法 import ma…...

计算机毕设-基于springboot的甜品店管理系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…...

SpringMVC纯注解快速开发

此文章适合具有一定的java基础的同学看哦,如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发,易懂、快捷、迅速,从0开始搭建,很快就能构建起一个SpringMVC项目,能学到两种使用tom…...

【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理

一个电商平台可能需要一个数据库来存储用户信息,另一个数据库来存储订单信息,甚至可能还有一个数据库用于数据分析。这种情况下,如何在Spring Boot应用中实现多数据源的管理就显得尤为重要。 1. 多数据源管理的重要性 在实际应用中&#xf…...

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…...

黑马点评项目测试总结

黑马点评项目测试面经总结: 一,怎么使用使用Postman进行接口测试? 1,安装Postman 2. 创建请求: 打开Postman,点击"New"按钮创建一个新的请求。在弹出的窗口中,选择请求的类型&#x…...

【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面

0x00 前言 朋友做标书,需要用到每日温度,他的老板让在这个网页手动复制做一个长期表出来:http://www.tianqihoubao.com/lishi/nanjing/month/202412.html 想着帮个忙,做个爬虫脚本吧,忽然发现这个页面很有意思&#xf…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

如何在网页里填写 PDF 表格?

有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据&#xff…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...