0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ORB SLAM中涉及的一些基础概念

新机器视觉 来源:深蓝学院 作者:深蓝学院 2022-10-28 14:28 次阅读

本文总结于上交感知与导航研究所科研助理——刘国庆关于【视觉SLAM开源算法ORB-SLAM3 原理与代码解析】的公开课。

ORB-SLAM最早的版本在2014年的RSS上发布,在2016年作者又发布了ORB-SLAM2,接着在去年(2020年)发布了ORB-SLAM 3。ORB-SLAM1只能针对单目相机数据进行处理;ORB-SLAM 2 增加了对于双目和RGB-D相机的处理,在回环检测模块增加了Full Global BA的处理;ORB-SLAM 3则增加了对于IMU融合的支持,兼容鱼眼相机模型,并且增加了Altas多地图的支持;同时,回环检测为了支持多地图的模式,提供了一种叫Welding BA的优化方式。ORB -SLAM的作者将上述提到的各版本项目都开源了,为学术研究还是工程落地都提供了很好的参考。

1

首先来介绍一下ORB SLAM中涉及的一些基础概念。

帧&关键帧:视觉SLAM都是对一个图像序列进行处理,每一张图像被称为帧,而关键帧则是通过一定筛选机制得到的、具有一定代表性的图像帧。

地图点/路标点:将图像上被观察到的特征点通过三角化等方式进行深度恢复,我们就可以得到其对应的在三维空间的位置,同时包含帧的观测信息,这种点就被称为地图点或路标点。

共视:当一个地图点被多帧观察到时,我们就可以称这几帧有基于该地图点的共视关系。

共视图&本质图:我们可以把共视关系作用边表示,关键帧用节点表示,就可以建立共视图,而本质图在共视图基础上只保留具有较强共视关系的边。

19664f5c-5680-11ed-a3b6-dac502259ad0.png

Altas(地图集):ORB-SLAM 3提供了多地图的存储和拼接功能,在跟踪丢失后可以尝试将现有地图和历史地图进行匹配、融合,并更新当前的活跃地图(Active Map)

数据关联:在语义SLAM中,第k帧检测到物体Obj1、Obj2,第k+1帧检测到物体Obj3、Obj4,确定Obj1和Obj3、Obj4中的哪一个是对真实世界中同一个物体的多次观测,这是数据关联的一个直观例子。在间接法(特征法)SLAM中,表现为不同帧中的特征,哪些是对应于同一个空间路标点/地图点的。在ORB3中考虑到的数据关联包括短期内滑动窗口中关键帧观测到的路标点和图像特征的数据关联;中期的数据关联是指图像特征与局部地图点的关联;长期的数据关联包括利用场景识别技术和词袋模型,在回环检测、重定位等过程中的数据关联;而多地图的数据关联还可以实现地图之间地图点的匹配和融合。

ORB-SLAM 3的基本流程和此前的ORB版本没有显著的改变,只是也增加了部分新特性。基于词袋模型的关键帧数据和之前差不多,每一个关键帧均会被存入数据库用于回环检测。地图结构上进行了改进,ORB-SLAM3使用Altas地图集的结构,地图中包含一个Active Map和若干个Non-active Map,每个Map均包括地图点,关键帧,共视图,Spanning Tree等信息。跟踪线程添加了IMU的积分,并且和以前一样进行关键帧的判断和构造;在LocalMapping线程中中执行IMU的初始化,以及和之前相同的冗余关键帧和地图点剔除、新地图点的创建等工作;在回环检测部分主要添加了多地图的融合。

198b1c38-5680-11ed-a3b6-dac502259ad0.png

ORB-SLAM 3框架

总结一下,ORB-SLAM3的贡献包括:

1、提供了一个单双目VI-SLAM的系统;

2、改善召回率的场景识别技术;

3、多地图机制;

4、抽象的相机表示。

2

抽象相机模型介绍

为什么ORB-SLAM3需要一个抽象的相机模型呢?

相比于传统相机,鱼眼相机超过180度的广视角可以获取更多的信息,但是因为它不符合针孔模型数学建模的假设,导致uniform reprojection error的假设失效;如果对于图像直接进行裁剪,将会导致外围图像丢失,反而丧失了鱼眼相机大视角的优势。在ORB-SLAM3中,相机成像模型提供投影、反投影和相关的雅克比计算等函数,并且将此前系统中的EPNP更换为MAP-PNP, 从而实现了相机成像模型与SLAM部分的解耦,还可以扩展,能将相同的SLAM pipeline用于大部分类型的相机。

此外,针对双目相机模型,ORB-SLAM3也提供了一定的改善。ORB-SLAM2假设我们针对双目相机预先进行了极线矫正,但是很多时候由于无法保证左右目相机光轴的绝对平行,极线纠正的效果也往往不好;而有些时候,我们需要使用两个参数不同的相机进行观测,而ORB-SLAM2无法兼容这类双目相机,如类似RGB-D相机中焦距、分辨率相差巨大的彩色相机+近红外相机,如果将彩色图像和近红外图像组成双目图像,ORB-SLAM2无法综合利用这对图像估计相机位姿。在ORB-SLAM3中将左右两目相机视作为具有固定位姿变换的两台单目相机使用,并且也不再限制两台相机必须具有足够面积的、重叠的共视区域,解决了这个问题。

3

VISLAM实现和IMU初始化

ORB-SLAM3中VI-SLAM在ORB-SLAM-VI上进行了改进,包括:提供快速,准确的IMU初始化;支持单双目VI-SLAM;支持针孔/鱼眼相机模型。在视觉和IMU融合方面,ORB-SLAM3在位姿求解时所建立优化问题的残差项,包括所有关键帧和上一帧IMU估计的残差项,以及所有路标点观测的视觉误差项。其中针对视觉路标点的观测,为了避免错误匹配造成的极端值的影响,嵌套了鲁棒核函数。

IMU初始化的目的是为了得到Body系速度、重力方向和IMU偏置。ORB-SLAM3中初始化流程的设计建立在作者的几点思考上:

1、ORB-SLAM纯单目已经可以初始化得到精确的地图,尺度信息可以通过IMU得到;双目图像输入下则尺度客观,可以不考虑尺度信息的问题;

2、如果将尺度单独作为优化变量进行表示和优化,效果比在BA中的隐式表达收敛更快;

3、IMU初始化过程中必须考虑传感器的不确定性,否则会产生难以预测的巨大误差。

接下来的讨论IMU初始化问题时,均指单目输入时的初始化。ORB3中IMU初始化的步骤包含三步,第一步是纯视觉最大后验估计(MAP),第二步是纯惯性MAP,第三步是视觉+惯性MAP。针对纯视觉MAP,我们提取初始化后2s内10帧图像进行纯视觉BA,从而得到没有尺度信息的相机位姿和路标点位置。接下来我们进行只有IMU参与的初始化,最终得到的优化结果是:帧位姿、速度和地图点,并都具有正确的尺度;Body系Z轴将被旋转到和重力方向一致;IMU的偏置被更新。第三步是视觉IMU联合后验估计,ORB-SLAM3只需要2秒就可以完成尺度的初始化,误差在5%左右,此外,ORB-SLAM3还将进行只包含尺度因子和重力方向的优化,10秒一次,用于避免传感器运动缓慢时IMU激励不够的情况。

ORB-SLAM3中的跟踪和建图和ORB-SLAM-VI类似,在短期跟丢后,在满足一定条件时会尝试利用IMU积分得到的位姿信息进行重定位;当丢失持续一定时间后,将会重新初始化,创建新的Active map。

4

改进的回环检测与多地图融合

这一部分的内容很大程度上和ORB-SLAM2是相同的,我们首先来回顾一下基本概念。

准确率(PrecisionRate):检测到的回环中正确的比率。

召回率(RecallRate):检测到的回环占总真实回环数的比率。

在ORB-SLAM1/2中,仅通过DBoW词袋数据库就可实现50%~80%的准确率和召回率。在回环时,通过增加几何一致性和时间一致性检验,牺牲召回率来增加准确率。ORB-SLAM3改进了回环检测的速度,提高了召回率,并且增加了多地图的部分。

寻找闭环帧的过程可以分为六步:

1.针对每一个新关键帧,在数据库中查询到三个最相似的关键帧;

2.尝试对新关键帧及其共视关键帧,和候选关键帧及其共视关键帧进行数据关联;

3.利用匹配的特征点和地图点求解位姿转换;

4.利用位姿变换的初始估计,进行点云重投影寻找新的匹配,并且进行位姿的优化求精

5.对时间一致性的检验,此前的步骤相对复杂,在ORB-SLAM3中局部地图里面已有关键帧的共视信息进行判断;

6.利用重力方向对于回环结果进行检查。

回环检测后是进行回环还是地图合并,取决于当前关键帧检测到的回环关键帧是在当前的active map还是在其他map。当对non-active map和active map进行融合时,共视图和本质图同步更新,active map中的信息被追加到历史地图中,匹配到的non-active map变成新的map。

5

总结

总体来说,ORB-SLAM3的流程和ORB-SLAM1/2非常相似,对于ORB-SLAM系列熟悉的同学应该很容易上手;相机模型的抽象处理,使得SLAM位姿求解过程和相机成像模型解耦,理论上支持绝大多数成像模型的相机;通过对于IMU的支持,ORB-SLAM系列加入了VI-SLAM的大家庭,也表明多传感器融合的SLAM是目前一大发展趋势;多地图的机制有利于跟丢后保留尽可能多的信息用于后续补救,也为后续实现多机器协同的SLAM提供了工作基础。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4612

    浏览量

    92894
  • SLAM
    +关注

    关注

    23

    文章

    424

    浏览量

    31832
  • orb
    orb
    +关注

    关注

    0

    文章

    21

    浏览量

    9896

原文标题:视觉SLAM开源算法ORB-SLAM3 原理与代码解析

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    利用VLM和MLLMs实现SLAM语义增强

    语义同步定位与建图(SLAM)系统在对邻近的语义相似物体进行建图时面临困境,特别是在复杂的室内环境。本文提出了种面向对象SLAM的语义增强(SEO-
    的头像 发表于 12-05 10:00 161次阅读
    利用VLM和MLLMs实现<b class='flag-5'>SLAM</b>语义增强

    一些常见的动态电路

    无论是模电还是数电,理论知识相对来说还是比较枯燥,各种电路原理理解清楚不算容易,换种生动形象的方式或许会增加一些趣味性,也更容易理解这些知识。下面整理了一些常见的电路,以动态图形的方式展示。 整流
    的头像 发表于 11-16 09:26 355次阅读
    <b class='flag-5'>一些</b>常见的动态电路

    分享一些常见的电路

    理解模电和数电的电路原理对于初学者来说可能比较困难,但通过一些生动的教学方法和资源,可以有效地提高学习兴趣和理解能力。 下面整理了一些常见的电路,以动态图形的方式展示。 整流电路 单相桥式整流
    的头像 发表于 11-13 09:28 306次阅读
    分享<b class='flag-5'>一些</b>常见的电路

    激光雷达在SLAM算法的应用综述

    、文章概述 1.1 摘 要 即时定位与地图构建(simultaneous localization and mapping,SLAM)是自主移动机器人和自动驾驶的关键 技术之,而激光雷达则是支撑
    的头像 发表于 11-12 10:30 579次阅读
    激光雷达在<b class='flag-5'>SLAM</b>算法<b class='flag-5'>中</b>的应用综述

    Linux应用编程的基本概念

    Linux应用编程涉及到在Linux环境下开发和运行应用程序的系列概念。以下是一些涵盖Linux应用编程的基本概念
    的头像 发表于 10-24 17:19 233次阅读

    LED驱动器应用的一些指南和技巧

    电子发烧友网站提供《LED驱动器应用的一些指南和技巧.pdf》资料免费下载
    发表于 09-25 11:35 0次下载
    LED驱动器应用的<b class='flag-5'>一些</b>指南和技巧

    二进制处理一些技巧

    在二进制和十进制的处理,有时候一些小技巧是很有用的。 1、把十进制数转换成二进制数 (1)在MATLAB中有个函数dec2bin,可以把正整数转换为2进制 (2)对于负数有这样
    的头像 发表于 07-05 11:51 577次阅读

    基于多摄像头的高鲁棒性视觉SLAM系统设计

    本文的主要目标是通过扩展ORB-SLAM2的功能来增强准确性,从多个摄像头中的姿态估计和地图重用开始。所有这些多摄像头的图像特征将被合并到跟踪模块中进行特征匹配,以及在闭环检测期间进行位置识别。
    发表于 04-20 17:51 594次阅读
    基于多摄像头的高鲁棒性视觉<b class='flag-5'>SLAM</b>系统设计

    工程实践VINS与ORB-SLAM的优劣分析

    ORB-SLAM种基于特征的单目视觉SLAM系统,广泛用于实时三维地图构建和机器人定位。该系统使用ORB特征进行高效的视觉识别和地图重建,支持关键帧技术和回环检测来优化地图的准确性
    的头像 发表于 04-08 10:17 2844次阅读
    工程实践<b class='flag-5'>中</b>VINS与<b class='flag-5'>ORB-SLAM</b>的优劣分析

    什么是SLAMSLAM算法涉及的4要素

    SLAM技术可以应用在无人驾驶汽车、无人机、机器人、虚拟现实等领域中,为这些领域的发展提供了支持。SLAM技术的发展已经逐渐从单纯的定位和地图构建转向了基于场景理解的功能。
    发表于 04-04 11:50 2413次阅读

    关于智能门禁设备做CCC认证申请的一些经验分享

    CCC认证申请的一些经验分享。1.了解CCC认证要求:首先,您需要详细了解CCC认证的规定和要求,包括适用标准、测试项目、申请流程等内容。CCC认证涉及到产品的安
    的头像 发表于 03-07 17:10 528次阅读
    关于智能门禁设备做CCC认证申请的<b class='flag-5'>一些</b>经验分享

    一些有关通信电路的资料?

    有关嵌入式之间DSP、ARM、FPGA三者之间和这三款芯片和外部电路之间通信的一些资料,比如说芯片之间的并行通信和芯片和外部电路之间的串行通信,MODBUS、DP、CAN等,一些一些常用的通信协议的
    发表于 03-03 18:53

    晶振电路电容电阻的一些基本原理和作用解析

    晶振电路的电容和电阻是调整和维持晶振振荡稳定性的关键元件。KOAN凯擎小妹带大家了解下晶振电路电容电阻的一些基本原理和作用。
    的头像 发表于 02-20 16:22 1745次阅读
    晶振电路<b class='flag-5'>中</b>电容电阻的<b class='flag-5'>一些</b>基本原理和作用解析

    PSOC Creator 4.4是否有一些设置可以阻止strtok操作?

    ,“;”); 我无法让指针指向每个代币的第个字符。 我想知道 PSOC Creator 4.4 是否有一些设置可以阻止 strtok 操作。
    发表于 01-24 08:31

    有关通信协议时一些问题?

    工业上应用到许多种协议,按通信同时刻发送的数据位数分为串行通信和并行通信,首先我见并行通信多在芯片之间进行通信,而串行通信则在外部设备和芯片之间进行的一些通信,对于常见的串行通信,比如
    发表于 01-14 00:58