揭秘!自定义三维模型如何在RflySim中实现仿真(二)

一. 技术背景

揭秘!自定义三维模型如何在RflySim中实现仿真(一)

上篇文章我们学习了自定义三维模型如何在RflySim中实现仿真,接下来要学习三维场景导入RflySim的实验:将UE4自带场景导入RflySim平台,熟悉从UE4中烘焙场景并导入RflySim3D和CopterSim的流程,需要根据实际情况和仿真目的创建逼真的环境。

这包括地形的建模、添加建筑、道路和其他地物等。还可以考虑天气、光照和其他环境因素,以便更真实地模拟无人系统的运行环境。在三维仿真软件中根据需要创建模拟场景,这需要包括对象的布局、灯光设定、镜头设置等。系统中三维仿真场景的绘制结构如下图所示,通过该图可以看出组成整个三维仿真场景的两大模块:场景建模和载具建模。

图片

二.实验原理

在UE项目中已处理完成的场景有三种:UE默认场景、虚幻商城购买的场景以及从其它UE项目中迁移来的场景。这些场景直接在UE中烘焙完成即可导入RflySim3D,RflySim3D中完整的仿真场景需要三部分信息:烘焙好的场景文件(”****.umap”)、地形高程信息(“****.png”)以及地形校准数据(“****.txt”)。

烘焙是指生成静态光照贴图以提高场景的视觉质量的构建过程,全部可用于虚幻引擎4项目的构建操作可参考构建操作:烘焙、打包、部署与运行虚幻引擎文档(unrealengine.com)。

每个”****.umap”(烘焙前后有区别)地图文件对应了一个独立的三维场景,RflySim3D会自动扫描平台安装路径:

【RflySim平台安装目录】\PX4PSP\RflySim3D\RflySim3D\Content目录下所有的.umap并自动导入。

为了将RflySim3D中的场景与CopterSim联动以支持之后的仿真流程,需要将场景的地形数据导入CopterSim。上述png地形文件实际上是以图片形式存储的二维矩阵,包含了场景的高程图,以png格式存储矩阵能够很好的实现高程矩阵的压缩,便于节省空间。png的高程文件并不包含坐标原点、缩放尺度、场景范围等信息,因此需要一个校正文件,RflySim平台采用txt格式输入9维数组传入校正信息。平台中txt校正文件存储的是右上角三维坐标点(xy全为正,z向上为正)、左下角三维坐标点(xy全为负,z向上为正)、第3点三维坐标点,单位均为厘米。前两个点的目的是为了确认地形的范围和中心坐标,第3点坐标可自行选取,理论上需要尽量在高度上与前两个点有落差,用于校正高度尺度。

三. RflySim3D案例介绍(UE4默认场景导入实验)

本实验所用到的三维场景、飞机模型等较大文件均已上传至百度网盘,请在实验前进行下载,下载完成后进行解压,放入本例程文件夹中(注:请勿修改文件夹名称)。

下载链接:https://pan.baidu.com/s/1LwyBMQo78YiK3PnMf0nlMg?pwd=6fpr提取码:6fpr

1.在UE中创建场景并烘焙

首先启动UE创建一个游戏项目

图片

任意选择一个模板(我们只是需要使用它编辑一个场景,不需要其它逻辑,这里选择空白模板即可)

图片

图片

在下方的“内容浏览器(ContentBrowser)”中定位“Content\StarterContent\Maps”(如果选择了“含初学者内容包”就会有这个路径),并双击打开Minimal_Default关卡,可以看到三维场景已被打开。按住鼠标右键配合使用WSADQE可以在场景中自由移动与旋转,查看整个场景。

图片

为避免干扰,可以删去另外4个文件,前往Windows的文件资源管器“项目路径\Content\StarterContent\Maps”下看到与UE的内容浏览器中剩下的2个文件对应的文件:

图片

上面第一个“.umap”文件即为刚刚展示的三维场景,每个.umap文件对应一个独立的三维场景;第二个“BuildData”是用于构建该场景的一些信息(主要是光照信息),但并不是有它们就行了,它会引用其他的文件。例如场景中的桌子、椅子,它们都是存储于其他文件中的(StartContent\Props),但需要先烘焙。

编辑->项目设置->打包中确保如下设置(这是为了节省译时间),然后在文件->烘焙Windows的内容进行烘焙,直到UE在右下角显示烘焙成功。

图片

*特别注意:烘焙完拷贝出来后不能再修改文件和文件夹的名字,重命名只能在UE编辑器中进行。

可以在【该工程文件夹】\Saved\Cooked\WindowsNoEditor\【工程名】\Content\StartContent,找到刚刚的场景Maps,直接将整个StartContent都复制到RflySim3D的Content目录下

即“【RflySim平台安装目录】\PX4PSP\RflySim3D\RflySim3D\Content”

RflySim3D启动时会扫它的Content目录下所有的.umap文件并自动导入。然后就能使用快捷键“M”看见这个新地图了。

 2.给CopterSim添加地形文件

此时只是RflySim3D导入了这个地图,但目前CopterSim对此还一无所知,它需要与此地图相关的2个文件:指示地图的高度图文件“【地图名】.png”,指示地图大小的文件“【地图名】.txt”,通过RflySim3D定义的一个命令来获得。

打开RflySim3D,按“M”切换到刚刚导入的场景中,先按下键盘左上角的`键

输入命令“RflyScanTerrainH p1 p2 p3 p4 p5 p6”,回车,其中p1~p6(单位米)分别表示需要扫描区域的左下角X左下角Y右上角X右上角Y高度H间隔I,其中H(向上为正)要高于地形最大高度、间隔I决定了点的密度,单位均为米,间隔越小,CopterSim获取地形高度的精度就更高。

例如:命令格式“RflyScanTerrainH-10-101010100.1”,表示地形扫描X从-10米到10米,Y从-10米到10米,在10米的高度面向下扫描,采样点,间隔0.1m。(注意,UE中的坐标单位是厘米),如果显示“Successfully Generate terrain file”,则表示成功了,并在RflySim3D的根目录下可以看见这两个文件。

图片

图片

图片

把它们拷贝到CopterSim的地图目录:

【RflySim平台安装目录】\PX4PSP\CopterSim\external\map

这时CopterSim能识别该地图并且获得地图高度数据,在CopterSim中切换场景时,它会用UDP广播给UE切换场景的命令。

图片

RflySim3D在扫描地图、获取“地图名.png”与“地图名.txt”两个文件时,会将场景中的房屋、桥梁等可以进入内部的物体也作为地形一起扫描,如果需要进入它们,那么需要先将这些东西移除出场景,导入RflySim3D扫描得到“地图名.png”与“地图名.txt”后,再将场景还原导入RflySim3D。这样CopterSim在获取三维场景的高度时就不会认为它们也是地形了。

3.最后效果

此文件目录下有一个已经完成的例程,地图名为“StartContent”,将StartContent文件夹放入【RflySim平台安装目录】\PX4PSP\RflySim3D\RflySim3D\Content目录下

再将StarterContent.png与StarterContent.txt放入【RflySim平台安装目录】\PX4PSP\CopterSim\external\map目录下即可

再打开RflySim3D,按下M+16,即可切换到第16号地图StarterContent。

图片

更多相关三维场景导入实验如下所示(需安装RflySim平台)

1. UE5 默认场景导入实验:【RflySim安装路径】\PX4PSP\RflySimAPIs\3.RflySim3DUE\0.ApiExps\e0_DevToolsUsage\4.UE5StarterContent;

2. Twinmotion 演示场景导入实验:【RflySim安装路径】

\PX4PSP\RflySimAPIs\3.RflySim3DUE\2.AdvExps\e3_TwinmotionContent;

3. 基于Cesium的全球大场景构建实验:【RflySim安装路径】

\PX4PSP\RflySimAPIs\3.RflySim3DUE\2.AdvExps\e2_CesiumScene\1.ObliModelMap;

【飞思实验室】专注于为各高校、军工院所及应用单位,在无人装备的飞行控制、集群协同、智能感知及博弈对抗等方向提供一套完善的涵盖建模、设计、仿真、实装在内的教学、科研及实训解决方案,大大丰富教学及实训过程、加速科研成果落地,核心代码均自主可控。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue项目中引入外部字体文件

1、导入字体文件( .ttf格式) 1.下载相应的字体文件,或者找ui设计师要一份。一般字体文件使用 .ttf 格式的即可。 将准备好的字体文件,放在项目中,文件目录示例如下: 2.创建一个font.css文件用于定义这个字…

zookeeper快速入门四:在java客户端中操作zookeeper

系列文章&#xff1a; zookeeper快速入门一&#xff1a;zookeeper安装与启动-CSDN博客 zookeeper快速入门二&#xff1a;zookeeper基本概念-CSDN博客 zookeeper快速入门三&#xff1a;zookeeper的基本操作 先启动zookeeper服务端。 在maven引入zookeeper依赖。 <depende…

C++项目——集群聊天服务器项目(十三)客户端登录、注册、退出业务

截止到上节&#xff0c;我们已将服务器端主要代码介绍完毕&#xff0c;由于不可能一直手动输入信息&#xff0c;所以我们还需编写客户端代码&#xff0c;进行双向通信。 客户端不要求高并发&#xff0c;因此我们这里不使用muduo网络库的TcpClient类编写&#xff0c;仅采用C自带…

ComplexHeatmap绘图:注释、图例、热图基础(自备)

目录 基础介绍 Heatmap绘图基础参数 数据 作图参数 Heatmap Annotations&#xff08;注释&#xff09; 基础注释设置 简单注释测试 anno_points散点注释 anno_lines连线注释 anno_barplot条形图 anno_boxplot箱线图 anno_histogram直方图 热图组合 基础组合 进行…

使用idea一次性删除java文件中所有的注释内容 /* */

将.class文件转成.java文件后&#xff0c;.java文件每行都会生成注释/* */&#xff0c;下面是通过idea的替换功能&#xff0c;使用正则表达式删除注释/* */。 我使用MacBook&#xff0c;commandR打开替换查找替换界面&#xff0c;第一步选中 .* &#xff0c;第二步在…

虚拟机与开发板之间互传文件、文件夹

1.配置桥接模式实现外网访问 1.1设置 VMnet0 要桥接的网卡 打开【编辑】-【虚拟网络编辑器】 选择【更改设置】 选择【VMnet0】&#xff0c;选择桥接到宿主机上的哪个网卡。 通过打开安装虚拟机的宿主机的【网络适配器】&#xff0c;可以查看网卡名称。 1.2虚拟机配置桥接模式…

Idea2023创建Servlet项目

① Java EE 只是一个抽象的规范&#xff0c;具体实现称为应用服务器。 ② Java EE 只需要两个包 jsp-api.jar 和 servlet-api.jar&#xff0c;而这两个包是没有官方版本的。也就是说&#xff0c;Java 没有提供这两个包&#xff0c;只提供了一个规范。那么这两个包是谁提供的…

Java23种常见设计模式汇总

七大原则网站地址&#xff1a;设计模式7大原则&#xff0b;类图关系-CSDN博客 创建型设计模式&#xff1a;创建型设计模式合集-CSDN博客 七大结构型设计模式&#xff1a;7大结构型设计模式-CSDN博客 11种行为型设计模式&#xff1a; 11种行为型模式&#xff08;上&#xff0…

Xmind安装在指定目录

场景&#xff1a; Xmind安装默认是安装C盘。 问题描述 一般用户都习惯将软件安装在其他盘&#xff0c;但是Xmind不支持安装的时候指定磁盘或目录。 解决方案&#xff1a; 1、在D盘创建一个文件夹&#xff0c;用于安装Xmind&#xff0c;比如创建一个D:\Program Files (x86)…

MyBatis动态SQL--if 标签

mybatis动态sql对我们来说是非常常见的&#xff0c;比如在下面这样一个场景中&#xff0c; 我们需要多条件查询&#xff0c;但是查询的条件又不是固定的&#xff0c;是可以动态改变的&#xff0c;那我们就需要用到动态sql去完成。 动态SQL之 if 标签 接下来我们介绍第一个动态…

【Java代码审计】S2-045 远程代码执行漏洞分析复现

【Java代码审计】S2-045 远程代码执行漏洞分析复现 1.漏洞原理2.靶场复现 1.漏洞原理 官方对该漏洞的描述是这样的&#xff1a;Struts2 默认处理 multipart 上传报文的解析器为 Jakarta 插件&#xff08;org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest类&a…

基于opencv的SVM算法的车牌识别系统设计与实现

基于opencv的SVM算法的车牌识别系统设计与实现 车牌识别技术是智能交通系统中的一项关键技术&#xff0c;它能够自动识别车辆的车牌号码。本文将详细介绍如何使用Python编程语言结合OpenCV库和SVM算法来实现车牌识别系统。 系统架构 车牌识别系统主要包括以下几个模块&…

外贸建站:WordPress搭建外贸独立站零基础自建站完整教程(2024)

对于做外贸来说&#xff0c;拥有自己的外贸独立网站真的非常重要。在外贸领域&#xff0c;如今各平台竞争激烈&#xff0c;规则多&#xff0c;成本高&#xff0c;价格战、政策变化快&#xff0c;还存在封店风险等等因素。在这种情况下&#xff0c;拥有外贸独立站就能很好规避上…

JavaSE:抽象类和接口

目录 一、前言 二、抽象类 &#xff08;一&#xff09;抽象类概念 &#xff08;二&#xff09;使用抽象类的注意事项 &#xff08;三&#xff09;抽象类的作用 三、接口 &#xff08;一&#xff09;接口概念 &#xff08;二&#xff09;接口语法规则 &#xff08;三&a…

八口快速以太网交换机芯片方案分享/JL5110

以太网交换机(switch)是一种网络设备&#xff0c;用于在局域网中连接多个计算机和其他网络设备。它可以实现多个端口之间的同时传输&#xff0c;并根据MAC地址进行帧过滤和转发。交换机通过自学习的方式&#xff0c;将MAC地址与相应的接口关联起来&#xff0c;以便将数据帧准确…

Termius for Mac v8.4.0激活版下载

Termius for Mac是一款功能强大的多协议远程管理软件&#xff0c;专为开发人员、系统管理员和网络专业人士设计。它支持多种远程连接协议&#xff0c;如SSH、Telnet、RDP、VNC和RFB等&#xff0c;使得用户可以轻松连接到不同类型的远程服务器和设备。 软件下载&#xff1a;Term…

湖北兴发MES和用友NCC单据接口对接

湖北兴发MES和用友NCC单据接口对接 对接系统用友NCC 用友NCCloud&#xff0c;为客户提供面向大型企业集团、制造业、消费品、建筑、房地产、金融保险等14个行业大类&#xff0c;68个细分行业&#xff0c;涵盖数字营销、智能制造、财务共享、数字采购等18大解决方案&#xff0c;…

为什么要用能量回馈式负载

能量回馈式负载是一种能够将电能转化为其他形式能量的装置&#xff0c;同时还能将其他形式的能量转化为电能。这种负载在许多应用中具有重要的意义&#xff0c;因为它可以提高能源利用效率&#xff0c;减少能源浪费&#xff0c;降低环境污染&#xff0c;提高系统的稳定性和可靠…

Python3.10 - 列表的常用方法

01 列表的切片 lst [a, b, 1, 2, [c1, 1]]# 01 列表的切片 lst1 lst[0:2] # 从0开始切到1(顾头不顾尾), 切得长度超过1时, 切出来为list类型 print(lst1, type(lst1))lst2 lst[0] # 从中切某个元素时, 切出来的类型即元素本身, 以下同理 print(lst2, type(lst2))lst3 ls…

“由于找不到opencv_world3413.dll,无法继续执行代码”的解决方法

问题 在Windows系统中&#xff0c;编译完涉及到opencv的项目后&#xff0c;提示&#xff0c; 由于找不到opencv_world3413.dll&#xff0c;无法继续执行代码 解决方法 在编译好的opencv的bin文件内&#xff08;如&#xff1a;D:\code\vs2017\opencv\build\x64\vc15\bin&…