zoukankan      html  css  js  c++  java
  • LR: ICRA 2020 GPO: Global Plane Optimization for Fast and Accurate Monocular SLAM Initialization

    最近开始会开始看一下ICRA 2020的论文.

    Abstract

    这个文章专注与一个单目SLAM的初始化方法, 是基于平面特征的. 算法从在滑窗进行单应估计开始. 然后做GPO来获得相机位姿和平面的法向量. 3D点可以通过平面约束而不是三角化获得.

    这个方法充分利用了平面信息, 避免了单应分解的模糊性.

    1. Introduction

    一般的单目SLAM初始化是基于基础矩阵分解的[6-8], 然后用三角化获得3D地图. 之后就是PnP来估计其他位姿的位姿.

    但是这样的机制有一些缺点.

    • 需要足够大的视差来做准确的三角化, 纯旋转不能估计点的深度.
    • 因为SfM问题的复杂度, 需要很多时间来收敛.
    • 人造场景经常有很多地面和强[16-18], 会导致基础矩阵的退化

    为了解决平面的问题, 有些方法估计了两个帧之间的单应矩阵来代替基础矩阵. 但是单应分解的几何歧义使得很难设计一个选择的策略. 如果我们可以多用一些帧来对应平面场景, 就可以有更准确的估计.

    我们首先估计了两帧的单应矩阵with RANSAC. 然后用GPO来最小化2D的重投影误差 - 对应平面法向量和scaled translation. 最后我们估计了平面上的3D点.

    我们算法的核心是避免了单应分解. 我们也不用三角花来重建平面. 通过减少优化变量, 我们的算法获得了实时的提升.

    相机移动和平面法向量可以通过分解单应矩阵来获得. 分解的办法在[28]是解析的, 其他是基于SVD的.

    其他场景用了基础矩阵. ORB同时解析了单应和基础矩阵, 然后基于rigorous condition选择了最好的. VINS用五点法来分解基础举证. 在三角化和PnP之后做一个Full BA.

    平面特性也可以被用在RGBD SLAM系统中.

    3. Methodology

    1592981597412

    单应是基于第一帧和当前帧的特征匹配做的. 我们用GPO方法来获得平面参数和相机位姿.

    (pi(.)) 是归一化函数: ([x/z, y/z]^T = pi([x, y, z]^T))

    A. Fundamentals of Homographies

    单应估计

    [_{c_{2}} mathbf{H}_{c_{1}}=mathbf{K}left(_{c_{2}} mathbf{R}_{c_{1}}-frac{ _{c_{2}} mathbf{t}_{c_{2} c_{1}}}{d_{c_{1}}} cdot mathbf{_{c_{1}}n}^{T} ight) mathbf{K}^{-1} ]

    H是单应举证, t是c1到c2的平移. (d_{c1}) 是从相机(c_1)到平面的距离.

    这里 (_{c_2}t_{c_2 c_1} = (t_x, t_y, t_z)^T), (_{c1}mathbf{n} = (n_x, n_y, n_z)^T). 用了4点RANSAC来移除外点.

    单应分解

    我们可以通过分解估计的单应矩阵[28]来获得相机位姿和平面参数. 但是, 传统的分解有三个缺点:

    • 小的扰动可以使得分解的结果皮哪里正确的值
    • 通过分解单应来获得的法向量误差很大因为法向量和平移的双线性特性[42]
    • 在大多数情况下有4个结果, 需要有策略来选择最有道理的结果.

    B. Global Plane Optimization

    我们只用单应估计来滤出外点.

    我们通过引入单应来最小化2D重投影误差来估计相机位姿. 为了简化优化问题, 我们先估计每个帧的平移. 旋转可以用[43-45]的方法直接获得, 获得积分陀螺仪的角速度.

    [_{c_{2}} mathbf{H}_{c_{1}}=mathbf{K} cdot mathbf{_{c_{2}}R}_{w} cdotleft(mathbf{I}-frac{_w{t}_{c_{2} c_{1}}}{d_{c_{1}}} cdot mathbf{_{w}n}^{T} ight) cdot_{w} mathbf{R}_{c_{1}} cdot mathbf{K}^{-1} ]

    1592982823841

    变量是平面法向量和平移(_w{t}_{cic1}).

    我们假设每个帧 (c_i)(n_i) 个特征对的话, 那么优化目标就是:

    [underset{Omega}{arg min } sum_{i=2}^{m} sum_{j=1}^{n_{i}}left|mathbf{p}_{c_{i}}^{j}-oldsymbol{pi}left( _{c_{i}} mathbf{H}_{c_{1}} cdot mathbf{p}_{c_{1}}^{j} ight) ight|_{2} ]

    (p^j_{ci}) 是第 j 个点在 (c_i) 图上的齐次坐标. 因为深度未知, 平移是只基于scale的. 结果, 相机到平面的距离就被平移吸收了. 因为我们的状态量不包括3D点, 我们简单的使用 0平移 和一个和 相机z轴平行的平面法向量作为初值.

    注意GPO比BA问题高效多了, 因为它的问题更小. 它有 ((3m-1)) 个参数和 ((2mn - 2n)) 个残差, 而BA有 ((3m + 3n -3)) 个参数和 (2mn) 个残差.

    C. Map Points Reconstruction

    在解决平面发行量后, 我们可以构建平面方程.

    [n^T P + d= 0 ]

    (P) 是特征点的3D坐标. (d) 是相机到平面的距离. 根据相机投影模型, 我们可以得到:

    [mathbf{K}left(_{c_{i}} mathbf{R}_{w} cdot mathbf{P}_{w}^{j}+_{c_{i}} mathbf{t}_{c_{i} w} ight)=m_{c_{i}}^{j} cdot mathbf{p}_{c_{i}}^{j} ]

    这里 (m_{ci}^j) 表示第 j 个点在帧 (c_i) 的深度.

    4. 实验结果

    我们用了2.5Ghz i7 GPU, 16GB内存.

    A. Dataset and Evaluation Metrics

    1592984916806

    B. Multi-frame Initialization Baselines for Plane Scenes

    C. Implementation Details

    我们用了FAST和KLT跟踪. 旋转是用IMU的积分. 我们用Ceres做所有的优化. trust region方法是Dogleg.

    D. Ablation Study for RANSAC

    1592984982352

    E. Performance Compared to Aggregation-based Methods

    1592985157153

    F. Performance Compared to Optimization-based Methods

    GPO比BA with PnP和FPBA方法好.

    1592985231053

    处理时间:

    1592985251033

    5. Conclusions

    没啥.

  • 相关阅读:
    Feign性能优化注意事项--超时
    Android MVP+Retrofit+dagger2+RxAndroid框架整合
    Android adb命令,linux中各种命令
    【视频音频】雷霄骅开源视音频项目汇总
    Android LitePal介绍与使用说明
    AndroidStudio第一次提交项目代码到git服务器/github
    Android框架之路——Fragmentation的使用(流式交互Demo)
    Android Studio 升级到3.0后出现编译错误.gradlecaches ransforms-1files-1.1*****-release.aar
    Android Studio你必须学会的快捷键(Eclipse转AS必看)
    Intellij IDEA常用配置详解
  • 原文地址:https://www.cnblogs.com/tweed/p/13187942.html
Copyright © 2011-2022 走看看