话不多说,先看下面Simulink与Flightgear联合仿真的效果:

Simulink与Flightgear联合仿真演示视频

可看到Flightgear中的飞机被simulink模型驱动,去做各种飞行动作,并有相应的舵面运动及螺旋桨旋转效果,也有相应的音效。这种逼真的联合仿真效果,可以辅助我们在动力学建模或者飞控调参时,及时直观地感受到实现的效果,提高我们的工作兴趣和效率。上面视频如果无法直接观看,链接为:https://www.bilibili.com/video/BV14t411E7zQ?p=2

1.联合仿真的主要思想

联合仿真中 Simulink 为主, Flightgear 为副,如上面的视频所示, Simulink 模型产生飞行器的所有状态量(速度,位置,姿态等),由部分状态量驱动 Flightgear 里的飞行器进行视景显示,形象的说,Simulink 是操纵手, Flightgear 是木偶。

本文主要讨论如何在已有 Simulink 动力学模型的时候,如何去搭建和 Flightgear 的联合仿真平台。这其中主要包括如何生成 Flightgear 的启动脚本、 如何将飞行动力学模型中地面固定坐标系下的状态量转换到 Flightgear 接受的地球坐标系下的状态量, 两者之间运动数据的链接关系和如何在 Flightgear 中自定义飞行器模型。

本博客不讲联合仿真中涉及到的详细概念,直接从搭建一个固定翼飞行器的联合仿真开始, 详细记录搭建联合仿真的过程, 至于过程中的概念,会简要介绍,对各个概念详细介绍可以查看fg的wiki或者和我交流,相信通过本章的流程,大家可以了解 Flightgear的基本操作,融会贯通,可以开发其他种类飞行器的联合仿真。

2.联合仿真Simulink 部分说明

本教程不讲飞行动力学建模与控制,因为那是一个比较大的内容, 感兴趣的可以 QQ 上再交流,本次 Simulink 部分的飞行器状态量由 Signal Builder 模块直接给出,用于模拟飞行器飞行,这些状态量将驱动 Flightgear 按预定的方式去运动。 Simulink 的模型结构如图 所示:

其中 Signal Builder 模拟输出飞行器地面固定位坐标系下的三个位置量和三个姿态量(因为大多数飞行动力学模型建立在地面固定坐标系下,并一般将其看作惯性坐标系), Signal Builder1 模拟输出副翼、升降舵、方向舵操纵量及螺旋桨转速。 模拟输入量定义了一个 18s 的飞行过程:

0-1s 静止
1-3s 发动机启动
3-7s 飞机加速
07-10s 飞机爬升后改平飞,并伴有升降舵偏转和俯仰姿态运动
10-14s 飞机右侧飞并回正,并伴有方向舵偏转和偏航姿态运动
14-18s 飞机右滚转并回正, 并伴有副翼偏转和滚转姿态运动
需要说明的是,这只是人为模拟的运动过程,不是严格的飞行动力学模型的状态量输出。 Flightgear_show中包含如何将飞行动力学模型的地面固定坐标系下的状态量转换为地球坐标系的状态量的转换模型,以及将转换后的数据发送给 Flightgear。如图 所示;

其中 Flat Earth to LLA 是将水平地面坐标系的三个位置量转换为地球坐标系下的三个位置量,该矢量有三个分量:经度,维度,海拔。主要有三个参数要填, 原飞行动力学建模时的水平地面坐标系的原点的经纬度和水平地面坐标系的 X 轴方向与地球坐标系的北向的夹角。 本示例选择演示的场景在一个机场跑道处,为了直观,可以让跑道正前方与水平地面坐标系的 x 方向一致,这时就要设置 Direction of flat Earth x-axis(degrees clockwise from north)为跑道与正北方向的夹角,但是这个设置只牵扯到位置矢量的转换, 并不改变机体的转向,这可以在姿态角输入时修正,上图中的偏航姿态角给 Flightgear 输出的时候叠加了 2.058rad,约等于 117.9° (下文会提到这个角度的来源),即跑道与正北的夹角, 因为动力学模型与偏航角无关, 所以偏航角的修正是有依据的,不会对动力学模型有任何影响。
       至于这三个参数怎么来的,可以在 FlightGear\data\Scenery\Airports 文件夹内查到需要知道的指定机场指定跑道的入口处的经纬度、 海拔及朝向信息,比如本示例中选择 KSFO 机场 10L跑道的入口处作为飞行仿真的原点, 可以在FlightGear\data\Scenery\Airports\K\S\F 文件夹下KSFO.threshold.xml 中找到如图所示的跑道信息。

Pack net_fdm Packet for Flightgear 是一个将发送给 Flightgear的 数据打包的模块, 发送的数据可以选择,最简情况下只发送经纬度、 海拔位置和姿态信息。也可以选择更多信息发送, 根据安装的 Flightgear 版本,在设置界面设置相应的 version 选项
       选择了相应数据, Pack net_fdm Packet for Flightgear 模块就会有相应的输入接口,重要的是这些数据可以修改 Flightgear 中 property tree 中的数据, property tree 是 Flightgear 整个软件的数据交换中心,但 property tree 变量的名称和 simulink 的 Pack net_fdm Packet for Flightgear 模块的接受数据的名称不完全相同, 可以通过给Pack net_fdm Packet for Flightgear 模块的某个接口给定输入,在 Flightgear 界面的菜单 debug /browsers properties 查看哪个变量的值发生了相应改变,就可以找到两者的对应关系, 明确的是 Flightgear 里面认可的变量名是 debug /browsers properties 下那些变量,也是 property tree 中变量的名字,我们可以在 Flightgear 的模型配置文件中用这些变量驱动相应运动副运动,即实现了用 Simulink 动力学模型的状态量驱动 Flightgear 内的飞行器运动。

双击 Generate Run Script 模块,首先进行 File 设置,Flightgear base directory处填写 Flightgear 的根目录文件夹(flightgear 安装文件夹内 data 文件夹的上一级文件夹),使启动脚本能够指向Flightgear的安装位置。Output file name处填写启动文件的名称(默认funfg.bat,可接受默认值)。再设 Network,网络设置的目标是, 使安装 matlab 的计算机及安装 Flightgear 的计算机可以通过网络通信,实现一台计算机上运行 Simulink 飞行动力学模型,一台计算机上运行Flightgear 视景显示软件。 对于本机上 Flightgear 和 Simulink 互相传输数据, ip 源地址和目的地址都默认为 127.0.0.1;对于异机需要 ip 无误。 Ip 查找方法为:在 cmd.exe 里输入 ipconfig 查询。因为 Flightgear 即可以接受数据也可以输出数据,所以有 destination/origin ip dress 和 destination port, origin port。再设 Flightgear 参数, Flightgear geometry model name 处填写要模拟的飞行器名称,与Flightgear 安装目录下 data/aircraft 文件夹里的模型文件夹同名, 更准确的说与模型文件夹下的“模型名-set.xml”的模型名同名。Airport id 选择 Flightgear 支持的机场名称。Run id 选择 Flightgear中该机场支持的跑道名称,再设置初始位置等信息。
最后点击 Generate Script 生成启动脚本文件。输出文件就是 Flightgear 的启动脚本文件(保证 matlab 当前工作文件夹是 simulink 模型的文件夹,否则启动脚本文件会生成到默认 matlab 安装文件夹下)

3.联合仿真Flightgear 部分说明

Flightgear 里的飞行器三维模型格式为*.ac 格式,即 AC3D 软件建立的三维几何模型格式。1)可以用 AC3D 软件直接建立飞行器模型, 2)也可以将已有的其他格式的飞行器三维模型,转换为stl 格式,然后导入到 AC3D 软件内并另存为 ac 格式使用, 3)或者还可以直接将 fg 自带的结构相似的飞行器在 AC3D 里修改成所需飞行器模型,本文采用第三种方法, 快速建立了飞行器的几何模型并对齐运动副进行了定义。飞机几何模型用了如下图所示库里的现有机型,并修改了一些参数。

为了仿真的逼真,除了机体的位置、 姿态变化,还要飞行器的各个运动副也做相应运动。 该飞行器有三个方向舵和一个螺旋桨共四个运动副, 三个方向舵分别为滚转通道的副翼,俯仰通道的升降舵,偏航通道的方向舵。三个方向舵和螺旋桨要被驱动,需要通过 Simulink 传递相应的变量给 Flightgear, 本次用Pack net_fdm Packet for Flightgear模块的rpm 数组的四个分量驱动, rpm 本是描述发动机组的转速,但运动副定义重要的是实现运动副驱动,不必在意到底是simulink中何变量驱动的, rpm_engines 变量默认为 4, 表示 rpm 数组长度为 4。
       运动副驱动的核心思想就是用变量驱动,此时 Simulink 里的数据是发送出来的数据,它的变量名可能和 Flightgear 里接受变量的变量名不一致,需要在 debug 菜单栏里查看。 Fg 里运动副配置文件控制运动副的变量为 fg 接收变量的变量名。而不是 simulink 发送时的变量名。用debug内对应的变量名,在flightgear的models文件夹下的xml配置文件,定义运动副。然后该flighgear内的飞机就可以被simulink所驱动。

4.写在最后

总之,联合仿真可以让simulink动力学模型形象化,直观化,其不仅仅是动力学模型建立完成之后,接一个flightgear进行视景显示。结合本人之前的飞行动力学建模及控制开发过程,一开始,就会搭建这套联合仿真,方便后续的建模及控制调参过程中,随时可以看到直观的仿真或控制效果,帮助我们快速高效地建立模型和控制调参。
      本文档没有对飞行动力学建模展开介绍,感兴趣的可以和我在 QQ 上继续交流这方面的内容, 后续关于 Flightgear 有使用方面的问题,也可以联系我,本文档写作共经过了三个大的改版,第一版本是我研究生时候用了一个暑假查看了很多 Flightgear 官方的英文文档,把联合仿真走通时,记录的笔记,后来在给师弟和别人的使用中发现内容较为零散。又写了第二版,用了 Bo105 的 fg 模型,文档写了如何修改 bo105 模型,然后可以被 simulink 驱动,后来发现写的也不是很清楚。第三版是我硕士毕业之后开始写的, 我的想法是仿照商业软件的帮助文档一样,用一个简单的例子把整个过程走通,并把过程详细记录下来,可以容易复现,也可以在建其他联合仿真时更具参考价值。当然可能还有各种问题,希望大家批评指正。有需要详细文档报告(27页)和联合仿真的simulink模型和flightgear模型的同学,可以联系我。
我的 QQ: 2389586771

Simulink与Flightgear联合仿真详细教程相关推荐

  1. quartus和modelsim联合仿真详细教程

    利用quartus和modelsim联合仿真的功能,实现功能产生波形.详细步骤如下: 1.编辑verilog HDL语言 本次拟实现组合逻辑功能,其代码如下: 此为一组合逻辑电路,其原理图可在quar ...

  2. matlab中simulink和flightgear联合仿真

    本人亲自整理的文档,适合二次开发 其中包含pid控制等一系列模块 文档包含每个模块的详细介绍 想要可私聊

  3. 使用Solidworks、ADAMS、Simulink进行机电联合仿真

    我在做课设.大作业的时候经常要做机电联合仿真,这个过程中遇到了许多不同的困难,现在将这些问题记录下来,以备不时之需,也能和同志们分享学习. 后来的补充:强烈建议没有强制要求的同志不要用ADAMS仿真了 ...

  4. Simulink AMEsim TruckSim 联合仿真

    Simulink & AMEsim & TruckSim 联合仿真 AMESim实现精细化建模,Trucksim/CarSim 实现整车运行状态参数及典型仿真工况,Simulink 搭 ...

  5. opencv、opencv_contrib及cuda联合编译详细教程

    opencv.opencv_contrib及cuda联合编译详细教程 最近在使用opencv时需要用cuda加速,网上了很多帖子,踩了很多雷,摸索出来了一点规律,分享给大家,一起探讨(我也是刚刚入手, ...

  6. 我在simulink与adams联合仿真中遇到关于Error in Adams(server) simulation startup问题及解决办法。

    我在simulink与adams联合仿真中遇到关于 Error reported by S-function 'adams_plant' in 'adams_sys_/adams_sub/ADAMS ...

  7. simulink与modelsim联合仿真buck闭环设计

    simulink与modelsim联合仿真buck闭环设计 主电路用simulink搭建,控制电路完全有verilog语言实现(包括DPWM,PI补偿器) 适用于验证基于fpga的电力电子变换器控制, ...

  8. Simulink和Carsim联合仿真车辆状态估计 卡尔曼滤波的EKF,UKF,CKF等

    Simulink和Carsim联合仿真车辆状态估计 方法:卡尔曼滤波的EKF,UKF,CKF等 系统的输入量:前轮转角,纵向加速度,侧向加速度等(可以自由定义) 估计的状态量:横摆角速度,质心侧偏角, ...

  9. Linux下VCS与Verdi联合仿真简易教程及例子示范

    VCS与Verdi联合仿真简易教程及例子示范 最近在公司实习,最近也恰好在学习Linux下的IC设计环境,涉及到了VCS与Verdi联合仿真等内容,也切身感觉到,和学校学习的内容是如此的不同,此篇便来 ...

  10. Simulink与VREP联合仿真

    软件: ppeliaSim Edu 4.0.0 (VREP的升级版本)具有集成开发环境的机器人模拟器CoppeliaSim基于分布式控制体系结构:每个对象/模型都可以通过嵌入式脚本,插件,ROS或Bl ...

最新文章

  1. python爬取百度文库付费文档_亲测免费转换百度文库付费文件
  2. 03_4_this关键字
  3. leetcode-简单题-题序:9+13
  4. python 将字符串作为变量名
  5. 本周NLP、CV、机器学习论文精选推荐
  6. getSerializableExtra
  7. android 多个style,Android样式的开发_style篇
  8. CodeBlocks17.12+汉化包下载及用法
  9. Visual C++ 2011-5-18
  10. VSS 2005配置,很详细
  11. SpringBoot学习之一 Unable to find a single main class from the following candidates
  12. Spring boot 2.x + Thymeleaf 公共部分抽取
  13. WindowBuilder的使用----java前端的重要框架
  14. 【线性代数·浅学】(一)行列式——n阶行列式定义,行列式性质,行列式展开定理,拉普拉斯定理,范德蒙德行列式,克拉默法则
  15. (考试大整理~)Xxy 的车厢调度
  16. 长沙黄花机场大巴车及公交车运行路线与时刻表
  17. 《杭州区块链行业发展报告》披露市场现状
  18. Python 图_系列之纵横对比 Bellman-Ford 和 Dijkstra 最短路径算法
  19. iOS小技能:合并mp3格式的文件
  20. Matlab绘图常用设置及函数

热门文章

  1. matlab实验 信号处理,数字信号处理MATLAB实现与实验
  2. Java程序编程题作业-练习-Java编程题_一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第 10 次落地时
  3. Java数据库编程基本配置
  4. 使用java实现数据库编程 第一章:数据库的设计
  5. VC6.0建立新工程的步骤---解决win11使用不了VC6的方法以及自用版本VC6下载
  6. 芯片介绍:CC2530
  7. Python基本语法
  8. 【C++】简易GIF生成器(斗图神器!必备!!!)持续更新~
  9. MySql常用函数大全(详细)
  10. 个人电脑防止被入侵的设置方法。