基于matlab使用虚幻引擎模拟开发视觉SLAM算法(附源码)

news2024/11/15 19:33:02

一、前言

本示例展示了如何使用从虚幻引擎®模拟环境中获取的图像数据开发可视化同步定位和映射(SLAM)算法。

视觉SLAM是计算摄像机相对于周围环境的位置和方向,同时映射环境的过程。开发可视化 SLAM 算法并评估其在不同条件下的性能是一项具有挑战性的任务。最大的挑战之一是生成相机传感器的地面实况,尤其是在户外环境中。使用仿真可以在各种场景和相机配置下进行测试,同时提供精确的地面实况。

此示例演示了如何使用虚幻引擎模拟为停车场景中的单眼或立体摄像机开发视觉SLAM算法。

二、在模拟环境中设置场景

使用模拟 3D 场景配置块设置模拟环境。选择内置的大型停车场场景,其中包含多个停放的车辆。视觉 SLAM 算法可匹配连续图像中的特征。要增加潜在要素匹配的数量,可以使用停放车辆子系统向场景添加更多停放车辆。要指定车辆的停车姿势,请使用该功能。如果选择更自然的场景,则不需要存在其他车辆。自然场景通常具有足够的纹理和特征多样性,适合特征匹配。

打开模型并添加停放的车辆

三、设置自我车辆和摄像头传感器

通过使用带有地面跟随块的模拟 3D 车辆,设置沿指定参考路径移动的自我车辆。相机变体子系统包含两种配置的相机传感器:单目和立体。在这两种配置中,摄像头都安装在车顶中心。您可以使用相机校准器或立体相机校准器应用来估计要模拟的实际相机的内部结构。此示例首先显示单目相机工作流,然后显示立体摄像机工作流。

四、可视化和记录传感器数据

运行模拟以可视化和记录传感器数据。使用视频查看器块可视化来自相机传感器的图像输出。使用“目标工作空间”块记录相机传感器的地面真实位置和方向。

五、利用记录数据开发单目视觉SLAM算法

使用图像评估单目视觉 SLAM 算法。该函数实现单目 ORB-SLAM 管道:

  • 地图初始化:ORB-SLAM 首先初始化来自两个图像的 3-D 点地图。使基于 2-D ORB 特征对应关系计算相对姿态,并使用三角测量来计算 3-D 地图点。这两个帧作为关键帧存储在图像视图集对象中。三维地图点及其与关键帧的对应关系存储在对象中。

  • 跟踪:初始化地图后,对于每个新图像,该函数通过将当前帧中的特征与最后一个关键帧中的特征进行匹配来估计相机姿势。该函数通过跟踪本地地图来优化估计的相机姿势。

  • 局部映射:如果当前帧被标识为关键帧,则用于创建新的三维地图点。在此阶段,用于通过调整相机姿势和 3D 点来最大程度地减少重投影错误。

  • 闭环:通过使用功能袋方法将每个关键帧与所有先前的关键帧进行比较来检测每个关键帧的循环。检测到闭环后,将优化姿势图,以使用 导航工具箱功能优化所有关键帧的相机姿势。

六、根据实际情况进行评估

您可以根据从仿真中获得的地面实况评估优化的相机轨迹。由于图像是从单眼相机生成的,因此相机的轨迹只能恢复到未知的比例因子。您可以根据地面实况大致计算比例因子,从而模拟通常从外部传感器获得的比例因子。

七、立体视觉 SLAM 算法

在单目视觉SLAM算法中,使用单个相机无法准确确定深度。地图的比例和估计的轨迹是未知的,并且会随着时间的推移而漂移。此外,由于地图点通常无法从第一帧开始三角测量,因此引导系统需要多个视图才能生成初始地图。使用立体摄像头可以解决这些问题,并提供更可靠的视觉SLAM解决方案。该函数实现立体视觉 SLAM 管道。与单目管线的主要区别在于,在贴图初始化阶段,立体管线从同一帧的一对立体图像创建三维地图点,而不是从不同帧的两个图像创建它们。

八、提取立体图像

运行立体视觉 SLAM 算法

与单目视觉SLAM算法相比,立体视觉SLAM算法可以更准确地估计相机轨迹。

九、立体图像的密集重建

给定精细的相机姿势,您可以从与关键帧对应的立体图像中执行密集重建。

十、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序有偿获取:评论区下留言,博主看到会私信你。

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

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

相关文章

抖音短视频矩阵管理系统源码开发部署(开源定制)

一、什么是短视频矩阵管理系统? 短视频矩阵管理系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案,具体包含:点赞关注评论主动私信 ,评论区回复,自动潜客户挖掘,矩阵号营销…

今日小课堂:会议录音转文字怎么弄的

小君:嘿,你知道怎么把录音转成文字吗?我今天录了一个重要的会议,但是时间有限,需要快速整理笔记。 小辉:当然!你可以使用一些工具来将录音转换为文字。最简单的方法就是利用语音转文字的应用。…

C语言 while 和 do while 区别

先简单介绍一下C语言中的while和do while语句 while循环 语法 C 语言中 while 循环的语法: while(condition) {statement(s); } 在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。 condition 可以是任意的表达…

Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务

目录 Pod 参考文档:Pod | Kubernetes Pod配置文件:simple-pod.yaml 对master进行如下操作 Pod的状态有: 参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客 进入Pod内的nginx容器&#…

【Ubuntu】系统U盘变为普通U盘

如果您在 Ubuntu 系统上没有磁盘工具可用,您可以尝试使用命令行工具来格式化系统 U 盘。请按照以下步骤进行操作: 打开终端:在 Ubuntu 桌面上,按下 Ctrl Alt T 快捷键,或者在应用程序菜单中搜索并打开 "终端&qu…

PPT文件,使用python删除链接

文章目录 一、需求二、处理方式三、代码实现 一、需求 如下图所示,将PPT文件中的链接进行删除,且不保留链接名。 原始文件: 处理后文件: 二、处理方式 使用python 的pptx模块进行处理,读取文字块,然后…

FPGA实验二:模可变计数器设计

目录 一、实验目的 二、实验要求 三、实验代码 1.实验源码 2.部分代码设计思路分析 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 1.解决实验中遇到的困难及解决 2.完成实验后的心得 一、实验目的 (1&#xf…

【Linux系统编程】Linux 软件包管理器——yum

文章目录 1. 什么是yum2. yum的使用2.1 注意事项2.2 查看软件包2.3 如何安装软件2.4 如何卸载软件2.5 yum源 这篇文章我们要学习的是—— Linux 软件包管理器 yum。 1. 什么是yum 首先来问大家一个问题: 我们平时使用的手机上,都会有一个应用叫做“应…

【全栈开发指南】OAuth2授权获取token调试接口的方式

在我们实际应用接口的调用调试过程中,需要用到token或者刷新token,GitEgg支持OAuth2.0协议进行认证授权,这里介绍说明如何通过Postman获取token和refresh_token并进行接口调试。 1、使用密码模式获取token 根据spring-security-oauth2的实现…

创建虚拟机安装windowserver2016服务器(NETBASE第二课)

2 操作流程 文件-新建虚拟机-自定义(高级)-下一步-稍后安装操作系统-下一步-客户机操作系统-选择Windows 10 X64-下一步-虚拟机名输入win10-1-位置选择(E:\虚拟机\Win10-1)-下一步-固件类型选择UEFI-下一步-下一步-输入内存2048M-…

2023年Arm最新处理器架构分析——X4、A720和A520

1、引言 上一篇文章我们介绍了Arm的Cortex-X1至Cortex-X3系列处理器,2023年的5月底,Arm如期发布了新一年的处理器架构,分别为超级大核心Cortex-X4,大核心A720和小核心A520。在智能手机行业,Arm始终保持每年一迭代的处…

ModaHub魔搭社区:ChatGLM-RLHF:无需微调 教程

目录 使用方法 效果展示 对ChatGLM直接使用RLHF进行调整参数,无需传统的finetune|Modify ChatGLM params with only RLHF。 大部分的RLHF代码都是在分布式框架,不适合学习和使用,本代码的RLHF代码不需要Megatron或者deepspeed框架&#xff…

Maven高级(三)--聚合

1.解决的问题: 此时tlias-web-management模块的父工程是tlias-parent,该模块又依赖了tlias-pojo,tlias-utils模块。那么此时,我们要将tlias-web-management模块打包,是比较繁琐的。因为进行项目打包,maven会从本地仓库来查找tlias…

Jupyter notebook 安装代码提示和补全

打开Anaconda Prompt 终端 依次输入 pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter_nbextensions_configurator jupyter nbextensions_configurator enable --user 打开Jupyter notebook

Linux的用户管理精简全总结

(该图由AI绘制 关注我 学习AI画图) 目录 Linux操作系统用户和组的概念 1、为什么需要了解用户和组 2、用户和组的关系 3、用户组操作 ☆☆☆☆☆☆☆☆☆☆☆ /etc/group文件解析 ☆ 用户组的修改 ☆ 用户组的删除 4、用户操作 ☆ 用户信息查…

VSCode 提示 1.16.15 版本的Go,不支持 gopls v.0.13.0

Go1.16.15无法使用 goplsv.0.13.0 问题详情解决办法 问题详情 Gopls was built with Go version 1.16, which will be unsupported by gopls v0.13.0. Please upgrade to Go 1.18 or later and reinstall gopls. If you cant upgrade and want this message to go away, pleas…

FPGA实现二进制转BCD码

1、简介 bcd码:以4bit二进制码表示一个十进制码 例如,432(d) 0100-0011-0010(bcd) 这里具体的判断方法为:(满5)加3法 二进制位宽为W,则BCD位宽只需要&…

JS 实现CSV文件转换SQL文件小工具

一. 需求 最近在项目中遇到一个问题,客户提供的数据是CSV格式的, 需要将CSV文件中的数据转换为SQL语句文件。 😅由于本人不会Excel的vba编程,因此决定使用JS来实现。 二. 实现思路 提供一个文件上传框,支持多文件上…

微信小程序全局配置详解

通过全局配置实现的效果 开发者 微信公众平台 登录网址 https://mp.weixin.qq.com/ 注册网址 https://mp.weixin.qq.com/cgi-bin/wx?token&langzh_CN 微信小程序开发者工具 下载地址 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 小…

WPF grid控件定义行和列

在此已经学习了wpf Grid控件&#xff0c; WPF布局控件Grid的基本使用 - 使用kaxaml_bcbobo21cn的博客-CSDN博客 下面继续学习&#xff1b; 定义3行3列的基本代码如下&#xff1b;为了看清效果&#xff0c;设置 ShowGridLines"True"&#xff1b; <Grid ShowGrid…