初识视觉SLAM(视觉SLAM十四讲ch1~ch2的收获与总结)

news2024/11/26 17:52:13

视觉SLAM14讲ch1和ch2的学习

  • 视觉SLAM14讲ch1和ch2的学习
      • 前言:
  • 一、SLAM是什么
  • 二、视觉SLAM14讲学习前的基础
  • 三、初步了解
    • 1. 小萝卜的例子
    • 2. 了解一些视觉SLAM的框架
    • 3. 一些数学问题的表述

视觉SLAM14讲ch1和ch2的学习

前言:

开始学习视觉SLAM,全过程以高翔老师的视觉SLAM十四讲的学习为主,逐步了解并熟练掌握视觉SLAM的理论与实践,并且不停记录学习过程与心得。

一、SLAM是什么

SLAM(同时定位与地图构建),是指搭载特定传感器的主体,在没有环境先验信息的情况下,在运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器是相机,那就称为视觉SLAM。

二、视觉SLAM14讲学习前的基础

此书的所有源代码可以在GitHub上下载,网址为:https://github.com/gaoxiang12/slambook2
最好有一些以下基础:

  • 数学方面:高数、线代、概率论
  • C++基础
  • Linux基础

三、初步了解

1. 小萝卜的例子

不同角度可爱的小萝卜
图中的小萝卜是比较建议的小机器人,可以进行信号收发、移动、对外界的感知。
想要让小萝卜自主运动,必须要考虑的两个基本问题就是:我在哪? 我周围是啥?
想要回答这两个问题,就需要对自身进行定位并建立地图
也就是:我在哪——定位;我周围是啥——建图。

定位主要是小萝卜自身
建图主要是小萝卜对外界的感知

其中定位和建图是密不可分、相辅相成的,精准的定位需要准确的地图、准确的地图是来自精准的定位

机器人对外界环境的感知主要是通过传感器进行的。
传感器主要分为两种:

  • 携带与机器人上的传感器有 :相机、激光传感器、 IMU等

  • 安装于环境中的传感器有 :导轨、二维码等

环境中的传感器要比携带的传感器限制多一些,比如:GPS必须在能接受到卫星信号的情况下才能使用、二维码并不是任何地方都能够张贴的。而携带在本体上的传感器是通过一些间接的物理量来获取位置的信息。

因为,即将学习的是视觉SLAM,所以主要了解小萝卜的眼睛也就是现实中的相机。

相机的分类以及优缺点

相机种类简介优点缺点
单目相机利用视差
测量相对深度
结构简单、成本低、便于标定和识别单张图片无法确定物体真是大小
具有尺度不确定性
双目相机利用基线估计像素的空间位置
类似于人眼
基线距离越大,测量距离越远
可以运用到室内和室外
配置复杂、量程和精度收到基线和分辨率的限制、计算消耗资源
需要GPU(图形处理器)和FPA设备(现场可编程门阵列)加速用两部相机来定位
深度相机(RGB_D)利用 红外结构光ToF 测量深度信息
主要用来三维成像和测量距离
节约大量的计算资源范围窄、噪声大、事业小、容易受日光干扰、无法测量透射材质、在室外很难应用

2. 了解一些视觉SLAM的框架

SLAM经典框架
整个视觉 SLAM 流程分为以下几步:

  1. 传感器信息读取,在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机
    器人中,还可能有码盘、惯性传感器等信息的读取和同步。
  2. 视觉里程计 (Visual Odometry, VO),视觉里程计任务是估算相邻图像间相机的运动,
    以及局部地图的样子。VO 又称为前端(Front End)。
  3. 后端优化(Optimization),后端接受不同时刻视觉里程计测量的相机位姿,以及回
    环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,
    又称为后端(Back End)。
  4. 回环检测(Loop Closing),回环检测判断机器人是否曾经到达过先前的位置。如果
    检测到回环,它会把信息提供给后端进行处理。
  5. 建图(Mapping),它根据估计的轨迹,建立与任务要求对应的地图

视觉里程计:

视觉里程计通过相邻帧之间的图像估计相机运动,并恢复场景的空间结构,但是计算相邻时刻的运动,不关心再往前的信息。但前端过程中必然存在误差,误差会不断的积累,形成累积漂移。为了解决漂移的问题,所以进行回环检测后端优化

后端优化:

后端优化主要就是处理SLAM过程中的噪声问题;
后端优化需要考虑的问题就是:如何从带有噪声的数据中估计整个系统的状态,以及这个状态估计有多大的不确定性——这称为最大后验概率估计
在视觉SLAM中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端主要时滤波与非线性优化算法。
SLAM问题的本质:对运动主体和周围环境空间不确定性的估计。(状态估计理论——估计状态的均值和不确定性)

回环检测:

作用: 解决位置估计随时间飘逸的问题。(当机器人再次经过之前已经经过的位置时,机器人却没有认出来)
目标: 通过某种手段,让机器人知道“回到原点”这件事情,让机器人具有识别到已经经过的场景的能力。再把位置估计值“拉回去”。
手段: 判断位置间差异,计算图像之间的相似性。
结果: 可以将得到的信息告诉后端优化算法,把轨迹和地图调整到符合回环检测结果的样子。

视觉SLAM十四讲中的回环检测图片表达
建图:

  • 度量地图(强调精确的表示地图中的位置关系)

    • 稀疏地图:由路标组成的地图
    • 稠密地图:着重于建模所有看到的东西(可用于导航)(储存空间耗费较大)
  • 拓扑地图(更加强盗元素之间的关系)

是一个图:由点和边组成 只考虑节点间的连通性,例如 A,B 点是连通的,而不考虑如何从 A 点到达 B 点的过程
它是一种更为紧凑的表达方式。但,拓扑地图不擅长表达具有复杂结构的地图

视觉SLAM十四讲中对地图描述的图

3. 一些数学问题的表述

对于视觉SLAM,本身就是定位和建图,所以只需要关心运动和观测。因为确定运动情况,才能对机器人进行实时的定位,准确的观测才嫩建立起精确的地图。因此在数学表达中,可以抽象出两个描述即运动模型观测模型

运动方程:
从k-1时刻到k时刻,小萝卜x的变化
x ⃗ = f ( x k − 1 ⃗ , u k ⃗ , w k ⃗ ) , k = 1 , … … , K \vec x_ = f(\vec {x_{k-1}} ,\vec {u_k},\vec {w_k}), k = 1,……,K x =f(xk1 ,uk ,wk )k=1,……K
u k ⃗ \vec {u_k} uk 是运动传感器的读数, w k ⃗ \vec {w_k} wk 是运动过程中加入的噪声。
观测方程:
小萝卜在 x k x_k xk处位置上看到了某个路标点 y k y_k yk,产生了一个观测数据 z k , j z_{k,j} zk,j
z k , j ⃗ = h ( y j ⃗ , x k ⃗ , v k , j ⃗ ) , k , j ∈ O \vec {z_{k,j}} = h(\vec {y_j} ,\vec {x_k},\vec {v_{k,j}}), k ,j \in O zkj =h(yj ,xk ,vk,j )k,jO
v k , j ⃗ \vec {v_{k,j}} vk,j 是观测的噪声,O是一个集合。

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

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

相关文章

MMDetection 3.x 自定义数据集

最近在调研目标检测方面的技术实现,发现关于 MMDetection 自定义数据集的文章,多是就 2.x 版本进行描述的,而关于 3.x 版本的则比较少。有些文章在制作COCO数据集的时候,需要修改多处源代码,而这是没有必要的。本文主要…

【论文阅读】PureGaze

复现论文 PureGaze PureGaze Overview 这篇文章在purify的角度重新定义了gaze estimation的这个问题。 对提纯问题的定义 基于提纯的思想,可以把 gaze estimation 的问题定义为 g F( E( I ) )。 其中,E 是一个特征提取的函数,F 是一个回…

Java中的null总结

日常工作,遇见几次null的语法报错,整理以下Java中null: 🍁 null是一个关键字,对大小写敏感,像public、static… 🍁 null是所有引用数据类型的默认值(int默认0、boolean默认false…)…

HTB-Jeeves

HTB-Jeeves信息收集80端口50000端口![在这里插入图片描述](https://img-blog.csdnimg.cn/5824bf345bc040ee9e449bebeade9495.png)开机kohsuke -> Administrator信息收集 80端口 ask jeeves是一款以回答用户问题提问的自然语言引擎,面对问题首先查看数据库里是否…

耳机输出电路中的耦合电容设计

分析耳机输出电路。 因为其中的输出耦合电容有6个这么多,有点奇怪。 耳机输出电路的实物外观长这样: 音频解码芯片(型号WM8988)输出音频信号,经过6个耦合电容,最终在耳机接口输出: 关键看靠近…

我的世界 为何用java开发?

mc用java开发就很好滴说明了一点编程语言本身只是个工具工具的意义在于被使用,老外搞这些工具,都带有一个明确的目的性,就是我要做什么然后再来看,我们怎么用手头上的工具将其实现。 mc的开发人员最早就是一个普通的java程序员&a…

GloVe词向量自定义函数实现词向量降维

TEXT.build_vocab(train_data, max_size10000, vectorsglove.6B.100d) LABEL.build_vocab(train_data) pretrained_embedding TEXT.vocab.vectors上面代码加载了glove.6B.100d词向量,假设我需要设计一个函数,将词向量长为100映射到长为50,这…

在Ubuntu20.04下安装Autoware.universe和Carla并进行联合仿真

在Ubuntu20.04下安装Autoware.universe和Carla并进行联合仿真一、安装Carla0.9.13二、安装 UnrealEngine 4.26三、安装Autoware.universe四、设置 OpenPlanner五、运行Carla和Autoware一、安装Carla0.9.13 1、进入Carla 的官方 github 页面,找到0.9.13版本 https:/…

代码随想录算法训练营第五十八天-单调栈1|739. 每日温度 496.下一个更大元素 I

739. Daily Temperatures public class DailyTemperatures {//暴力解法public int[] dailyTemperatures(int[] T){int length T.length;int[] result new int[length];for(int i 0; i < length; i){int current T[i];if(current < 100){for(int j i 1; j < len…

C++语法(13)---- 模拟实现priority_queue

C语法&#xff08;12&#xff09;---- 模拟实现queue和stack_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130068637 目录 1.使用 2.模拟实现 1.数据元素 2.数据建立 3.函数实现 4.向上调整和向下调整 3.仿函数&#xff08;函数对象&…

【马蹄集】第五周作业

第五周作业 目录MT2030 邮箱地址MT2039 换换换MT2040 银行账户MT2041 三角形的个数MT2046 巨大的错误MT2030 邮箱地址 难度&#xff1a;钻石    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 一个地址由 <username><hostname>[/resource] …

DAY 34 正则表达式

正则表达式 REGEXP&#xff1a; Regular Expressions&#xff0c;由一类特殊字符及文本字符所编写的模式&#xff0c; 其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c; 类似于增强版的通配符功能&#xff0c;但…

day13 信号机制 (上)

目录 信号的概念 信号的发送和定时器 信号的函数 定时器函数 信号的捕捉 信号的概念 概念&#xff1a; 信号是软件层次上对中断机制的一种模拟&#xff0c;是一种异步通信方式&#xff0c;所有信号的产生及处理都是有内核完成的。 信号的产生&#xff1a; 1、按键产生…

Excel常用函数公式20例

目录 一、【IF函数条件判断】 二、【多条件判断】 三、【条件求和】 四、【多条件求和】 五、【条件计数】 六、【多条件计数】 七、【条件查找】 八、【多条件查找】 九、【计算文本算式】 十、【合并多个单元格内容】 十一、【合并带格式的单元格内容】 十二、…

SpringBoot整合minio实现对象存储

分布式文件系统应用场景 互联网海量非结构化数据的存储需求电商网站&#xff1a;海量商品图片视频网站&#xff1a;海量视频文件网盘&#xff1a;海量文件社交网站&#xff1a;海量图片 minio的概念 Minio是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊…

淘宝天猫数据分析工具推荐(竞品数据监控查询)

在当前的电商环境下&#xff0c;天猫平台的商家非常多&#xff0c;且不同商家的营销策略、手段等都不尽相同。对于商家而言&#xff0c;面对庞大的竞争对手&#xff0c;做好对竞争对手的监控工作也是一个非常重要的课题。 商家做好竞品监控的好处有哪些呢&#xff1f; 1、做好竞…

想毕业我阿里P8测开?除非把整条业务线都裁了.我的底气何来?

简单介绍一下自己&#xff0c;某985硕士&#xff0c;现在阿里智能事业部&#xff0c;视频云中台&#xff0c;测试开发岗。年纪嘛&#xff0c;快接近你们说的去送外卖的年纪了。主要的工作职责是参与制定测试保障策略和建立测试保障体系&#xff0c;开发和维护定制的自动化测试工…

cm-14.1 Android系统启动过程分析(n)- 关机/重启/重置/升级的那些事(偏嵌入式方向)

声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的。本文参考了一些书籍的若干章节。本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编…

Linux-初学者系列——篇幅3_操作界面获取帮助

操作界面获取帮助-目录1、获取帮助信息-man2、获取帮助信息-help3、获取帮助信息-info上篇: Linux-初学者系列——篇幅2_系统命令界面 利用帮助命令自学&#xff1a;man help info1、获取帮助信息-man 查看命令和部分文件帮助说明信息 使用方法&#xff1a; man [参数选项]…

Linux-系统大概介绍

桌面和终端基本使用 使用CtrlAlt可以取消状态&#xff0c;利于TabAlt切屏 在Linux中&#xff0c;WIN键是Super键 打开终端&#xff0c;终端有点像Windows的命令行&#xff0c;然后Ctrlaltf2可以切换为纯命令行&#xff0c;Ctrlalt是调出鼠标&#xff0c;Ctrlaltf1切回图形用户…