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

图片

一.技术背景

在无人系统研发过程中,需要进行大量的运动控制系统半物理实时仿真实验,传统仿真界面的运动轨迹显示多采用的是二维曲线形式,运动过程和状态是通过文本数据显示。随着数据量的增加,该方式缺乏直观性,不易观察、理解和分析,不利于挖掘隐藏于数据中的本质特性;而一幅逼真图像包含的信息则囊括了曲线和文本显示的信息。因此,将三维可视化仿真技术应用到无人系统仿真中,可以使系统数据以更自然、更易理解的图像形式展示出来,逼真的再现无人系统运行全过程。三维仿真实现路线图如下图所示:

图片

二. RflySim平台介绍

在无人系统仿真领域已经出现了不少高逼真三维仿真平台,主要包括以下几个:AirSim;Gazebo;V-REPCARLA;MORSE;FlightGoggles等。

上述平台大多只支持特定载具(多旋翼、无人车、机器人等)的开发,而且适用的开发阶段主要是机器视觉或人工智能等上层算法开发。目前市面上仍然缺乏适用于各类无人系统载具类型,以及覆盖从底层控制器设计、上层智能决策算法开发、后期自动测试与安全评估等的全流程开发平台,这也是RflySim平台开发的初衷,其中的RflySim3D/RflySimUE5的三维引擎也弥补了目前市面上三维引擎对无人系统可视化方面的不足。

RflySim3D与其他软件交互是通过UDP实现的,RflySim平台提供了Python、Simulink的接口,它们都是通过UDP与RflySim3D交互的。RflySim3D在RflySim仿真平台中所处的位置如下图所示:

图片

CopterSim会根据从Pixhawk(或者PX4SITL)传入的电机控制数据解算出无人机当前的状态(主要是位置、姿态数据),随后会将这些数据发送给RflySim3D,而RflySim3D会将这些数据应用至场景里相应的无人机上,从而使我们能更直观的看到无人机的状态。

RflySim3D使用UDP通信,能够接受一些来自外部的命令,例如切换场景、创建无人机、开启UE内置的物理碰撞等,命令的细节将在RflySim3D接口与使用方法介绍中介绍,总之RflySim3D可以接受来自CopterSim、Python、Simulink的UDP命令。

RflySim3D还支持通过XML文件进行一些配置,主要是用XML配置无人机的构型(四旋翼、六旋翼、固定翼等)、模型在列表中的优先级、飞机的名字、飞机的初始位置与姿态、各致动器(一般是旋翼)的初始位置、姿态、材质、旋转轴、运动模式,还可以定义摄像机的位置,还可以定义一些障碍组件(例如柱子、圆环)等等。

三. RflySim3D案例介绍(自定义无人机模型加载实验)

RflySim3D的各种三维模型也是可以自定义的,它需要被处理成RflySim3D能识别的状态。首先三维模型本身需要被UE4烘焙,然后还需要一个xml格式的文件来定义它,其中最重要的是样式ClassID与模型文件的位置,这样RflySim3D才能把样式Type与被渲染的三维模型给关联起来。实验大致流程如下:

1.在3dsMax中处理模型

图片

打开3dsMax

图片

图片

然后在“VehicleModel”目录中找到“DroneyeeX680.max”

在3Dsmax中选中所有组件,点击菜单栏“组”-“组”,就可以将所有组件弄成一个整体,这时候可以调整飞机的位置,姿态,轴的位置,轴的方向等。需要满足以下要求:

1)确保机头方向指向3DsMax的x轴正方向,机顶指向z轴正方向(向上);

2)确保飞机的质心在3DsMax的中心;

3)确保模型中没有隐形(不显示的)组件,如果有需要删除。

如下图,点击工具栏“移动”按钮,再点击选中机身或螺旋桨对象,就可以在下方状态栏中读取对象的三维坐标(将坐标都输入为0就可以将对象挪到中心)。

图片

点击机身就可以看到机身的三维坐标(x,y,z)=[-0.449,-0.363,0]

图片

右上螺旋桨[24.977,-24.439,11.222],左下螺旋桨[-25.99,22.528,11.022],左上螺旋桨[24.977,24.693,11.022],右下螺旋桨[-25.99,-22.274,11.022]

将各个螺旋桨的坐标减去机体的坐标,就可以得到各个螺旋桨相对机体中心的三维坐标。由于3DsMax是采用前左上的右手坐标系,UE采用前右上的左手坐标系,因此需要对y轴进行反向。

这样就得到了右上、左下、右下、左上的坐标序列为:[25.4260,24.0760,11.2220],[-25.5410,-22.8910,11.0220],[25.4260,-25.0560,11.0220],[-25.5410,21.9110,11.0220],这几个坐标值留着备用。然后,记录飞机质心到地面(机体最低端)的距离,这里大约取8cm。

将DroneyeeX680.max复制两份,分别命名为DroneyeeX680Body.max和DroneyeeX680Prop.max。在DroneyeeX680Body.max文件中移除四个螺旋桨,并将机身移动到3DsMax的坐标中心;

导出得到FBX模型文件,分别点击3DsMax的菜单-文件-导出-导出,按下图所示配置:

导出得到DroneyeeX680Body.FBX和DroneyeeX680Prop.FBX文件。

关键导出配置如下图所示(注:摄像机、动画、灯光都不要勾选)

图片

图片

2.将该飞机导入UE中处理并烘培

任意打开一个UE工程,在其Content新建一个文件夹(这里命名为DroneyeeX680),如下图进入该文件夹后,点击导入按钮,依次将DroneyeeX680Body.FBX和DroneyeeX680Prop.FBX导入进来

图片

图片

由于我们的模型没有定义材质,因此导入进来是白色的,并不美观。需要双击DroneyeeX680Body组件,在其中对关键部件添加颜色材质,例如碳纤维的黑色。同时,复制一个DroneyeeX680Prop组件命名为DroneyeeX680Prop_2,将其材质设置为不用的颜色,以区分飞机的靠前的两个螺旋桨和靠后的两个螺旋桨。如果导入其他的其他模型本身拥有材质贴图,则需要保证贴图纹理贴在正确的位置上。

图片

在上图中点击“保存所有内容”,再点击UE菜单栏-文件-打包项目-Windows-Windows64(需要按生成地图的教程方法,启用光线追踪和禁用PAK打包),就可以生成可以识别的三维文件了。去生成文件路径“WindowsNoEditor”-MyProj(项目名)-“Content”下,将整个“DroneyeeX680”目录复制出来备用。

3.编写XML文件并导入RflySim3D

1)导出模型后,我们还需要编写XML文件来帮助RflySim3D识别螺旋桨位置、转动方向、材质等。(RflySim3D的XML文件编写方法见之前的XML接口例程:[RFLYSIM安装位置]\RflySimAPIs\3.RflySim3DUE\0.ApiExps\e8_UAVCtrl\2.ActuatorCtrl\Readme.pdf)。

2)该案例的XML文件:[RFLYSIM安装位置]\RflySimAPIs\3.RflySim3DUE\1.BasicExps\e1_CusLoadDroneyeeX680将编写好的XML文件拷贝到之前生成的DroneyeeX680文件夹中,再一起拷贝到RflySim3D\RflySim3D\Content目录。

3)打开CopterSim和RflySim3D,按下C键可以切换飞机样式,看看自己的飞机模型是否已经导入。

图片

4.最终效果

此文件目录下有一个已经完成的例程,找到VehicleModel\DroneyeeX680目录,将其复制到[RflySim安装位置]\RflySim3D\RflySim3D\Content目录下。最后打开RflySim3D,鼠标双击地面+O+3,就能创建出这个ClassID为3的飞机,然后按C键切换到刚刚导入DroneyeeX680飞机即可。

图片

本例程视频观看地址:

1.优酷:https://v.youku.com/v_show/id_XNDcwNjA4NzIxMg==.html

2.YouTube:https://youtu.be/mKUehJwqqsU

3.B站:https://www.bilibili.com/video/BV1jm4y117sw/?spm_id_from=333.999.0.0&vd_source=1654a620e9867b8f22757a07c243c61d

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

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

相关文章

python四川火锅文化网站的设计与实现flask-django-php-nodejs

四川火锅文化网站的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来,…

蓝桥杯单片机快速开发笔记——特训2 按键的长按与短按

一、题目要求 在CT107D单片机综合训练平台上,通过I/O模式编写代码,实现以下功能: 系统上电后,关闭蜂鸣器、继电器和全部指示灯,数码管显示初始值为28,仅显示数码管最右边两位。利用定时器0实现10ms间隔定…

预测一下,GPT-5 会在什么时候发布,又会有哪些更新?

发布预期:GPT-5预计将于11月发布,可能与ChatGPT发布两周年同期。竞争态势:谷歌的Gemini与GPT-4 turbo已展开竞争。逐步发布:GPT-5可能通过模型训练过程中的中间检查点逐步发布。训练与安全测试:实际训练可能需3个月&am…

发布 AUR 软件包 (ArchLinux)

首发日期 2024-03-09, 以下为原文内容: 理论上来说, 我们应该平等的对待每一个 GNU/Linux 发行版本. 但是, 因为窝日常使用 ArchLinux, 所以对 ArchLinux 有一些特别的优待, 比如自己做的软件优先为 ArchLinux 打包发布. 本文以软件包 librush-bin 为例, 介绍发布 AUR 软件包的…

【IC设计】Verilog线性序列机点灯案例(四)(小梅哥课程)

文章目录 该系列目录:设计环境设计目标设计思路RTL及Testbench代码RTL代码Testbenchxdc约束 仿真结果 声明:案例和代码来自小梅哥课程,本人仅对知识点做做笔记,如有学习需要请支持官方正版。 该系列目录: Verilog线性…

力扣热门算法题 52. N 皇后 II,53. 最大子数组和,54. 螺旋矩阵

52. N 皇后 II,53. 最大子数组和,54. 螺旋矩阵,每题做详细思路梳理,配套Python&Java双语代码, 2024.03.20 可通过leetcode所有测试用例。 目录 52. N 皇后 II 解题思路 完整代码 Python Java 53. 最大子数组…

长安链开源社区发布2023年度长安链优秀应用案例

1月27日结束的“长安链发布三周年庆暨生态年会”上,在国家区块链技术创新中心的指导下,长安链开源社区联合长安链生态联盟正式发布2023年度长安链行业示范案例、领域精品案例及特色创新案例。 本次评选面向2023年度应用长安链上线并取得应用成效的案例&…

Matlab在高光谱遥感中的作用:从数据处理到决策支持

光谱和图像是人们观察世界的两种方式,高光谱遥感通过“图谱合一”的技术创新将两者结合起来,大大提高了人们对客观世界的认知能力,本来在宽波段遥感中不可探测的物质,在高光谱遥感中能被探测。以高光谱遥感为核心,构建…

vue中如何实现子组件相互切换,而且数据不会丢失

项目场景: 今天的项目场景: 项目为数据报表,但是一个父页面中有很多的子页面,而且子页面中不是相互关联,但是数据又有联系. 问题描述 子页面相互切换的时候之前填写好的数据会丢失,无法保存.这样想提交所有的子页面的数据就出现问题. 原因分析: 分析原因…

外包干了20天,技术退步明显.......

先说一下自己的情况,大专生,21年通过校招进入杭州某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了2年的功能测试…

SpringCloud详解,图文码笔记

注意: SpringCloud并 不等于 微服务 1.微服务技术线 2.认识微服务 分布式架构 分布式架构: 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。 优点: 降低服务耦合有利于服务升级拓展 服务治理 分布式…

基于Java的绩效考核系统的设计与实现

今天要和大家聊的是一款基于Java的绩效考核系统的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕💕个人简介…

AcWing 3224. 画图 (BFS,Flood Fill,坐标变换)

用 ASCII 字符来画图是一件有趣的事情,并形成了一门被称为 ASCII Art 的艺术。 例如,下图是用 ASCII 字符画出来的 CSPRO 字样。 ..____.____..____..____...___.../.___/.___||.._.\|.._.\./._.\.|.|...\___.\|.|_).|.|_).|.|.|.||.|___.___).|..__/|.…

从先序与中序遍历序列构造二叉树

从先序与中序遍历序列构造二叉树 描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 递归法 解题思路: 通过先序遍历我…

手势识别模块PAJ7620的简单应用

文章目录 一、PAJ76201.介绍2.模块特性3.模块原理4.原理图5.内部框图 二、软件1.手势识别1.1 初始化ATK-MS7620模块1.2 配置ATK-MS7620模块为手势检测模式1.3 获取手势 2.接近检测1.1 初始化ATK-MS7620模块1.2 配置ATK-MS7620模块为接近检测模式1.3 获取物体亮度和大小 三、总结…

HQYJ 2024-3-19 作业

TCP通信三次握手和四次挥手: 并行和并发的区别:并发是单核处理器处理多个线程任务,并行是多核处理器同时处理多个线程任务。并发过程中会抢占CPU资源,轮流使用;并行过程不会抢占CPU资源。 阻塞IO和非阻塞IO&#xff…

迈入C++编程之路(一)

目录 一、什么是C 二、关键字: 三、命名空间 : 1. C语言存在的问题: 2. namespace关键字: 3. 注意点: 4.使用命名空间分为三种: 四、输入输出: 五、缺省函数: 1. 什么是缺省…

Xinstall让App推广变得高效而简单

随着移动互联网的迅猛发展,App已成为人们生活中不可或缺的一部分。然而,对于众多开发者和广告主来说,如何高效地推广自己的App,却一直是一个令人头疼的问题。今天,我们要为大家介绍的,正是国内专业的App全渠…

《妈妈是什么》笔记(四) 找到自己的兴趣,是童年最重要的工作

经典摘录 一个孩子的童年,本来就会自然地孕育创意。妈妈没有识别创意的能力,不代表孩子没有创意。 【我们要给孩子准备简单、可塑性强的创意材料,比如充足的纸和笔。】 【童年的权利,就是玩;童年的执行力&#xff0…

【CPP】C++11多线程

thread类 在C11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行支持了,使得C在并行编程时不需要依赖第三方库&#xff0c…