视觉SLAM十四讲学习笔记(一)初识SLAM

目录

前言

一、传感器

1 传感器分类

2 相机

二、经典视觉 SLAM 框架

1 视觉里程计

2 后端优化

3 回环检测

4 建图

5 SLAM系统

三、SLAM 问题的数学表述

四、Ubuntu20.04配置SLAM十四讲


前言

  • SLAM: Simultaneous Localization and Mapping 同时定位与地图构建(建图)。
  • 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环地的模型。同时储计自己的运动。
  • 视觉SLAM:以相机为主要传感器的SLAM。
  • 问题:同时从图像中估计相机的运动以及环境的情况。传感器在空间运动中将自己的运动估计出来,返给使用者;在运动过程中描述出运动环境。

哔哩哔哩课程连接:【高翔】视觉SLAM十四讲_哔哩哔哩_bilibili

一、传感器

相机在场景中运动的过程,将得到一系列连续变化图像。视觉 SLAM 的目标,是通过这样的一些图像,进行定位和地图构建。

1 传感器分类

一类传感器是携带于机器人本体上的,例如机器人的轮式编码器、相机、激光等等。

另一类是安装于环境中的,例如导轨、二维码标志等等。安装于环境中的传感设备,通常能够直接测量到机器人的位置信息,简单有效地解决定位问题。然而,由于它们必须在环境中设置,在一定程度上限制了机器人的使用范围。

2 相机

相机的本质

  • 以二维投影形式记录了三维世界的信息
  • 此过程丢掉了一个维度:距离

各类相机主要区别:有没有深度信息

  • 单目:没有深度,必须通过移动相机产生深度 Moving View Stereo
  • 双目:通过视差计算深度 Stereo
  • RGBD:通过物理方法测量深度

相机的分类

按照相机的工作方式,把相机分为单目(Monocular)、双目(Stereo)和深度相机(RGB-D)三个大类。此外,SLAM 中还有全景相机Event 相机等特殊或新兴的种类。

单目相机只使用一个摄像头进行 SLAM 的做法称为单目 SLAM(Monocular SLAM)。 这种传感器结构特别的简单、成本特别的低,所以单目 SLAM 非常受研究者关注。由于单目相机只是三维空间的二维投影,所以,如果我们真想恢复三维结构,必须移动相机的视角。在单目 SLAM 中也是同样的原理。必须移动相机之后,才能估计它的运动Motion),同时估计场景中物体的远近和大小,不妨称之为结构(Structure)。当相机移动时,这些物体在图像上的运动,形成了视差。通过视差,我们就能定量地判断哪些物体离得远,哪些物体离的近。

单目 SLAM 估计的轨迹和地图,将与真实的轨迹、地图,相差一个因子,也就是所谓的尺度Scale。由于单目 SLAM 无法仅凭图像确定这个真实尺度,所以又称为尺度不确定性。 平移之后才能计算深度,以及无法确定真实尺度,这两件事情给单目 SLAM 的应用造成了很大的麻烦。它们的本质原因是通过单张图像无法确定深度。所以,为了得到这个深度,人们又开始使用双目和深度相机。

双目相机 (Stereo) 和深度相机

共同点

  • 利用图像和场景的几何关系,计算相机运动和场景结构Motion & Structure
  • 三维空间的运动和结构
  • 图像来自连续的视频

双目相机和深度相机的目的,在于通过某种手段测量物体离我们的距离,克服单目无法知道距离的缺点。如果知道了距离,场景的三维结构就可以通过单个图像恢复出来,也就消除了尺度不确定性。尽管都是为测量距离,但双目相机 与深度相机测量深度的原理是不一样的。

双目相机由两个单目相机组成,但这两个相机之间的距离(称为基线Baseline))是已知的。我们通过这个基线来估计每个像素的空间位置——这和人眼非常相似。计算机上的双目相机需要大量的计算才能(不太可靠地)估计每一个像素点的深度。双目相机测量到的深度范围与基线相关,基线距离越大,能够测量到的就越远。双目相机的距离估计是比较左右眼的图像获得的,并不依赖其他传感设备,所以它既可以应用在室内,亦可应用于室外。双目或多目相机的缺点是配置与标定均较为复杂,其深度量程和精度受双目的基线与分辨率限制,而且视差的计算非常消耗计算资源,需要使用 GPU 和 FPGA 设备加速后,才能实时输出整张图像的距离信息。

深度相机(又称 RGB-D 相机),最大的特点是可以通过红外结构光或 Time-of-Flight(ToF)原理,像激光传感器那样,通过主动向物体发射光并接收返回的光,测出物体离相机的距离。这部分并不像双目那样通过软件计算来解决,而是通过物理的测量手段,所以相比于双目可节省大量的计算量。目前常用的 RGB-D 相机包括 Kinect/Kinect V2Xtion live pro、Realsense 等。不过,现在多数 RGB-D 相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题,在 SLAM 方面,主要用于室内 SLAM,室外则较难应用。

二、经典视觉 SLAM 框架

整个视觉 SLAM 流程分为以下几步:

1. 传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。

2. 视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。VO 又称为前端(Front End)。

3. 后端优化Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。

4. 回环检测Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。

5. 建图Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。

1 视觉里程计

视觉里程计(Visual Odometry, VO),关心相邻图像之间的相机运动,最简单的情况当然是两张图像之间的运动关系。

视觉里程计的主要方法分为基于特征点的方法和不使用特征点的直接法两种。特征点方法也叫稀疏方法,而使用特征点描述的也叫稠密方法。按照技术手段不同分为两大类——多传感器融合的视觉里程计(以惯性视觉融合为例)和基于深度学习的视觉里程计。前者通过各传感器之间的优势互补提高VO的精度,后者则是通过和深度学习网络结合改善VO的性能.最后通过比较视觉里程计现有算法,并结合VO面临的挑战展望了视觉里程计的未来发展趋势。

VO 能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。叫它为“里程计”是因为它和实际的里程计一样,只计算相邻时刻的运动,而和再往前的过去的信息没有关联。在这一点上,VO 就像一种只有很短时间记忆的物种一样。现在,假们已有了一个视觉里程计,估计了两张图像间的相机运动。那么,只要把相邻时刻的运动“串”起来,就构成了机器人的运动轨迹。

仅通过视觉里程计来估计轨迹,将不可避免地出现累计漂移Accumulating Drift)。这是由于视觉里程计(在最简单的情况下)只估计两个图像间运动造成的。累计误差与回环检测的校正结果如下图所示。

漂移(Drift)将导致无法建立一致的地图,原本直的走廊变成了斜的。为了解决漂移问题,还需要两种技术:后端优化回环检测。回环检测负责把“机器人回到原始位置”的事情检测出来,而后端优化则根据该信息,校正整个轨迹的形状。

2 后端优化

  • 从带有噪声的数据中优化轨迹和地图状态估计问题
  • 最大后验概率估计MAP
  • 前期以EKF为代表,现在以图优化为代表讲

后端优化主要指处理 SLAM 过程中噪声的问题。

后端优化要考虑的问题,就是如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-PosterioriMAP)。这里的状态既包括机器人自身的轨迹,也包含地图。

在视觉 SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法

3 回环检测

回环检测,又称闭环检测(Loop Closure Detection),主要解决位置估计随时间漂移的问题。

为了实现回环检测,我们需要让机器人具有识别曾到达过的场景的能力。例如,我们可以判断图像间的相似性,来完成回环检测。

4 建图

建图(Mapping)是指构建地图的过程。地图是对环境的描述,但这个描述并不是固定的,需要视 SLAM 的应用而定。形形色色的地图:2D 栅格地图、拓扑地图以及 3D 点云地图和网格地图:

地图 的形式随 SLAM 的应用场合而定,大体可以分为度量地图拓扑地图两种。

度量地图(Metric Map

度量地图强调精确地表示地图中物体的位置关系,通常我们用稀疏(Sparse)与稠密(Dense)对它们进行分类。稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。例如,选择一部分具有代表意义的东西,称之为路标(Landmark),那么一张稀疏地图就是由路标组成的地图,而不是路标的部分就可以忽略掉。相对的,稠密地图着重于建模所有看到的东西。对于定位来说,稀疏路标地图就足够。

拓扑地图(Topological Map

相比于度量地图的精确性,拓扑地图则更强调地图元素之间的关系。拓扑地图是一个图(Graph),由节点和边组成,只考虑节点间的连通性。

5 SLAM系统

按照运动和观测方程是否为线性,噪声是否服从高斯分布进行分类,分为线性/非线性和高斯/非高斯系统。其中线性高斯系统(LG)是最简单的,它的无偏的最优估计可以由卡尔曼滤波器(KF)给出。而在复杂的非线性非高斯系统(None-Linear Non-Gaussian,NLNG系统)中,使用以扩展卡尔曼滤波器(Extended Kalman Filter, EKF)和非线性优化两大类方法去求解。

直至21世纪早期,以EKF为主的滤波器方法在SLAM中占据了主导地位。在工作点处把系统线性化,并以预测——更新两大步骤进行求解。最早的视觉SLAM系统就是基于EKF开发的。随后,为了克服EKF的缺点(例如线性化误差和噪声高斯分布假设),人们开始使用例子滤波器(Particle Filter)等其他滤波器,乃至使用非线性优化的方法。目前,主流视觉SLAM使用以图优化为代表的优化技术进行状态估计。只要计算资源允许,通常都偏向于使用优化方法。

三、SLAM 问题的数学表述

1. 什么是运动?我们要考虑从 k 1 时刻到 k 时刻,小萝卜的位置 x 是如何变化的。

2. 什么是观测?假设小萝卜在 k 时刻,于 xk 处探测到了某一个路标 yj,要考虑这件事情是如何用数学语言来描述的。

四、Ubuntu20.04配置SLAM十四讲

本章需要虚拟机或ubuntu系统,自行安装。下载配套资源:

git clone https://github.com/gaoxiang12/slambook.git

找到/home/yang/slam/slambook/ch2/,在个文件夹下,打开终端,执行以下操作:

g++ /home/yang/slam/slambook/ch2/helloSLAM.cpp
ls
./a.out

然后

g++ /home/yang/slam/slambook/ch2/helloSLAM.cpp -o helloSLAM
ls
./helloSLAM

gedit CMakeLists.txt

cmake .

make

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

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

相关文章

SSRF漏洞给云服务元数据带来的安全威胁

文章目录 前言元数据服务威胁1.1 Metadata元数据1.2 RAM资源管理角色1.3 STS 临时凭据利用1.4 CF云环境利用框架1.5 元数据安全性增强 TerraformGoat2.1 永久性AccessKey2.2 SSRF靶场环境搭建2.3 腾讯云CVM配角色2.4 接管腾讯云控制台 SSRF组合拳案例3.1 上传图片功能SSRF3.2 文…

DataX详解和架构介绍

系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录DataX是什么&#xff1f…

外包干了10个月,技术退步明显.......

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

苹果macbook电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法

苹果电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法 如何在Mac上恢复误删除的文件?在日常使用Mac电脑时,无论是工作还是娱乐,我们都会创建和处理大量的文件。然而,有时候可能会不小心删除一些重要的文件&#x…

电缆线的阻抗50Ω,真正含义是什么?

当我们提到电缆线的阻抗时,它到底是什么意思?RG58电缆通常指的是50Ω的电缆线。它的真正含义是什么?假如取一段3英尺(0.9144米)长的RG58电缆线,并且在前端测量信号路径与返回路径之间的阻抗。那么测得的阻抗是多少?当然…

unity实现第一人称和第三人称

在角色设置两个挂载点,第一人称时,相机放在eys上面,切换第三人称时,放置到3rd节点上面,调整节点位置,达到期望效果 代码 void ThirdView(){Debug.Log("切换到第三人称");camera.SetParent(third…

财务数据处理问题及解决方案分享

一、平台介绍 财务自营计费主要承接京东自营数据在整个供应链中由C端转B端的功能实现,在整个供应链中属于靠后的阶段了,系统主要功能是计费和向B端的汇总。 二、问题描述 近年来自营计费数据量大增,有百亿的数据量,一天中汇总占…

ChatGPT Plus如何升级?信用卡付款失败怎么办?如何使用信用卡升级 ChatGPT Plus?

ChatGPT Plus是OpenAI提供的一种高级服务,它相较于标准版本,提供了更快的响应速度、更强大的功能,并且用户可以优先体验到新推出的功能。 尽管许多用户愿意支付 20 美元的月费来订阅 GPT-4,但在实际支付过程中,特别是…

【ES数据可视化】kibana实现数据大屏

目录 1.概述 2.绘制数据大屏 2.1.准备数据 2.2.绘制大屏 3.嵌入项目中 1.概述 再来重新认识一下kibana: Kibana 是一个用于数据可视化和分析的开源工具,是 Elastic Stack(以前称为 ELK Stack)中的一部分,由 Ela…

机器学习 | 一文看懂SVM算法从原理到实现全解析

目录 初识SVM算法 SVM算法原理 SVM损失函数 SVM的核方法 数字识别器(实操) 初识SVM算法 支持向量机(Support Vector Machine,SVM)是一种经典的监督学习算法,用于解决二分类和多分类问题。其核心思想是通过在特征空间中找到一…

【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器) 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…

海康威视球机摄像头运动目标检测、跟踪与轨迹预测

一、总体方案设计 运动目标检测与跟踪方案设计涉及视频流的实时拍摄、目标检测、轨迹预测以及云台控制。以下是四个步骤的详细设计: 1.室内场景视频流拍摄 使用海康威视球机摄像头进行室内视频流的实时拍摄。确保摄像头能覆盖整个室内空间,以便捕捉所…

如何修改远程端服务器密钥

前言 一段时间没改密码后,远程就会自动提示CtrlAltEnd键修改密码。但我电脑是笔记本,没有end键。打开屏幕键盘按这三个键也没用。 解决方法 打开远程 1、远程端WINC 输入osk 可以发现打开了屏幕键盘 2、电脑键盘同时按住CtrlAlt(若自身电…

【iOS ARKit】人形提取

为解决人形分离和深度估计问题,ARKit 新增加了 Segmentation Buffer(人体分隔缓冲区)和Estimated Depth Data Buffer(深度估计缓冲区)两个缓冲区。人体分隔缓冲区作用类似于图形渲染管线中的 Stencil Buffer&#xff0…

机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

文章目录 1.K-近邻算法思想2.K-近邻算法(KNN)概念3.电影类型分析4.KNN算法流程总结5.k近邻算法api初步使用机器学习库scikit-learn1 Scikit-learn工具介绍2.安装3.Scikit-learn包含的内容4.K-近邻算法API5.案例5.1 步骤分析5.2 代码过程 1.K-近邻算法思想 假如你有一天来到北京…

2月6日作业

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&…

嵌入式软件bug分析基本要求

摘要&#xff1a;软件从来不是一次就能完美的&#xff0c;需要以包容的眼光看待它的残缺。那问题究竟为何产生&#xff0c;如何去除呢&#xff1f; 1、软件问题从哪来 软件缺陷问题千千万万&#xff0c;主要是需求、实现、和运行环境三方面。 1.1 需求描述偏差 客户角度的描…

十分钟GIS——geoserver+postgis+udig从零开始发布地图服务

1数据库部署 1.1PostgreSql安装 下载到安装文件后&#xff08;postgresql-9.2.19-1-windows-x64.exe&#xff09;&#xff0c;双击安装。 指定安装目录&#xff0c;如下图所示 指定数据库文件存放目录位置&#xff0c;如下图所示 指定数据库访问管理员密码&#xff0c;如下图所…

正点原子--STM32通用定时器学习笔记(2)

1. 通用定时器输入捕获部分框图介绍 捕获/比较通道的输入部分&#xff08;通道1&#xff09; 输入通道映射CC1S[1:0]→采样频率CKD[1:0]→滤波方式IC1F[3:0]→边沿检测方式CC1P→捕获分频ICPS[1:0]→使能捕获CC1E 输入部分对相应的TIx输入信号采样&#xff0c;并产生一个滤波后…

【Linux取经路】探寻shell的实现原理

文章目录 一、打印命令行提示符二、读取键盘输入的指令三、指令切割四、普通命令的执行五、内建指令执行5.1 cd指令5.2 export指令5.3 echo指令 六、结语 一、打印命令行提示符 const char* getusername() // 获取用户名 {return getenv("USER"); }const char* geth…