这对于直接方法是特别有益的:众所周知直接图像对准是非凸的,并且只有在足够准确的初始估计可用时才能预期收敛。虽然在实践中像粗到精跟踪这样的技术会增加收敛半径,但是紧密的惯性积分可以更有效地解决这个问题,因为附加的误差项和先前的结果确保即使对于快速运动也能收敛。我们表明它甚至允许在没有视觉信息的情况下通过短间隔进行跟踪,例如 将相机对准白墙造成的。此外,惯性测量可以观察到全局滚转和俯仰,减少了平移3D运动和偏航旋转的全局漂移。

IMU通常以比相机的帧速率高得多的频率操作,并且可以测量重力方向并消除滚动和俯仰角度的漂移。然而,IMU的缺点是它们仅通过旋转速度和线性加速度间接测量相对姿势。它们噪声很大,需要积分并补偿重力,这在很大程度上取决于姿态估计的准确性。测量带有未知的漂移偏差,需要使用外部参考(如视觉)进行估算。虽然IMU信息是递增的,但是任何图像可以彼此对齐并且具有足够的重叠。这允许在不是直接时间序列的图像之间结合相对姿势测量 - 使得能够进行更一致的轨迹估计。

A. Direct Semi-Dense Stereo Odometry

我们基于Stereo LSD-SLAM进行视觉跟踪[5]:

我们跟踪摄像机朝向地图中的参考关键帧的运动。如果相机距离现有关键帧太远,我们会创建新的关键帧。

我们根据静态和时间双目提示估计当前参考关键帧中的半密集深度图。对于静态立体声,我们利用双目配置中的一对相机之间的固定基线。基于跟踪的运动,从参考关键帧中的像素对应关系向后续图像估计时间立体声。

在跟踪和建图框架中,使用时间立体补充静态有几个好处。静态立体声使重建比例可观察。它也独立于相机移动,但受限于恒定基线,这将静态立体声限制在有效的操作范围内。时间立体声需要非简并的相机移动,但不受[4]中所示的特定范围的约束。该方法可以同时重建非常小和非常大的环境。最后,通过静态与时间立体声的组合,可获得多个基线方向:静态立体声通常具有水平基线 - 其不允许沿水平边缘估计深度,时间立体声允许通过提供其他运动方向来完成深度图。

1)直接图像对准:通过最小化光度残差来估计两个图像I 1和I 2之间的姿势

其中ρ是Huber规范。 使用迭代重新加权的Levenberg-Marquardt算法最小化该目标。

2)深度估计:针对具有高图像梯度的关键帧的像素估计场景几何,因为它们提供稳定的视差估计。

B. IMU Integration

我们的IMU误差函数项的基础是以下非线性动力学模型。

IMU测量通常以比相机帧高得多的频率到达。我们不为每个单独的IMU测量添加独立残差,而是将测量结果集成到图像帧之间的压缩IMU测量中。如果姿势或偏差估计在优化期间发生变化,为了避免频繁重新积分,我们遵循[22]和[14]中提出的预积分方法。我们在IMU坐标系中的时间戳i和j之间积分IMU测量值并获得伪测量值Δpi→j,Δvi→j和R i→j。

我们用Δpi→i = 0,Δvi→i = 0,R i→i = I初始化伪测量,假设IMU测量之间的时间是Δt,我们积分原始测量值:

给定初始状态和综合测量,可以预测下一个时间步的状态:

对于先前状态s i-1和IMU测量帧i和i-1之间的i-1,ωi-1,该方法产生预测

C. Optimization

方程中的误差函数(3)可以写成

权重使用迭代重加权最小二乘法对光度残差r I实现Huber范数,或者对应于IMU残差r IMU的逆协方差(等式(16))。我们使用Levenberg-Marquardt方法优化了这个目标。线性化当前状态周围的残差

误差函数E(s)可以用二次函数近似在当前状态s周围

D. Partial Marginalization

为了约束优化问题的大小,我们执行部分边缘化并将优化状态集保持在小的常量大小。为了约束优化问题的大小,我们执行部分边缘化并将优化状态集保持在小的常量大小。具体地,我们仅针对当前帧状态s i,前一帧s i-1的状态以及用于跟踪的参考帧的状态s ref进行优化。如果我们将状态空间s分成sλ和sμ,其中sλ是我们想要保持在优化中的状态变量,并且sμ是我们想要边缘化的状态的部分,我们可以重写更新 步骤如下

我们发现将Schur补集应用于系统的上半部分

它表示E *(sλ)的系统,其中状态sμ被边缘化。 图3显示了在将每个新帧添加到图形之后应用边缘化过程的图形演变。

E. Changing the Linearization Point

部分边际化固定了sλ的线性化点,用于涉及方程中的sμ和sλ的量。(25)。然而,进一步的优化改变了线性化点,从而需要重新线性化。我们使用一阶近似避免了繁琐的显式重新线性化。如果我们用旧的线性化点sλ和增量Δsλ表示新的线性化点s0λ,

我们可以改变当前E *的二次近似的线性化点

只有当Δsλ和δsλ都很小时才进行近似 - 因为两者都代表状态的更新,这是一个有效的假设。然后我们可以近似在s0λ附近线性化的误差函数:

F. Statistical Consistency

VII. C ONCLUSION

我们提出了一种直接,紧密集成的视觉惯性测距法的新方法。它结合了完全直接的结构和运动方法 - 基于每像素深度而不是单独的关键点观察 - 采用紧密的,基于最小化的IMU集成。我们展示了两个传感器源在理想情况下相互补充:立体视觉允许系统补偿长期IMU偏差漂移,而短期IMU约束有助于克服光度跟踪配方中的非凸性,允许跟踪大型 帧间运动或没有视觉信息的间隔。我们的方法可以在跟踪精度方面优于现有的基于特征的方法,同时提供准确的半密集3D环境重建,同时在标准笔记本电脑CPU上实时运行。

Direct Visual-Inertial Odometry with Stereo Cameras的更多相关文章

  1. 视觉惯性里程计Visual–Inertial Odometry(VIO)概述

    周围很多朋友开始做vio了,之前在知乎上也和胖爷讨论过这个问题,本文主要来自于知乎的讨论. 来自https://www.zhihu.com/question/53571648/answer/13772 ...

  2. Trifo-VIO:Roubst and Efficient Stero Visual Inertial Odometry using Points and Lines论文笔记

    这是2018-IROS上的一篇文章,亮点是作者提出了Lines特征的VIO方案,还有就是提出一个新颖的回环检测,不是用传统的基于优化的方法或者BA,另外作者还发布了一个新的用于VIO的数据集.亮点主要 ...

  3. 论文阅读——Visual inertial odometry using coupled nonlinear optimization

    简介:论文提出一种新的视觉里程计算法,其直接利用带噪声的IMU数据和视觉特征位置来优化相机位姿.不同于对IMU和视觉数据运行分离的滤波器,这种算法将它们纳入联合的非线性优化框架中.视觉特征的透视重投影 ...

  4. Omnidirectional DSO: Direct Sparse Odometry with Fisheye Cameras 论文摘要

    1. Abstract 通过一种Unified Omnidirectional Model作为投影方程. 这种方式可以使用图像的所有内容包括有强畸变的区域,而现存的视觉里程计方案只能修正或者切掉来使用 ...

  5. Direct Line Guidance Odometry论文阅读笔记

    摘要: 本文特色:使用线引导关键点的选择.本文提出这个的论点是:线上的点比图像的其他部分的点更好,而且线上存在更好的关键点.选择线上的点可以筛选过滤掉不太明显的点,从而提高效率. 点和线: 系统使用点 ...

  6. Paper Reading: Stereo DSO

    开篇第一篇就写一个paper reading吧,用markdown+vim写东西切换中英文挺麻烦的,有些就偷懒都用英文写了. Stereo DSO: Large-Scale Direct Sparse ...

  7. 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...

  8. Monocular Visual-Inertial Odometry单目视觉惯性里程计

    Monocular Visual-Inertial Odometry:https://www.qualcomm.com/invention/research 单目视觉-惯性里程计 INDOOR POS ...

  9. A Benchmark Comparsion of Monocular Visual-Inertial Odometry Algorithms for Flying Robots论文笔记

    摘要: 本文主要比较单目VIO的算法在飞行机器人上运行的性能,测试使用统一数据集为EuRoC.其中评价指标为:姿态估计精度.每帧处理时间以及CPU和内存负载使用率,同时还有RMSE(运行轨迹与真实轨迹 ...

随机推荐

  1. ANY 和 IN 查询价格大于或等于"超级本"价格的商品,并且按价格降序排列

    -- 查询价格大于或等于"超级本"价格的商品,并且按价格降序排列 //ANY用法 //与比较操作符联合使用,表示与子查询返回的任何值比较为 TRUE ,则返回 TRUE //简单案 ...

  2. [svc]对称加密/非对称加密细枝末节-如何做到数据传输的authentication/data integrity/confidentiality(私密)

    对称/非对称/混合加密的冷知识 数据在互联网上传输,要考虑安全性. 讲到安全,要从三方面考虑: 1.authentication 每一个IP包的认证,确保合法源的数据 2.data integrity ...

  3. 每帧创建一个item

    -- 加载列表测试 function UIBagController:onLoadTest() self.goodsprop = DB.getTable("goodsprop"); ...

  4. Android开发(十四)——SimpleAdapter与自定义控件

    ListView中可以使用SimpleAdapter进行数据与视图的绑定,但都是对已有的系统控件的绑定,如果自定义空间直接使用SimpleAdapter绑定,则会报错. 如,使用CircleImage ...

  5. PHP-X介绍

      为什么要开发PHP扩展 PHP-X是用来开发PHP扩展的库.PHP代码写得好好的,为啥要开发PHP扩展呢? 1.我们知道PHP不擅长CPU密集型的操作,那么把CPU密集型的相关代码迁移到扩展上,就 ...

  6. 【iCore4 双核心板_FPGA】例程十四:基于I2C的ARM与FPGA通信实验

    实验现象: 1.先烧写ARM程序,然后烧写FPGA程序. 2.打开串口精灵,通过串口精灵给ARM发送数据从而给FPGA发送数据 ,会接收到字符GINGKO. 3.通过串口精灵发送命令可以控制ARM·L ...

  7. 【iCore1S 双核心板_ARM】例程二:读取ARM按键状态

    实验原理: 按键的一端与STM32的GPIO(PB9)相连,且PB9外接一个1k大小的限流上接电阻. 初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V): 当按 ...

  8. win7(64bit)+python3.5+pyinstaller3.2安装和测试

    最近因为做项目需要,需要在win7中安装pyinstaller用于将.py文件生成脱离python平台的可执行程序*.exe文件. 安装步骤 第一步:安装python3.5 [下载python3.5的 ...

  9. Linux查看文件总的数据行数,并按行拆分

    先利用 wc -l BLM.txt       读出 BLM.txt 文件一共有多少行. 再 1. 以行数拆分 -l 参数: split –l 50 原始文件 拆分后文件名前缀 例:以50行对文件进行 ...

  10. BitSet的用法

    1,BitSet类    大小可动态改变, 取值为true或false的位集合.用于表示一组布尔标志. 此类实现了一个按需增长的位向量.位 set 的每个组件都有一个 boolean 值.用非负的整数 ...