5.3 RflySim3D三维场景导入

本节导航


本小节的例程源码路径:RflySimAPIs\\UE4MapSceneAPI\\MapImport

5.3.1 三维场景文件准备

  • 根据例2.3可知,RflySim3D需要的三维场景包含了三个文件“场景文件夹”、“****.png地形文件”、“****.txt”地形校准文件。注意:场景文件夹中的umap格式的地图文件名一定要与.png和.txt的地形文件名完全相同
  • 这里给定一个设计好的例子“RflySimAPIs\UE4MapSceneAPI\MapImport”

5.3.2 RflySim3D场景文件导入

  • 导入步骤很简单,将文件夹“UE4MapSceneAPI\MapImport\StarterContent”整体复制到安装路径(默认是C:\PX4PSP)下的“RflySim3D\RflySim3D\Content”文件夹,即可完成所有的安装任务

5.3.3 RflySim3D场景查看

  • 打开RflySim3D.exe程序,并按下键盘的“M”键,就可以如下图(多次按下M键,或者按组合键“M 数字”)查看导入的场景,并完成场景切换

5.3.4 CopterSim中地形文件获取

  • 打开刚才的Mypoj项目,在下图下侧的内容浏览器中,双击打开“StartContent”地图文件,然后在左侧栏分三次拖动三个“球体”到场景中,分别至于右上角、左下角和地图中间。
  • 依次点击三个球,在UE4界面右下侧的“细节”列表中的Transform标签下,可以看到该小球的坐标信息,例如下图中,点中左下角的小球,读取坐标为-400,-200,30(注意,取到三个点坐标后,从场景中删除这三个小球)
  • 依次获取右上小球(xy坐标均为正),左下小球(xy坐标均为负)和中间小球(xy坐标均为0)的三维坐标,并写成一行,新建一个.txt文件,命名为“StarterContent.txt”,在其中写入三个小球信息如下。
  • 上述txt文件为地形校准文件,我们还需要一个以png格式存储的地形网格文件。由于这里是平坦地形,其网格文件对应一个常值矩阵(每个像素点数值相同),这里直接将文件 “RflySimAPIs\UE4MapSceneAPI\MapCreate\FlatTerrainDemo.png (对应一个全为0的矩阵文件,本方法适用于所有平面地形)”重命名为“StarterContent.png”即可。对于复杂地形,其png地形文件的获取方法,见3.6节。 注意: 除了上述9维数据,在txt中,还可以输入三维GPS地形数据,按维度、经度、高度加入,可配置QGroundControl中对应的显示基准坐标。本功能仅限高级完整版。
  • 经过上述步骤,我们就得到了一个“StarterContent”文件夹,和“Starter Content.png“与”StarterContent.txt“两个文件。
  • 将“StarterContent.png”与“StarterContent.txt”拷贝到如下目录中:PX4PSP\CopterSim\external\map
  • 打开CopterSim程序,即可在“三维显示场景”选项卡中看到新增的 “StarterContent” 的三维场景。

5.3.5 场景文件的切换

  • 同时打开CopterSimRflySim3D软件,就可以看到一个四旋翼飞机出现在场景中
  • 直接在CopterSim的“三维显示场景”选项卡中选择特定场景,RflySim3D会自动切换到设定的场景,并创建四旋翼飞机


    本视频观看地址:
    优酷:https://v.youku.com/v\_show/id\_XNDcwNjA4NjY2NA==.html
    YouTube:https://youtu.be/W9kKZpLZ04U
    B站: https://www.bilibili.com/video/BV13a411i7sH?p=7

    5.3.6 复杂地形场景文件生成

  • 3.4 png地形文件实际上是以图片形式存储的二维矩阵,包含了场景的高程图。以png格式存储矩阵能够很好的实现高程矩阵的压缩,便于节省空间。
    · png的高程文件并不包含坐标原点、缩放尺度、场景范围等信息,因此需要一个校正文件,RflySim平台采用txt格式输入9维数组传入校正信息。
    · 平台中txt校正文件存储的是右上角三维坐标点(xy全为正,z向上为正)、左下角三维坐标点(xy全为负,z向上为正)、第3点三维坐标点,单位均为厘米。前两个点的目的是为了确认地形的范围和中心坐标,第3点坐标可自行选取,理论上需要尽量在高度上与前两个点有落差,用于校正高度尺度。
    · 在“FlatTerrainDemo.png ”例程文件实际上是一个全0的矩阵文件,因此只适用于平坦地形,对于一些山地或者更复杂的地形则适用,需要用下文介绍的方法,通过自动地形扫描来生成。
    · 对于复杂地形,也可以用FlatTerrainDemo.png构建简易地形校准文件,保证CopterSim初始化时,飞机在地面上。然后,在RflySim3D中按下“P”开启碰撞引擎,也能实现地形物体的交互。
    · 使用png和txt是为了降低RflySim3D的碰撞解算负担,提升仿真性能,在大规模集群场景下的仿真具有较大优势。
    地形文件建议仅包含地面不可穿越的实体,若室内场景,建议开启P碰撞模式。

    · 针对复杂的场景地形,平台可自动扫描地形高度得到png和txt文件。
    · 在打开的RflyScan3D程序并进去任意地图中,先按下键盘左上角的 ` 键,再输入命令 “RflyScanTerrainH p1 p2 p3 p4 p5 p6”,其中p1~p6(单位米)分别表示需要扫描区域的 左下角X 左下角Y 右上角X 右上角Y 高度H 间隔I,其中H(向上为正)要高于地形最大高度、间隔I决定了点的密度,单位均为米。
  • 地图边界(左下角坐标和右上角坐标)在UE4导入之前要大致确定(在UE4编辑器里面,滑动到场景边界,查看地图区域)。
    · 例如:命令格式“RflyScanTerrainH -1000 -1000 1000 1000 200 1”,表示地形扫描X从-1000米到1000米,Y从-1000米到1000米,在200米的高度面向下扫描,采样点间隔1m。上述指令回车后,等待一段时间会提示地图生成完成(png内存储的是2001*2001的高程矩阵,txt内存储地图范围和校准数据),然后去PX4PSP\RflySim3D目录找png和txt文件,将其拷贝到PX4PSP\CopterSim\external\map中即可。
  • 以StarterContent为例,输入 RflyScanTerrainH -10 -10 10 10 10 0.1(这里扫描的区域为(-10,-10)到(10,10)围成的正方形,比实际地形会大一些,超出部分会自动保持边沿高度,不用额外处理。高度为10米,比场景中最高物体更高,确保向下能扫描所有物体。0.1米的间隔适用于小尺寸场景:若超大规模场景,扫描间隔应该加大,不然扫描时间会很长,且png文件会很大)
    · 运行命令后会提示生成网格数量,然后去PX4PSP\RflySim3D目录,可以看到对应的png和txt文件。
  • RflyScanTerrainH会将房屋等物体看做地形一起扫描,导致房屋不再可以进入,解决方法如下
    · 可以在UE编辑器中,复制一份场景关卡文件(如右图),在复制场景中将房屋、桥梁等不需扫描物体删除,只留下需要地形扫描的物体,烘焙导入RflySim3D后,可得扫描得到地形的png和txt,再重命名即可。



    · 如果场景内物体太多,也可以在UE编辑器删除全部实体,只保留Landscape地形(如果有地形文件的话)。

results matching ""

    No results matching ""