当前位置: 首页 > news >正文

大学大创项目:手机室内AR导航APP项目思路

文章目录

  • 一、最初的项目思路
  • 二、建图和定位分离的项目思路
    • 1、建图
    • 2、定位


个人见解,如有错误,请多包涵


一、最初的项目思路

在大创项目的开始,将手机确定为应用设备,传感器确定为相机

由于知识储备的原因,在头一次接触SLAM时,我认为这会是解决这个项目的最佳方案。

注意:如果你在网上搜索的搜索过程中同时带着SLAM和导航这俩关键词,那么你大概会看见一系列的关于机器人导航的内容机器人导航需要使用稠密的点云地图,但是就人的AR导航而言,稀疏点云地图就可以做到。

从普通的SLAM中进一步选择,在视觉SLAM(VSLAM)和激光SLAM中选择了视觉SLAM

视觉SLAM以相机为传感器,但SLAM还有更多种传感器配合的方案

考虑到手机上配备的传感器(手机上不止相机一种传感器),于是选择了视觉-惯性 SLAM (VISLAM) ,即视觉和惯性测量单元 (IMU)结合的SLAM方案,其中较为优秀的算法就是ORB-SLAM3

ORB-SLAM3构建的地图还正好是稀疏点云地图,于是将项目最初的方案思路定为:

将ORB-SLAM3做安卓端的移植,既在手机端直接建图,也在手机端做导航功能

但是遇到了一个问题:相关资源极其稀少
网络上关于ORB-SLAM3的安卓端移植的资源和博客寥寥无几,能找到的就三四篇,去掉没有介绍和配不成功的,我只找到了一篇。

资源链接:

https://nijiproject.coding.net/public/hitomi/hitomi-android/git/files

作者效果视频链接:

https://www.bilibili.com/video/BV1ph411x7d7/?spm_id_from=333.337.search-card.all.click

如果在安卓设备上在线建图,会出现如下问题
1、帧率不高,最高不超过20fps,卡顿略微明显;
2、在线建图极大程度占用了手机上的计算资源,容易引起设备发热加快手机电量的消耗
3、相机视角移动快速或是存在快速移动的景物,相机位姿容易丢失,建图过程不是很流畅。上文开源项目的作者本人建图的演示视频中,建图视频是1.5倍速的,尚且有点慢,一倍速的行走速度可想而知

如果不使用该开源项目,仅考虑自身的编程能力,我暂时还不具备自己将ORB-SLAM3完全地移植到安卓端上且不产生任何错误的能力,况且在设备上切实存在的物理问题目前是无法解决的。

既然我无法在手机上完成使用ORB-SLAM3进行在线建图的功能,换种角度想,它是放错位置的功能,建图这个部分的任务,手机不是很好的载体

在后续的思考过程中,我回想起了在Ubuntu18.04上配置完ORB-SLAM3后使用数据集进行离线建图的过程,我或许可以采用以下两种想法进行建图:
1、在电脑端运行ORB-SLAM3实时调用手机摄像头或是其他摄像头进行在线建图
2、在电脑端运行ORB-SLAM3使用图像数据集进行离线建图

(其实我真正需要的是ORB-SLAM3其中点云地图的构建功能,还有视觉重定位提供的位姿信息,我大可以分开做两部分的功能)

将建图和导航分为了两个部分处理,在电脑上实现建图这个部分,在手机上使用软件完成导航。

在思考进行到这一步的时候,虽然已经浪费了一个月的时间将工作集中于SLAM的学习和项目的思路探索中,但是项目进入到了新的进展中。

二、建图和定位分离的项目思路

1、建图

不知道在线建图是否有其他方法,但是我只尝试过使用ORB-SLAM3进行在线建图,这或许是一个可以再进行思考的要点。

不过,考虑到我需要地图的目的后,在线建图和离线建图的区别被模糊了我只需要一份可以用于定位导航的点云地图即可,它是通过在线建图还是离线建图完成的,我并不在乎。

对于我需要完成的室内导航目的来说,在线建图和离线建图无甚差别

进而在了解完R TALK | 旷视研究院SLAM组负责人刘骁:三维视觉与机器人这篇文章后,我了解到了一个新的名词Visual Localization,即视觉定位。

在旷视的这篇文章中,图片中关于构建稀疏点云地图使用的技术是SFM技术,Structure from Motion,而在文字描述的部分使用构建技术是SLAM技术。

这个部分让我产生了疑惑,通过其他文章的了解,我得知:

1、SFM更适用于大规模场景下的点云地图构建,ORB-SLAM3适用场景规模较小;
2、SFM可以使用无序的数据集进行三维重建,ORB-SLAM3需要使用有序的数据集进行点云地图构建。

如果考虑到我打算做的医院室内导航,毫无疑问,SFM技术构建的点云地图是更合适的

但是新的疑惑又产生了,SFM三维重建的场景地图,会比ORB-SLAM3的稀疏点云地图更适合导航使用吗?

想请教下各位,怎么理解三维重建中SFM和MVS的关系?

SFM同样也可以构建稀疏点云地图,只是可以进一步构建为稠密点云地图,基于视觉高精定位的“室内AR导航”技术点解析,商汤科技的这篇文章介绍的导航应用的地图就是稠密点云地图,而后使用几何方法,直接根据相机输入的图像进行2D-3D的特征点匹配。

就我目前的想法来看,我并不赞同这种使用稠密点云地图做法(可能是因为我并不了解稠密电点云地图特征点匹配这一部分的内容,他们或许有别的考量):

首先是稠密点云地图存储时占用的存储空间就远大于稀疏点云地图;
其次是,要在这么大规模的点云地图内搜索当前图像所对应的特征点,计算难度相当大,
手机端的运算资源是有限的。
我是该布置在设备端还是云端?手机端真的能使用这种方案吗?

我对此持疑惑质疑态度。

所以,我打算将导航上使用的地图确定为稀疏点云地图,毕竟在选择完目的地、确定完当前位置后,总归是要根据地图使用路线规划算法生成路线的,因此点云地图是必要的,这是可以确定的内容。

建图部分的细节讨论(这部分若是没有超链接,说明还没写好)

2、定位

如果要实现导航功能,地图是必不可少的,但是还需要知道用户当前的位置才有可能根据目的地的选择,才能进一步通过路径规划算法给出可行的路线方案,才能接着做导航。

阅读完基于单目相机的视觉重定位方法综述这篇文章后,其将相机重定位方法分为三种:

1、几何方法;
2、图像检索方法;
3、深度学习方法;

三种方法是依次发展的。

首先是第一种方法:几何方法

基于视觉高精定位的“室内AR导航”技术点解析,例如在这篇文章中,商汤科技的方案是:根据已经构建好的稀疏点云地图,以相机拍摄图像为输入,提取图像特征后直接进行与点云地图2D-3D的对应关系,而后获得当前的位姿数据。

商汤科技的定位方案

如果只是简单地基于点云地图进行直接视觉特征点匹配,也就是通过估计当前观测到的图像的二维特征点和3D 场景模型中的空间点之间的刚性几何对应关系,不仅具有在不同场景下的适应性不足的还有计算量较大的问题。

但是其还有其他可以改进的方式,例如地图分为三类:几何建图(Geometric Mapping),语义建图(Semantic Mapping)和广义建图(General Mapping)

几何建图主要关注场景中物体的形状、位置和空间关系,以生成精确的几何模型。

语义建图的地图不仅包含几何结构,还能提供关于物体类别、属性和语义关系等信息,语义地图可以通过对点云地图进行语义分割等工作得到;

广义建图是一个更综合的概念,它结合了几何建图和语义建图的思想,并进一步考虑其他方面的信息,如时间、光照、温度等。广义建图的目标是创建一个综合的地图,包括几何、语义以及其他环境属性的信息,以更全面地描述和理解环境。

地图方面的改进或许是一个可以探索的领域(这部分若是没有超链接,说明还没写好)。

其次是第二种方法:图像检索方法

因此可以考虑构建图像数据库,通过在图像数据库之中检索当前相机拍摄图像的全局描述子来确定当前的位姿。

检索方法构建图像数据库,可以通过词袋模型或是颜色直方图构建其匹配的全局特征:
词袋模型通过提取局部特征构建视觉词汇表,将局部特征与总体图像形成的视觉词汇表做比较,得全局特征向量,因此可以用作全局特征。

颜色直方图,做比较的为RGB或是HSV空间,本身就具有一定的全局性,图像提取出来的每个颜色区间的像素数量就可以作为全局的特征。

当通过全局特征进行粗定位得到相似的关键帧后,对比局部特征可以得到更精确的定位,通过图像的位姿得到当前位置的位姿,但是因为图像不可能覆盖每一个位置,所以位姿存在误差。

目前比较倾向的方法的是将图像检索方法,但在R TALK | 旷视研究院SLAM组负责人刘骁:三维视觉与机器人这篇文章介绍的研究中,其在粗定位后,接的是2D-3D的几何定位,和几何方法还有图像检索方法都有所不同,但我认为这是可行的方案,起码在理论层面上可行,是接下去尝试的主要地方。

在这里插入图片描述

旷视的研究方案

最后是第三种方法:深度学习方法
深度学习方法构建神经网络模型,暂时还不是很了解,需要对深度学习了解之后才能总结,不甚了解,不做讨论


未完待续。

相关文章:

大学大创项目:手机室内AR导航APP项目思路

文章目录 一、最初的项目思路二、建图和定位分离的项目思路1、建图2、定位 个人见解,如有错误,请多包涵 一、最初的项目思路 在大创项目的开始,将手机确定为应用设备,传感器确定为相机。 由于知识储备的原因,在头一次…...

OpenSSL加解密算法使用方法

下面简单记录一下 Linux上openssl命令的使用方法,包括 OpenSSL中加解密算法的使用方法和性能测试方法,以便让新手朋友们能快速用起来。持续更新中 … sm3算法 $ openssl sm3 /tmp/1.txt SM3(/tmp/1.txt) baafadbe43559b7043abd1682a4e12be05692cae175…...

Excel VSTO开发10 -自定义任务面板

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 10 自定义任务面板 自定义任务面板(有些地方称为侧边面板)即CustomTaskPane,这个类在Microsoft…...

百度智能云千帆大模型丨未来人手必备的代码助手

文章目录 1. 前言2. 千帆大模型平台3. 十分友好的功能4. comate代码助手5. 总结 1. 前言 我之前给大家推荐过Poe这个网站,它用的人比较少,但一旦接触后会发现它其实挺强大的。 因为它是一个可以同时支持好几个大模型的在线聚合平台。常用的GPT4&#x…...

美客多平台经营秘籍:为何测评补单操作是必要的?

许多经营美客多平台的商家有一种观念,他们认为美客多平台的规则与亚马逊有所区别。在美客多上,店铺比产品更重要,而且平台的竞争相对较小。因此,他们认为在美客多平台进行补单操作是不必要的。 然而,根据美客多平台的…...

AArch64内存管理

概述 本指南介绍AArch64中的内存转换,这是内存管理的关键。本文介绍了如何将虚拟地址转换为物理地址、转换表格式以及软件如何管理页表缓存 (TLB)。 这些对于底层代码(例如启动代码或驱动程序)开发人员都很有用。对于编写软件来设置或管理内…...

导出Excel的技术分享-综合篇

导出Excel的技术分享-综合篇 简单的EasyExcel使用 /*** 最简单的写*/public void simpleWrite() {// 注意 simpleWrite在数据量不大的情况下可以使用(5000以内,具体也要看实际情况),数据量大参照 重复多次写入// 写法1 JDK8// s…...

iPhone 14四款机型电池容量详细参数揭秘

苹果推出的iPhone 14系列与2021系列的设计和外形尺寸相同(仅缩小了几分之一毫米),所以这并不奇怪,但电池容量也大致相同。 虽然可能不足以对电池寿命产生可衡量的影响,但也存在微小的差异。不同的是,现在有…...

Python功能强大、灵活可扩展的Statsmodels库

Statsmodels是一个功能强大、灵活可扩展的Python库,用于进行统计建模和数据分析。它提供了一系列丰富的统计模型和方法,可以帮助研究人员和数据科学家在Python环境中进行高级统计分析。 概述 在Statsmodels中,线性回归是最常用的统计模型之…...

AcWing 4405. 统计子矩阵(每日一题)

如果你觉得这篇题解对你有用,可以点点关注再走呗~ 题目描述 给定一个 NM 的矩阵 A,请你统计有多少个子矩阵 (最小 11,最大 NM) 满足子矩阵中所有数的和不超过给定的整数 K ? 输入格式 第一行包含三个整数 N,M 和 K。 之后 N 行每行包含 …...

Kali Linux渗透测试技术介绍【文末送书】

文章目录 写在前面一、什么是Kali Linux二、渗透测试基础概述和方法论三、好书推荐1. 书籍简介2. 读者对象3. 随书资源 写作末尾 写在前面 对于企业网络安全建设工作的质量保障,业界普遍遵循PDCA(计划(Plan)、实施(Do…...

GPT与BERT模型

NLP任务的核心逻辑是“猜概率”的游戏。BERT和GPT都是基于预训练语言模型的思想,通过大量语料训练得到语言模型。两种模型都是基于Transformer模型。 Bert 类似于Transformer的Encoder部分,GPT类似于Transformer的Decoder部分。两者最明显的在结构上的差…...

2023-09-06力扣每日一题-摆烂暴力

链接: [1123. 最深叶节点的最近公共祖先](https://leetcode.cn/problems/form-smallest-number-from-two-digit-arrays/) 题意: 如题 解: 今天搞一手暴力,按层存,按层取,直到只取到一个 实际代码&…...

【Flutter】Flutter 使用 timego 将日期转换为时间描述

【Flutter】Flutter 使用 timego 将日期转换为时间描述 文章目录 一、前言二、安装与基本使用三、如何添加新的语言四、如何覆盖现有的语言或添加自定义消息五、完整示例六、总结 一、前言 你好!我是小雨青年,今天我要为你介绍一个非常实用的 Flutter 包…...

并发容器11

一 JDK 提供的并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 ConcurrentHashMap: 线程安全的 HashMap CopyOnWriteArrayList: 线程安全的 List,在读多写少的场合性能非常好,远远好于 Vector. ConcurrentLinkedQueue: 高效的并…...

Java8实战-总结22

Java8实战-总结22 使用流数值流原始类型流特化数值范围数值流应用:勾股数 使用流 数值流 可以使用reduce方法计算流中元素的总和。例如,可以像下面这样计算菜单的热量: int calories menu.stream().map(Dish::getcalories).reduce(0, Int…...

matlab 实现点云ICP 配准算法

一、算法步骤 (1)在目标点云P中取点集pi∈P; (2)找出源点云Q中的对应点集qi∈Q,使得||qi-pi||=min; (3)计算旋转矩阵R和平移矩阵t,使得误差函数最小; (4)对pi使用上一步求得的旋转矩阵R和平移矩阵t进行旋转和平移变换,的到新的对应点集pi’={pi’=Rpi+t,pi∈P};…...

python提取word文本和word图片

提取文本 docx只支持docx格式,所以如果想读取doc需要另存为docx格式即可 import docx # pip3 install python-docx doc docx.Document(three.docx) for paragraph in doc.paragraphs:print(paragraph.text)提取图片 import zipfile import os, re # docx本质上…...

iOS开发Swift-9-SFSymbols,页面跳转,view屏幕比例,启动页-和风天气AppUI

1.创建项目 2.设置好测试机型,App显示名称,以及关闭横向展示. 3.下载SF Symbols. https://developer.apple.com/sf-symbols/ 右上角搜索 search ,可以找到很多系统自带图标.选择喜欢的图标,拷贝图标的名字. 插入一个Button,在Image中粘贴图标名称并选择,即可将Button变成想要的…...

代码优化工具-测试程序执行时间-IDEAdebug+StopWatch

参考: [技巧]IDEA的debugStopWatch监测程序运行时间 添加链接描述 1创建类StopWatchExpand import lombok.extern.slf4j.Slf4j;import org.springframework.util.StopWatch;import java.text.NumberFormat;/*** 检测程序片段运行时间拓展** author sdevil507* cr…...

力扣每日一题---2594. 修车的最少时间

文章目录 思路解题方法复杂度Code 思路 请注意&#xff0c;能力值越低&#xff0c;修车越快&#xff0c;应该翻译成「排名」&#xff0c;排名越靠前&#xff0c;修车越快。&#xff09;根据题意可以知道r * n * n < t 的&#xff0c;所以可以利用数学知识进行改变公式&#…...

【jvm】运行时数据区

目录 一、运行时数据区一、作用二、说明三、线程共用与私有区域 一、运行时数据区 一、作用 1.内存是非常重要的系统资源&#xff0c;是硬盘和CPU 的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策…...

SpringMVC相对路径和绝对路径

1.相对地址与绝对地址定义 在jsp&#xff0c;html中使用的地址&#xff0c;都是在前端页面中的地址&#xff0c;都是相对地址 地址分类&#xff1a;&#xff08;1&#xff09;&#xff0c;绝对地址&#xff0c;带有协议名称的是绝对地址&#xff0c;http://www.baidu.com&…...

IIS perl python cbrother php脚本语言配置及简单测试样例程序

上篇笔记写了 IIS 配置 CGI&#xff0c; IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 这篇在IIS上配置一些脚本语言。为了操作方便&#xff0c;每种语言在站点下分设文件夹。 1. IIS perl配置 Perl CGI方式是曾经流行的做法。先下载一个开源…...

Oracle Scheduler中日期表达式和PLSQL表达式的区别

参考文档&#xff1a; Database Administrator’s Guide 29.4.5.4 Differences Between PL/SQL Expression and Calendaring Syntax Behavior There are important differences in behavior between a calendaring expression and PL/SQL repeat interval. These differenc…...

Java设计模式:一、六大设计原则-06:依赖倒置原则

文章目录 一、定义&#xff1a;依赖倒置原则二、模拟场景&#xff1a;依赖倒置原则三、违背方案&#xff1a;依赖倒置原则3.1 工程结构3.2 抽奖系统**3.2.1 定义抽奖用户类**3.2.2 抽奖控制 3.3 单元测试 四、改善代码&#xff1a;依赖倒置原则4.1 工程结构4.2 抽奖控制改善4.2…...

信息系统数据同步解决方案

实施数据同步解决方案时&#xff0c;重要的是确保数据同步是安全的、可靠的&#xff0c;并且能够适应系统变化。定期测试和监控数据同步过程&#xff0c;以确保其稳定运行&#xff0c;并随着需求的变化进行适当的调整和优化。 应用场景&#xff1a;信息系统A和信息系统B实现员…...

LRU算法 vs Redis近似LRU算法

LRU(Least Recently Use)算法&#xff0c;是用来判断一批数据中&#xff0c;最近最少使用算法。它底层数据结构由Hash和链表结合实现&#xff0c;使用Hash是为了保障查询效率为O(1)&#xff0c;使用链表保障删除元素效率为O(1)。 LRU算法是用来判断最近最少使用到元素&#xf…...

浅析ARMv8体系结构:异常处理机制

文章目录 概述异常类型中断终止Abort复位Reset系统调用 异常处理流程异常入口异常返回异常返回地址 堆栈选择 异常向量表异常向量表的配置 同步异常解析相关参考 概述 异常处理指的是处理器在运行过程中发生了外部事件&#xff0c;导致处理器需要中断当前执行流程转而去处理异…...

Golang开发--Goroutine的使用

Go 语言天生支持并发编程&#xff0c;提供了丰富的原语和工具来编写并发程序。Goroutine 是 Go 语言中的轻量级执行单位。它们是由 Go 运行时&#xff08;runtime&#xff09;管理的&#xff0c;并且能够在单个线程上运行成千上万个 Goroutine。创建 Goroutine 非常高效&#x…...

c 做网站好嘛/网站搭建公司哪家好

嘟嘟嘟 这题刚开始把\(17!\)想成了\(2 ^ {17}\)&#xff0c;以为全排暴力枚举就行&#xff0c;然后写一半发现好像只能过\(n \leqslant 10\)的点。 讨论正解之前&#xff0c;我们先想状压dp&#xff0c;毕竟这个数据范围就像状压。\(dp[i][j][S]\)表示点\(i\)所在子树中&#x…...

网站开发备案/长沙好的seo外包公司

1、反射 为何要关注元数据&#xff1f;------反射服务 在.net中&#xff0c;通过反射可以得到一个给定的.dll或.exe程序集所包含的所有类型的列表&#xff0c;列表包括给定类型定义的方法、字段、属性和事件&#xff0c;反射即反向获得。 如何使用System.Reflection命名空间编程…...

asp 网站 购物车/怎样才能上百度

1.修改表的字段&#xff1a;修改一个列的数据类型(一般限于修改长度&#xff0c;修改为一个不同类型时有诸多限制):语法: ALTER TABLE 表名 MODIFY(列名 数据类型);eg1: alter table skate_test modify (author number(10,0) );在修改列的长度时,只能改为比现有字段实际存的长…...

太原网站建设加王道下拉/凡科建站

Pentaho OLAP多维分析 更多干货 分布式实战&#xff08;干货&#xff09;spring cloud 实战&#xff08;干货&#xff09;mybatis 实战&#xff08;干货&#xff09;spring boot 实战&#xff08;干货&#xff09;React 入门实战&#xff08;干货&#xff09;构建中小型互联网企…...

织梦本地做的网站内网访问不/建网站建设

可以使用 ABAQUS 软件来模拟 NiTi 材料的人工肌肉。ABAQUS 是一款专业的有限元分析软件&#xff0c;能够帮助用户进行结构分析、动力学分析、热学分析等。为了模拟 NiTi 材料的人工肌肉&#xff0c;首先需要确定肌肉的几何形状和材料参数。然后&#xff0c;可以使用 ABAQUS 的有…...

中国建设第一平台网站/陕西百度代理公司

WEB 前后端分离三个最大的优点在于&#xff1a;1&#xff1a;最大的好处就是前端JS可以做很大部分的数据处理工作&#xff0c;对服务器的压力减小到最小2&#xff1a;后台错误不会直接反映到前台&#xff0c;错误接秒较为友好3&#xff1a;由于后台是很难去探知前台页面的分布情…...