• ORB-SLAM(一)简介


    ORB-SLAM是一种基于ORB特征的三维定位与地图构建算法(SLAM)[1]。该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在IEEE Transactions on Robotics。ORB-SLAM基于PTAM架构,增加了地图初始化和闭环检测的功能,优化了关键帧选取和地图构建的方法,在处理速度、追踪效果和地图精度上都取得了不错的效果。要注意ORB-SLAM构建的地图是稀疏的。

    ORB-SLAM一开始基于monocular camera,后来扩展到Stereo和RGB-D sensor上。作者好像还会做Semi-dense mapping的扩展。作者的开源代码都在GIT上[2]。

    ORB-SLAM算法的一大特点是在所有步骤统一使用图像的ORB特征。ORB特征是一种非常快速的特征提取方法,具有旋转不变性,并可以利用金字塔构建出尺度不变性。使用统一的ORB特征有助于SLAM算法在特征提取与追踪、关键帧选取、三维重建、闭环检测等步骤具有内生的一致性。

    ORB-SLAM架构如下:

    ORB-SLAM利用三个线程分别进行追踪、地图构建和闭环检测。

    一、追踪

    1. ORB特征提取
    2. 初始姿态估计(速度估计)
    3. 姿态优化(Track local map,利用邻近的地图点寻找更多的特征匹配,优化姿态)
    4. 选取关键帧

    二、地图构建

    1. 加入关键帧(更新各种图)
    2. 验证最近加入的地图点(去除Outlier)
    3. 生成新的地图点(三角法)
    4. 局部Bundle adjustment(该关键帧和邻近关键帧,去除Outlier)
    5. 验证关键帧(去除重复帧)

    三、闭环检测

    1. 选取相似帧(bag of words)
    2. 检测闭环(计算相似变换(3D<->3D,存在尺度漂移,因此是相似变换),RANSAC计算内点数)
    3. 融合三维点,更新各种图
    4. 图优化(传导变换矩阵),更新地图所有点

    作者提供了ORB-SLAM在New College Data[3]上的时间统计,如下图。

    1. 追踪部分,平均每帧约30毫秒,基本达到了30fps。特征提取速度是非常快的,平均11毫秒左右,非常适合于实时SLAM。姿态估计稍微耗时一些,平均需要20毫秒,特别是姿态优化需要耗费16毫秒的时间。

    2. 地图构建部分,平均每关键帧约385毫秒。其中生成新的点约70毫秒,Local BA约300毫秒,相对还是比较耗时的。不知道这两部分还有没有优化的空间。

    [1] ORB-SLAM: A Versatile and Accurate Monocular SLAM System

    [2] https://github.com/raulmur/ORB_SLAM2

    [3] http://www.robots.ox.ac.uk/NewCollegeData/

    该系列的其它文章:

    ORB-SLAM(二)性能

    ORB-SLAM(三)初始化

    ORB-SLAM(四)追踪

    ORB-SLAM(五)优化

    ORB-SLAM(六)回环检测

  • 相关阅读:
    easyui datagrid 前后台代码
    JVM
    序列化
    Android UI设计
    多线程
    泛型
    字符串
    B+树:MySql数据库索引是如何实现的
    大数据判存算法:海量数据中快速判断某个数据是否存在
    陌生单词
  • 原文地址:https://www.cnblogs.com/luyb/p/5215168.html
Copyright © 2020-2023  润新知