关于单目视觉 SLAM 的空间感知定位技术的讨论

news2024/11/27 22:23:27

尝试关于单目视觉 SLAM 的空间感知定位技术的学习,做以调查。SLAM算法最早在机器人领域中提出,视觉SLAM又可以分为单目、双目和深度相机三种传感器模式,在AR应用中通常使用轻便、价格低廉的单目相机设备。仅使用一个摄像头作为传感器完成同步定位与地图创建操作,具有系统结构简单、成本低且易实现等优点。

正是尺度不确定性才使得单目SLAM 能够在大尺度和小尺度环境之间进行自由转换。所以单目视觉SLAM成为增强现实领域的研究热点。我近期的工作将从以下几个方面进行阐述:PTAM算法、ORB-SLAM2算法、ORB-SLAM3算法。

文章目录

    • 一、PTAM算法
      • 1、PTAM算法复现
        • (1)配置PTAM算法
        • (2)转化灰度图
        • (3)标定相机
        • (3)运行PTAM
      • 2、PTAM 算法总结
    • 二、ORB-SLAM2算法
      • 1、Pangolin库
      • 2、OpenCV(C++版)
      • 3、Eigen
      • 4、点云库PCL(Point Cloud Library)
      • 5、非线性优化库G2O
      • 6、Ceres

一、PTAM算法

1、PTAM算法复现

PTAM算法是2007年提出的经典的单目特征点法SLAM,同时也是早期将SLAM和AR结合起来的工作之一。虽然PTAM几乎已经过时,但其在整个SLAM发展过程中占有重要地位。
首先我跑了经典算法PTAM,全称Parallel Tracking And Mapping,是最早提出将Track和Map分开作为两个线程的一种SLAM算法,是一种基于关键帧的单目视觉SLAM算法。
David等人提出PTAM,第一个使用非线性优化的方法也是第一个将BA与视觉SLAM相结合的方法,首次出现前后端的概念,为后来视觉SLAM提供了良好思路。
PTAM是视觉SLAM领域里程碑式的项目。在此之前,MonoSLAM为代表的基于卡尔曼滤波的算法架构是主流,它用单个线程逐帧更新相机位置姿态和地图。地图更新的计算复杂度很高,为了做到实时处理(30Hz),MonoSLAM每帧图片只能用滤波的方法处理约10~12个最稳定的特征点。PTAM最大的贡献是提出了tracking、mapping双线程的架构,tracking线程只需要逐帧更新相机位置姿态,可以很容易实现实时计算;而mapping线程并不需要逐帧更新,有更长的处理时间,原来只能用在离线SfM(Structure from Motion)的BA(Bundle Adjustment)也可以用起来。这种基于优化的算法比滤波法在单位计算时间可以得到更高的精度。这种多线程的处理方式也更顺应现代CPU的发展趋势。之后的视觉SLAM算法几乎全部沿用了这一思想。

(1)配置PTAM算法

使用PTAM算法需要①安装ROS kinetic②编译PTAM③获取PTAM并编译④标定相机
相机标定已有很多开源的工具,比如Matlab、OpenCV和ROS都提供了一些工具包。这里我们使用PTAM自带的工具进行标定。首先在一个新的终端打开roscore。然后启动相机并发布消息,不同的相机需要打开不同的launch文件。

(2)转化灰度图

因为PTAM标定要求输入为灰度图像,必须首先将彩色的image_raw转换为灰度图,否则会出现issues#78 这样的图像重影模糊问题。因此使用的自带的image_proc节点来转换:
这时再查看rostopic list会发现多了很多topic,其中camera/image_mono表示灰度图。
然后需要根据相机的情况,对~/catkin_ws/src/ethzasl_ptam/ptam/PtamFixParams.yaml更改相关的配置参数:

(3)标定相机

接着运行标定节点,记得将变量名重新映射(remap)一下即可:
至此就可以开始标定相机了,标定后将保存文件camera.cfg。

(3)运行PTAM

在这里插入图片描述

2、PTAM 算法总结

它既可以提供实时的定位和建图,也可以在虚拟平面上叠加虚拟物体,PTAM算是早期的结合AR 的SLAM 工作之一。与许多早期工作相似,存在着明显的缺陷:场景小,跟踪容易丢失,等等。这些又在后续的方案中得以修正。

二、ORB-SLAM2算法

2016年,Raul 等人提出了ORB-SLAM 算法,它是一个开源的 SLAM 算法,该算法支持单目、双目和 RGB-D 相机,在大多数环境中均可以运行。该系统在环境场景变化较快以及移动平台高速移动的情况下也有很好的鲁棒性。 ORB-SLAM 系统采用的是基于特征点方法对相机的轨线进行实时计算,并根据提取的特征点和计算出的轨迹生成周围环境的三维稀疏特征点地图为了增加ORB-SLAM算法的应用性,作者在其基础上提出了支持双目相机和RGB-D相机的ORBSLAM2系统。为实现ORB-SLAM2需要涉及一些数学库。

1、Pangolin库

可视化的库,SLAM的可视化绘图库,基于OpenGL的,主要优势在于使用比OpenGL简单

2、OpenCV(C++版)

开源的计算机视觉编程程序库,强大的计算机视觉库,相机标定和三维重建算法,如SfM和PnP等。

3、Eigen

适用范围广,支持包括固定大小、任意大小的所有矩阵操作,甚至是稀疏矩阵;支持所有标准的数值类型,并且可以扩展为自定义的数值类型;支持多种矩阵分解及其几何特征的求解;它不支持的模块生态系统提供了许多专门的功能,如非线性优化,矩阵功能,多项式解算器,快速傅立叶变换等。

4、点云库PCL(Point Cloud Library)

实现了大量点云相关的通用算法和高效的数据管理。

5、非线性优化库G2O

在SLAM领域就是预测值或者说是基于模型的预期结果和测量之间的误差,使用G2O解决优化问题。

6、Ceres

谷歌开发C++库Ceres Solver,用来解决带边界约束的非线性最小二乘问题

ORB-SLAM2
需要做多模态融合的工作,ORB-SLAM2很多需要修改,不能直接使用
在这里插入图片描述

ORB-SLAM3
为了满足实时性的要求需要在ROS下跑ORB-SLAM
1、ROS
ROS全称Robot Operating System(机器人操作系统), 集成了大量的工具,库,协议,提供类似OS所提供的功能,SLAM在ROS下跑和非ROS下跑的区别:可以把ROS理解成Linux下集成了许多好用的第三方和多进程编程的一个库集。在ROS下跑SLAM可以使用ROS的许多成熟的方法库。比如进程间通信可以默认使用ROSMaster建立的本地socket通信。不在ROS下跑,很多进程间通信、同步、回调之类的就需要自己去设计。

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

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

相关文章

Web基础 ( 四 ) JavaScript 介绍

4.JavaScript 4.1.概念 4.1.1.什么是JavaScript 通过浏览器中内置的解析器,逐行解析执行的一种脚本语言 主要是处理系统使用者的行为逻辑的 4.1.2.与Java语言的比较 代码格式不同 ​ Java与HTML无关的格式 ​ JavaScript代码是一种文本字符格式,可…

chatgpt赋能Python-numpy归一化函数

介绍:numpy归一化函数 在数据处理和分析中,常常需要将数据归一化到一定范围内,以便于不同数据之间进行比较和处理。在Python的数据科学方面,numpy库是非常常用的工具之一,其中的归一化函数非常便捷和有效。 在这篇文…

如何快速入门 Java?

在一线互联网公司做开发 13 年了,“精通”Java,“吊打”一众面试官,如何快速入门 Java,对我来说简直就是小儿科,相信看完后你一定能收获满满、醍醐灌顶,今年秋招拿下阿里、美团等互联网大厂的 offer。 逼装…

django ORM框架 第二章 表与表的关系关联表

目录 一、表的几种关联关系 1.1 一对一 1、介绍: 2、举例 3、建表原则: 4、django ORM 框架实现 一对一 的表的创建 1.2 一对多 1、介绍: 2、举例 3、建表原则: 4、django ORM 框架实现 一对多 的表的创建 1.3 多对多 1…

汇编八、汇编控制静态数码管显示数字

1、实现目标 通过汇编语言,实现单个静态数码管依次循环显示0~9。 2、数码管 2.1、数码管外观 2.2、数码管工作原理 (1)数码管的亮灭是由内部LED的亮灭实现的。 (2)一位数码管内部有八颗LED灯,利用内部的LED灯的亮和灭让数码管显示不同的数字。 3、…

chatgpt赋能Python-mac怎么用python

Mac如何使用Python:从入门到实践 简介 Mac操作系统上的Python开发环境非常受欢迎,因为它是一种优雅的编程语言,具有良好的可读性,可以轻松处理不同类型的任务,包括网站开发、机器学习和数据分析等领域。本文将介绍如…

干外包3年,彻底寄了...

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

瑞吉外卖 - 删除分类功能(13)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

chatgpt赋能Python-minhash_python

MinHash Python算法:优化大数据处理和搜索引擎 在如今互联网化和其他技术转型的时代,SEO已经成为许多企业和个人的必要条件。SEO方法(搜索引擎优化)一直在不断的发展,MinHash算法是其中之一。本篇文章将会介绍MinHash算法和它在Python中的实…

万金油表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

chatgpt赋能Python-numpy_分割

Numpy 分割:简介与应用 什么是 Numpy 分割? Numpy 是一种基于 Python 的科学计算库,它提供了对多维数组的支持。其中,分割是 Numpy 中一个非常重要的操作,它允许我们将一个数组沿着指定的轴切分成多个子数组&#xf…

synchronized 底层原理

synchronized 关键字的底层原理 jdk5 之前 synchronized 是重量级锁,但是jdk6 之后会有一个锁升级的过程 Monitor实现的锁属于重量级锁,你了解过锁升级吗? Java中的synchronized有偏向锁、轻量级锁、重量级锁三种形式,分别对应了锁只被一个…

Apache Zeppelin系列教程第六篇——Zengine调用Interpreter原理分析

Apache Zeppelin系列教程第五篇——Interpreter原理分析_诸葛子房_的博客-CSDN博客 Apache Zeppelin系列教程第四篇——JDBCInterpreter原理分析_诸葛子房_的博客-CSDN博客 前文介绍jdbc interpreter和interpreter模块交互代码,本篇文章主要分析Zengine调用Interp…

智能的本质人工智能与机器人领域的64个大问题阅读笔记(三)

目录 机器智能提高到人类的水平或者人类智能下降到机器的水平,都可以到达图灵点。 或许图灵测试是一个自我实现的预言:我们(声称)在打造“聪明”机器的同时,我们也在把人变笨。 不长脑的机器和不思考的人没什么两样&…

工作利器:三种简单方法将PPT转换成PDF

PDF是一种常用的文件格式,适合数据传输和阅读。在工作中,有时我们需要将PPT文件转换为PDF格式以方便使用。下面是几种将PPT转换为PDF的方法,其中方法二将修改为使用记灵在线工具进行转换。 方法一:直接将文件导出为PPT 一般来说…

OpenHarmony3.1安全子系统-签名系统分析

介绍 应用签名系统主要负责鸿蒙hap应用包的签名完整性校验,以及应用来源识别等功能。 子系统间接口: 应用完整性校验模块给其他模块提供的接口;完整性校验: 通过验签,保障应用包完整性,防篡改;…

postman接口自动化测试

Postman除了前面介绍的一些功能,还有其他一些小功能在日常接口测试或许用得上。今天,我们就来盘点一下,如下所示: 1.数据驱动 想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中,然…

上周,又劝退了10几个...

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

chatgpt赋能Python-openpyxl_批注

Openpyxl 批注简介 Openpyxl 是一个用于操作 Microsoft Excel 文件的 Python 库,它提供了许多方便的功能来读取、写入和修改 Excel 文件。其中一个功能是批注,可以在单元格中添加注释或提醒。 Openpyxl 批注的具体用途 Openpyxl 批注在 Excel 工作表中…

应届毕业生第一份C++程序员工作看重什么?我聊聊自己的看法

大家知道应届毕业生的第一份工C程序员工作看重什么,我相信那位同学可能他那个想去做的时候就说啊,因为第二家公司是世界杯公司吗,是单休哈对吧,而且待遇没有另一家高。我相信我们大部分人其实都看中一个,是累不累啊&am…