orb-slam2(学习笔记)+相机
单目(Monocular)、双目(Stereo)、深度相机(RGB-D)
深度相机能够读取每个像素离相机的距离 ,单目相机 只使用一个摄像头进行SLAM的做法叫做单目SLAM(Monocular SLAM),结构简单,成本低。
照片拍照的本质,就是在相机平面的一个投影,在这个过程当中丢失了这个场景的一个维度,就是深度(距离信息)
单目视觉丢失深度 导致无法判断场景物体的具体情况
单目SLAM 估计的轨迹和地图,与真实的轨迹和地图之间相差一个因子,这就是所谓的尺度(scale)由于,单目SLAM无法凭借图像来确定真实的尺度,又称为尺度不确定
单目SLAM 的缺点:1、只有平移后才能计算深度 2、无法确定真实的尺度。
双目相机:双目相机数据:通过左眼和右眼的差异,判断场景中的物体离相机的距离
双目相机和深度相机的目的是,通过某种手段测量物体离我们之间的距离。如果知道这个距离,场景的三维结构就可以通过这个单个图像恢复出来,消除了尺度不确定性。
双目相机是由于两个单目相机组成,这两个相机之间的距离叫做基线(baseline)这个基线的值是已知的,我们通过这个基线的来估计每个像素的空间位置(就像是人通过左右眼的图像的差异,来判断物体的远近)
但是计算机双目相机需要大量的计算才能估计出每个像素点的深度。双目相机的测量到的深度范围与基线相关,基线的距离越大,能够检测到的距离就越远。
双目的相机的缺点是:配置和标定都比较复杂,其深度测量和精度受到双目的基线和分辨率的限制,而且视差的计算非常消耗计算机的资源。因此在现有的条件下,计算量大是双目相机的主要问题之一。
深度相机是2010年左右开始兴起的一种相机,他的最大的特点就是采用红外结构光或者(Time-of-Flight)ToF原理,像激光传感器那样,主动向物体发射光并且接受返回的光,测量出物体离相机的距离。这部分并不像双目那样通过计算机计算来解决,而是通过物理测量的手段,可以节省大量的计算量。目前RGBD相机主要包括KinectV1/V2, Xtion live pro,Realsense,目前大多数的RGBD相机还存在测量范围小,噪声大,视野小,易受到日光干扰,无法测量透射材质等诸多问题。
经典视觉SLAM框架
视觉slam的路程分成以下几步:
1、传感器信息的读取。
2、视觉里程计(Visual Odometry,VO)视觉里计的任务是,估算相邻图像之间相机的运动,以及局部地图。VO也称为前端(Front End).
3、后端优化(Optimization)后端是接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息。(Back End)
4、回环检测(loop Closing)。回环检测是判断机器人是否或者曾经到达过先前的位置。如果检测到回环,它会吧信息提供给后端进行处理
5、建图(Mapping),他根据估计出的轨迹,建立与任务要求的对应的地图。
视觉里程计
视觉里程计关心的是,相邻图像之间相机的移动,最简单的情况就是计算两张图像之间的运动关系。
为了定量的估计相机的运动,必须了解相机与空间点的几何关系。
如果仅仅用视觉里程计来计算轨迹,将不可避免的出现累计漂移,注意,这个地方说的是累计漂移,
为了解决漂移问题。我们还需要两种检测技术:后端优化和回环检测的。回环检测负责吧“”机器人回到原来的位置“”这件事情给检测出来。而后端优化则是根据这个信息,优化整个轨迹形状
后端优化
后端优化主要是指在处理SLAM噪声问题,虽然我希望所有的数据都是准确的,但是在现实当中,再精确的传感器也是有一定噪声的。后端只要的考虑的问题,就是如何从带有噪声的数据中,估计出整个系统的状态,以及这个状态估计的不确定性有多大(最大后验概率(MAP))
视觉里程计(前端)给后端提供待优化的数据。
后端负责整体的优化过程,后端面对的只有数据,并不关心数据到底是来自哪个传感器。
在视觉SLAM当中,前端和计算机视觉领域更为相关,例如:图像的特征提取与匹配。
后端只要是滤波和非线性优化算法。
回环检测
回环检测(闭环检测(Loop Closure Detection))主要是解决位置估计随时间漂移的问题。为了实现回环检测,我们需要让机器人具有识别曾经到达过场景的能力。通过判断图像之间的相似性,来完成回环检测。如果回环检测成功,可以显著地减小累计误差。所以视觉回环检测,实际上是一种计算图像数据相似性的算法。
建图
建图(Mapping)是指构建地图的过程。地图是对环境的描述,但是这个描述并不是固定。(如果是激光雷达的地图,就是一个二维的地图,如果是其他视觉slam 三维的点云图)
地图可以分成度量地图和拓扑地图两种。
1、度量地图(Metric Map)
度量地图强调的是精确表示出地图中物体的位置关系,通常我们用稀疏(Sparse)与稠密(Dense)对他们进行分类。稀疏地图进行了一定程度的抽象,并不需要表达所有物体。例如:我们需要一部分有代表意义的东西(简称为路标landmark),
2D栅格地图 2D拓扑地图
这里的稀疏地图,就是又路标组成的地图。
相对于稀疏地图而言,稠密地图将建模所看到的所有的东西
3D点云地图 3D网格地图
对于定位而言:稀疏的路标地图就足够了。而要用于导航,我们往往需要稠密地图。
稠密地图通常按照分辨率,由许多个小块组成。二维的度量地图是许多小格子(Grid),三维则是许多小方块(Voxel)。一般而言,一个小方块,有占据,空闲,未知三种状态,来表达这个格子内是不是有物体。
一些用于视觉导航的算法 A*, D*,算法这种算法需要地图能够存储每个格点的状态,浪费了大量的存储空间。而且大多数情况下,地图的很多细节是无用的。另外,大规模度量地图有的时候回出现一致性问题。很小的一点转向误差,可能会导致两间屋子之间的墙出现重叠,使得地图失效。
2、拓扑地图(Topological Map)
相比于度量地图的精准性,拓扑地图则更强调了地图元素之间的关系。拓扑地图是一个图。这个图是由节点和边组成,只考虑节点间的连通性。它放松了地图对精确位置的需要,去掉了地图的细节问题,是一种更为紧凑的表达方式。
如何在拓扑图中,进行分割形成结点和边,如何使用拓扑地图进行导航和路径规划。
相关文章:

如何在nuget上传自己的包+搭建自己公司的NuGet服务器(新方法)
运维相关:http://www.cnblogs.com/dunitian/p/4822808.html#iis 先注册一个nuget账号https://www.nuget.org/ 下载并安装一下NuGetPackageExplorer:https://github.com/NuGetPackageExplorer/NuGetPackageExplorer 创建一个包(vs其实也是可以…

【Codeforces】1080C Masha and two friends (棋盘染色)
http://codeforces.com/problemset/problem/1080/C 给定一个棋盘,(1,1)的位置是白色,观察可以知道,如果横纵坐标之和是偶数,那么是白色,奇数的话就是黑色。 只要算出染色以后白色方…
Java多线程001——一图读懂线程与进程
本博客 猫叔的博客,转载请申明出处前言 本系列将由浅入深,学习Java并发多线程。 一图读懂线程与进程 1、一个进程可以包含一个或多个线程。(其实你经常听到“多线程”,没有听过“多进程”嘛)2、进程存在堆和方法区 3、…

TermCriteria模板类
学习写vo过程中遇到的 类功能:模板类,作为迭代算法的终止条件。 构造函数: TermCriteria(int type,int maxCount,double epsilon); 参数说明: type 迭代终止条件类型 typeTermCriteria::MAX_ITER/TermCrite…

SQL优化快速入门
最近遇到一个专门进行SQL技术优化的项目,对很多既有的老存储过程进行调优(现在已经不再新增任何存储过程),因此系统的对SQL语句编写进行一次科学的学习变得很有必要。这儿将基于黄德承大神的Oracle SQL语句优化一书,选…
【HDU】4509 湫湫系列故事——减肥记II (区间覆盖 暴力)
http://acm.hdu.edu.cn/showproblem.php?pid4509 给出的时间段是被占用的时间,24h 1440 min,求出这些区间以外的区间长度 把00:00 - 23:59 变成0-1440 1-5都是被占用的区域,暴力很好理解 #include <iostream>…

Java并发编程71道面试题及答案
Java并发编程71道面试题及答案 1、在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User)。 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDa…

USB获取图像实时处理
手写VO的准备工作,调用UAB或者本地相机获取视频图像,读取并保存视频。 #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "openc…

常见数据库 性能
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/582827/blog/778908

【Codeforces】1093C Mishka and the Last Exam
http://codeforces.com/problemset/problem/1093/C 已知b[i]求a[i]和a[n-i1],n是a数组中元素的个数,a数组的下标从1开始 输出b[1]的时候,直接让a[1] 0,a[n] b[0] 接下来的每一组,先让a[i] b[i],然后求…
PHP面试常考内容之Memcache和Redis(2)
你好,是我琉忆。继周一(2019.2-18)发布的“PHP面试常考内容之Memcache和Redis(1)”后,这是第二篇,感谢你的支持和阅读。本周(2019.2-18至2-22)的文章内容点为以下几点&am…

毫米波雷达、ADAS中的应用以及毫米波雷达的检测、测距、测速和角度测量
毫米波雷达的检测、测距、测速和角度测量 毫米波(Millimeter-Wave,缩写:MMW),是指长度在1~10mm的电磁波,对应的频率范围为30~300GHz.根据波的传播理论,频率越高,波长越短,分辨率越高…

【VMC实验室】在QCloud上创建您的SQL Cluster(1)
在国内公有云厂商上搭建一套SQL Cluster的难度相信做Windows的童鞋都会很清楚,并非它的搭建有多少难度,只是很多细节需要注意。腾讯云,QCloud,为什么选择QCloud来做这个实验,除了QCloud是我的东家(啊呸&…

【Codeforces】808D Array Division(前后两部分和相等)
http://codeforces.com/contest/808/problem/D 给你一个数组,问:是否可以通过移动一个数字的位置,求只能移动一次,使得这个数组前后部分的和相等,前后部分不一定等长 一个a数组储存数据,另一个b数组b[i]表…

想要确保架构目标达成?适合度函数了解一下
Paula Paul和Rosemary Wang撰写的一篇博文中介绍了适应度函数(fitness function)的基本概念、入门方法,并给出了如何验证各种架构质量的一些实例。文中提出,适应度函数驱动开发的方法可用于编写测定系统符合架构目标的测试&#x…

标定(二)----------双目相机与IMU联合标定(工具箱使用方法——Kalibr)
16个相机参数: Overview ethz-asl/kalibr is a toolbox that solves the following calibration problems: Multiple camera calibration: intrinsic and extrinsic calibration of a camera-systems with non-globally shared overlapping fields of view Cam…

【Codeforces】659B Qualifying Contest (sort)
http://codeforces.com/problemset/problem/659/B n个人,m个地区,选出每个地区分数最高的两个人 下面有n行,每一行的第一个数表示姓名,第二个数是地区的序号,第三个数是分数 It is guaranteed that all surnames of…

Protractor测试环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 安装node.js.然后,在cmd下,进入E盘下的,我们自己新建的protractor文件夹下, npm install -g protractor 这样就会在本地安装好两个命令行工具:protractor和webd…

Promise和Promise的方法
(Promise和Promise的方法) Promise是ES6一个伟大的发明,他使我们从回调地狱中能够走出来。 什么是Promise 从字面上来看,Promise就是一个承诺。那么,在ES6当中,Promise通常用来控制异步操作。当一个异步操作…

镜头评价指标及测试方法(三)--------测量原理及3D相机调查
1.测量原理: 1.1、通过红外结构光(Structured Light)来测量像素距离,如Kinect1、Project Tango1、Intel Realsense等; 通过近红外激光器,将具有一定结构特征的光(比如离散光斑、条纹光、编码结构光等)投射到…

Android--Retrofit的简单使用(一)
1,如果不太了解retrofit的同学可以先去官网学习一下简单使用:http://square.github.io/retrofit/,这里我们以一个简单的Get请求的例子来练习一下 2,https://api.douban.com/v2/movie/top250?start0&count10 目标地址…

【Codeforces】920A Water The Garden(浇花)
http://codeforces.com/problemset/problem/920/A 给你花坛的数目,花坛都是连续的,某一些花坛里有水龙头,给出了这些有水龙头的位置 The garden from test 1. White colour denotes a garden bed without a tap, red colour — a garden be…
Work with Alexa :Echo匹配连接到Alexa
背景: 通过蓝牙可以让你的智能家居设备和Echo设备连接起来,从而达到Echo通过语音控制智能家居设备。 什么事Alexa Gadgets? 我的理解Alexa Gadgets是智能家居设备的一部分,包含硬件和软件。硬件:蓝牙模块;软…

Maven 学习Tips
2019独角兽企业重金招聘Python工程师标准>>> 使用 deploy 应该注意的地方 在项目的pom文件中增加如下节点:<project><distributionManagement><repository><id>releases</id><url>http://192.168.1.99:8081/nexus/c…

【Codeforces】1015B Obtaining the String(字符串 交换)
http://codeforces.com/contest/1015/problem/B n 表示 字符串的长度 然后是两个字符串,每一次只能交换相邻的两个,如果选择第i个字符的话,只能交换第i个和第i1个 然后输出每一次交换选定的位置 暴力,模拟,queue&am…

07 分支管理 —— Feature分支
2019独角兽企业重金招聘Python工程师标准>>> 07 分支管理 —— Feature分支 软件开发中,总有无穷无尽的新的功能要不断添加进来。添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以࿰…

适用于0基础小伙伴的HTML知识点总结 先到先得哟
HTML基础知识点分享 前段时间一直忙于私下学习消化一些PHP中的知识体系,导致博客开通至今一直没发表相关技能贴。最近呢~博主夏天我正在进行前半段知识体系和框架的总结阶段。借此,抽空给大家分享一下私下自己学习时的一些心得体会以及知识体系ÿ…

SLAM小结——求解退化问题解析(F、H、E)(面试经验总结)
总结: 1 Essential Matrix E t ^ R 为3*3的矩阵,奇异值为 [ u, u, 0] ^ T 的形式。为本质矩阵的内在性质。 性质:理论上综合旋转、平移共有6个自由度,因尺度等价,E有5个自由度。 求解:一般使用…

【Codeforces】1065B Vasya and Isolated Vertices (无向图的)
http://codeforces.com/problemset/problem/1065/B 一个图,给定顶点数,边数,求解最小孤立点数和最大孤立点数 最小的话,一个边连接两个顶点成为一个整体,如果最后有多余的点,那些就是孤立的点 最大就是找…
这些资源网站为什么能获得5万知乎大佬推荐,而我错失了什么吗?
现在很多朋友可能只要是一听到资源网站,想必就会好奇是什么网站,用用看是不是由说的那么厉害!其实资源网站给我们的诱惑是在是太大了,其主要原因是可以帮助我们搜索到很多意想不到的资源! 为了回应大家的需求ÿ…