首页 > 其他分享 >ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera

ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera

时间:2023-01-23 15:04:34浏览次数:54  
标签:关键帧 Stereo BA 双目 RGB Camera 单目 ORB

摘要

本文提出ORB-SLAM2一个完整的SLAM系统,用于单目,双目以及RGB-D相机,包括地图重用,回环检测以及重定位能力。本系统工作在实时的标准CPU,在更宽泛的环境中,来自于手持的室内场景,在工业环境中的飞行无人机,以及城市驾驶的小车上。本文的后端基于BA,单目和双目观测考虑精确的轨迹估计。本系统包括一个轻量级的定位模式,该模式利用视觉里程计跟踪为构建的区域,与地图点进行匹配使得零漂移的定位。本工作在29个公开数据集上做了评估,表明是当前精度最高的SLAM解决方案。公开了源码,不仅有利于SLAM社区,而且有利于其他领域的研究者。

1、介绍

、、、、、、

本文建立在单目ORB-SLAM基础上,提出了ORB-SLAM2,有如下的贡献:

a、第一个开源的SLAM,用于单目,双目,RGB-D相机,还包括回环检测,重定位和地图重用;

b、RGB-D结果表明使用BA相比于当前基于ICP,光度测量以及深度误差最小化等方法都要好;

c、通过使用近和源的双目点和单目观测,本双目结果比当前的直接的双目SLAM精度更好;

d、一个轻量级的定位模式,其可以有效重利用地图,在建图模式关闭时。

2、相关工作

3、ORB-SLAM2

用于双目和RGB-D相机的ORB-SLAM2是基于特征匹配的单目ORB SLAM。本系统的概览如下图:

ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera_关键帧

系统主要有三个并行线程:1)跟踪来定位相机通过每一帧,每一帧中找到与局部地图的匹配,然后最小化重投影误差使用只有运动的BA。2)局部建图管理局部地图,然后优化它,执行局部BA,3)回环检测检测大的回环,然后通过执行位姿图优化来纠正累积漂移。本线程启动第四个线程来执行完全的BA,在位姿图优化之后,为了计算最优的结构和运动结果。

本系统嵌入一个位置识别模块基于DBoW2,用于重定位,以免跟踪失败或者在已经建图的场景重新初始化,或者用于回环检测。本系统维持一个共视图,其连接了任何有观测相同点的关键帧,以及一个最小的生成树连接了所有的关键帧。这些图结构允许检索局部窗口的关键帧,以便跟踪和局部建图可以局部操作,允许工作在大环境中,当关闭回环时,位姿图的优化被执行。

系统使用相同的ORB特征来跟踪,建图和位置识别任务。这些特征是对于旋转,尺度鲁棒的,对相机自动增益、自动曝光和照明变化具有良好的不变性,并且可以实时提出和匹配操作,在单词包位置识别中表现出良好的精度/召回性能;

余下的部分,我们提出了双目/深度信息被利用以及系统的哪些元素会被影响。对于每一个系统模块的细节,参考之前单目的文章。

A、单目,近双目和远双目关键点

ORB-SLAM2作为一个基于特征的方法预处理输入来提取特征在显著的关键点位置出,如图2-b;然后输入图像被丢弃,所有系统操作都基于这些特征,以便系统是独立于双目或者RGB-D等传感器。我们的系统能够处理单目,双目关键点,这些关键点进一步分类为近点和远点。

双目关键点由如下三个坐标系定义,Xs=(uL,vL,uR),在左侧图片中的像素为(uL,vL),uR为右侧图片中的水平坐标系。对于双目相机,在左右图片中都提取ORB特征,对于每一副左边ORB,我们都在右边图片中搜索一个匹配,假设双目纠正了图像,这就可以有效完成,以便极线是水平的。然后,我们用左边ORB的坐标系和右边匹配的水平坐标系生成了双目特征点,右边的匹配是通过patch相关的改进的亚像素。对于RGB-D相机,我们在RGB图像上提取ORB特征,每一个特征的坐标为(uL,vL),我们将它的深度值变换到虚拟的由坐标系:

uR = uL - fx *b / d

fx是水平焦距,b是在结构光投射器和红外相机之间的基线,对于Kinect和Asus Xtion近似于8cm。深度相机的不确定性由虚拟的右坐标系的不确定性来表示。用这种方法,系统后续的工作都可以处理来自于双目和RGB-D相机的输入了。

一个双目特征点被分类为近点如果它相关的深度小于40倍的双目或者RGB-D的基线,否则被称为远点。近点 在精确估计深度时,可以从一帧中安全地三角化关键点 ,提供尺度,平移和旋转信息。另一方面远点提供精确的旋转信息但是较弱的尺度和平移信息。当由多视角支持时,我们三角化远点。

单目特征点由两个坐标定义Xm = (uL, vL)在坐标图像中,对应于无法找到立体匹配或在RGB-D情况下具有无效深度值的所有ORB。这些点只能由多视角来执行三角化,不能提供尺度信息,但可以给出旋转和平移的估计。

B、系统引导

使用双目和RGB-D相机的主要好处之一是使用一帧就可以获得深度信息,不需要像单目那样需要一个具体的运动来初始化。在系统启动就可以用第一帧来创建关键帧,将它的位姿设置为起点,创建一个从所有的双目特征点的初始地图。

C、用单目和双目约束的BA

我们的系统执行BA来在跟踪线程中(只有运动的BA)优化相机位姿,在局部建图线程中优化局部窗口的关键帧和点(局部BA),在回环检测之后对所有帧和位姿进行优化(全局BA)。使用g2o里面的LM方法。

只有运动的BA:优化相机方向R(属于SO(3))和位置t,最小化匹配的世界坐标系下的3D点的重投影误差,要么单目x(i,m)或者双目x(i,s),i属于X是所有的匹配集合;

ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera_图优化_02

p是鲁棒的损失函数,∑与关键点尺度相关的协方差矩阵。重投影函数π(.),单目πm和纠正的双目πs,定义如下:

ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera_特征点_03

(fx,fy)是焦距,(cx,cy)是主点,b是基线,都来自于标定。

局部BA:优化共视关键帧KL集合和关键帧PL中观测到的所有点。所有其他的关键帧KF,不在KL中,在PL中观测到的点对代价函数的贡献是在优化中保持固定不变。定义Xk为在PL中和关键帧K中关键点之间的匹配的集合,优化问题如下:

ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera_图优化_04

完全BA:是局部BA的一个特例,地图中所有点和关键帧都被优化,除了第一帧估计来消除测量自由度

D、回环检测和完全的BA

回环检测用两步来执行,首先一个环被检测到并被验证通过,然后回环通过一个位姿图优化来纠正。相比于单目ORB SLAM,单目ORB-SLAM可能发生尺度漂移,双目和深度信息让尺度变得可观测和几何有效,位姿图优化不再需要处理尺度漂移,位姿图基于刚体变换不再是相似性变换。

在ORB-SLAM2中,在位姿图获得一个最优结果之后,我们还融合了一个完全的BA优化。这个优化可能会很耗时,因此执行它在一个单独的线程中,允许系统继续创建地图和检测回环。然而,这为合并BA的输出和地图当前状态带来了挑战。如果一个回环被检测到当优化运行的时候,这会启动全局BA优化。当全局BA结束时,我们需要合并关键帧更新的子集和由全局BA优化的点,在优化运行时插入未更新的关键帧和点,这是通过通过生成树将更新关键帧的校正(即从非优化姿势到优化姿势的转换)传播到非更新关键帧来实现的。未更新的点将根据应用于其参考关键帧的校正进行变换。

E、关键帧插入

ORB-SLAM2使用ORB-SLAM中加入和剔除关键帧的策略,在近点和原点的不同使得引入一个插入关键帧的新的条件,这对于具有挑战的环境(场景的大部分与传感器相距较远)是很关键的。如图3

ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera_关键帧_05

在这样的环境,我们需要足够的近点来精确估计平移,因此如果跟踪的近点的数量小于阈值Tt,帧可以创建至少Tc的新的近点,系统会插入新的关键帧。在所有实验中,经验上Tt=100,Tc=70工作较好。

F、定位模式

我们加入了定位模式,其可以在已经构建的地图上进行轻量级的长期定位,只要环境不发生较大的变化。在这种模式下,局部建图和回环检测线程没有工作,相机通过跟踪来连续定位,如果需要的话,会使用重定位。在这种模式中,跟踪利用视觉里程计匹配,与地图点进行匹配。视觉里程计的匹配是在当前帧中的ORB与来自双目或者RGB-D的深度信息中创建的3D点进行匹配。这些匹配让定位到未构建环境的区域更鲁棒。但是漂移可能会累加。地图点匹配确保了在已有地图上的无漂移定位。

4、评价

、、、

5、结论

、、、

举例来说,未来的扩展可能包括非重叠多摄像机、鱼眼或全向摄像机支持、大规模密集融合、协作映射或增强运动模糊鲁棒性。

 

标签:关键帧,Stereo,BA,双目,RGB,Camera,单目,ORB
From: https://blog.51cto.com/u_15754466/6021895

相关文章

  • 合宙ESP32S3 CameraWebServe 测试demo
    合宙ESP32S3CameraWebServe合宙ESP32S3CameraWebServe测试,我们需要一个OV2640的摄像头模组用来采集图像传输给ESP32的,这里使用的OV2640是之前安信可十周年的白嫖的。现......
  • 【Python学习】cannot write mode rgba as jpg解决
    从网上下载图片作为数据集,想以jpg格式保存,但因为原图片的格式不同,保存时出现了报错在CSDN看到给出的一种解决办法img.convert('RGB')但是依旧会报错,鲜红的报错啊后......
  • Camera | 2.MIPI、CSI基础
    瑞芯微专栏上一篇我们讲解了camera的一些基础概念和知识。我们说了,现在的手机由于高分辨率的要求,现在基本上都是基于MIPI、CSI协议来实现的,本篇讲解MIPI、CSI的一些基础......
  • Opengl ES之RGB转NV21
    前言在上一篇理论文章中我们介绍了YUV到RGB之间转换的几种公式与一些优化算法,今天我们再来介绍一下RGB到YUV的转换,顺便使用OpenglES做个实践,将一张RGB的图片通过Shader的......
  • Opengl ES之RGB转NV21
    前言在上一篇理论文章中我们介绍了YUV到RGB之间转换的几种公式与一些优化算法,今天我们再来介绍一下RGB到YUV的转换,顺便使用OpenglES做个实践,将一张RGB的图片通过Shader......
  • Android开发学习之路--Camera之初体验
      顾名思义Camera就是拍照和录像的功能,像微信里面,我们想拍照传一下照片,就可以通过camera来拍照,然后存储照片,发送给好友。那么微信的app里面是不会直接通过cameraapi来......
  • ORB-SLAM2: an Open-Source SLAM system for Monocular,Stereo and RGB-D Camera
    摘要本文提出ORB-SLAM2一个完整的SLAM系统,用于单目,双目以及RGB-D相机,包括地图重用,回环检测以及重定位能力。本系统工作在实时的标准CPU,在更宽泛的环境中,来自于手持的室内......
  • 十六进制代码转RGB
    工作中有这么一个场景:布局的时候设计稿给的是纯色,然后给一个透明度,opacity:0.5; background:#222; 此时如果这个元素上还有文字,文字也将被透明。这时候就想着用rgb色......
  • Camera | 1.Camera基础知识
    一口君最近在玩瑞芯微的板子,之前写了几篇基于瑞芯微的文章,大家可以学习一下。《瑞芯微rk356x板子快速上手》《Linux驱动|rtc-hym8563移植笔记》《Linux驱动|Linux内核......
  • Away3D之相机(Camera3D)
    先看一下这几个api函数(继承自Object3D)moveBackward() 沿着Z轴向后移动3d物体moveForward()  沿着Z轴向前移动3D物体moveDown()    沿着Y轴向下移动3D物体mo......