当前位置: 首页 > news >正文

V-SLAM重读(2): DSO: Direct Sparse Odometry (DSO)

学习VO论文之: Direct Sparse Odometry (DSO)

1. 摘要

DSO是一种基于新颖, 高精度稀疏直接化的结构和运动估计的视觉里程计算法。

它将一个完整直接概率模型(极小化广度误差)与相机几何运动的所有一致性参数进行联合优化(也就是将位姿估计与数据关联放在了一个统一的非线性优化问题中)。

由于该方法不要依赖于关键点检测器和描述子, 它能够在经过有图像梯度的区域采样像素, 包括边缘和无特征墙面的平滑强度变化。

2.多种组合

  • 稀疏+非直接:从关键点匹配估计3D几何误差,无几何先验。如monoSLAM[4], PTAM[16], ORB-SLAM[20].

  • 稠密+非直接: 估计3D几何误差+几何先验[23], [27].

  • 稠密+直接: 利用光度误差去估计半稠密和稠密几何, 如DTAM[21], LSD-SLAM[5].

  • 稀疏+直接: 本文方法, 不传播几何先验知识, 只有优化来源与图像的光度误差,一个稀疏和直接化公式早就被提出[13] (该方法采用EKF). 本文采用非线性优化。

直接法的优势

1.不要求识别点,因此可以识别更细粒度的几何图形表示(像素的逆深度)。

2.对可行的所有数据进行采样, 包括边缘和低强度变化,获取一个在稀疏纹理的环境下鲁棒和完整的模型。

稀疏化的优势

添加几何先验的主要缺陷是在几何参数之间引入了相关性, 这使得统计上一致的实时联合优化不可行。

3.本文的贡献

(1). 本文提出一种稀疏直接法的视觉里程计, 据我们所知, 仅仅完整的直接法才会联合包含相机位姿,相机内参和逆深度(几何参数)模型参数优化似然估计。
这与SVO的混合方法相反, 它是一个间接模型的联合优化。

(2).利用滑动窗口来进行优化, 即旧的相机位姿将会被边缘化。相对于已有的方法,本文的方法进一步的优势在于它的相机光度标定, 包含透镜衰减,伽马校准和曝光时间,这种方法的优化进一步增加了算法的精确度和鲁棒性。

(3). 该方法有两种设置,第一种少点和少关键帧,将会得到5倍的实时运行速度; 另外一种是多点和多关键帧,竟会得到更高的精确度和中稠密地图。

4.滑动窗口

若干关键帧和他们关联的地图点组成的残差项,构成了整个滑动窗口的内容。

  • 优化方法
    Gauss-Newton / LevernBerg-Marquardt方法迭代.

这个窗口在整个VO过程一直存在,并一直保持在大概5~7个关键帧。

  • 滑动窗口内的关键帧更新的规则

前端会通过一定的条件限制(如相机移动距离过大), 来判断新来的帧是否可作为新的关键帧插入后端;

后端会通过一定的条件限制,来去除(利用Schur complement边缘化掉 )多出来的帧。

5. 光度标定

DSO提出了光度标定,认为对相机的曝光时间、暗角、伽马响应等参数进行标定后,能够让直接法更加精确和鲁棒。

对于未进行光度标定的相机,DSO也会在优化中动态估计光度参数。

这个过程建模了相机的成像过程,因此对于由相机曝光不同引起的图像明暗变化,会有更好的表现。

但是,如果由于环境光源发生变化,光度标定也是无能为力的。

在这里插入图片描述

这里只给出论文的核心思想, 详细的公式讨论会在代码研究中分析。

6.参考文献

半闲居士知乎对DSO代码解析

SLAM 中的关键帧边缘化和 Schur complement讨论

DSO论文翻译,但是好像翻译的不是很准,可参考

相关文章:

  • VLP-16第一课: Velodyne的工作原理和驱动安装
  • ubuntu技巧学习3: 将视频转换为gif动态图
  • V-SLAM重读(3):SVO代码阅读和调试修改
  • VLP-16第二课: 学习论文LeGo-LOAM: 基于地面优化的轻量级雷达里程计和地图构建
  • 数据结构与算法第一节:数据结构与算法的关系
  • 数据结构与算法第二节:衡量算法的执行效率(时间、空间复杂度分析)
  • 数据结构与算法第二节:衡量算法的执行效率(时间、空间复杂度分析)(2)
  • 数据结构与算法第三节:数组的使用
  • 数据结构与算法第四节:链表的使用
  • 数据结构与算法第五、六节:栈和队列
  • DAVIS第六课: 基于关键帧的非线性优化的事件相机实时VIO算法
  • 数据结构与算法第7节: 递归的使用
  • C++11回顾学习(6): 模板类-Template简介
  • Nav-SLAM: 2D激光雷达实现SLAM.
  • 数据结构与算法第八节: 排序算法
  • angular2 简述
  • classpath对获取配置文件的影响
  • CSS居中完全指南——构建CSS居中决策树
  • docker python 配置
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • JavaScript HTML DOM
  • java正则表式的使用
  • node 版本过低
  • 力扣(LeetCode)357
  • 删除表内多余的重复数据
  • 使用common-codec进行md5加密
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 推荐一个React的管理后台框架
  • 最近的计划
  • scrapy中间件源码分析及常用中间件大全
  • ​【已解决】npm install​卡主不动的情况
  • ​Java并发新构件之Exchanger
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $refs 、$nextTic、动态组件、name的使用
  • (145)光线追踪距离场柔和阴影
  • (2)(2.10) LTM telemetry
  • (zhuan) 一些RL的文献(及笔记)
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)ORM
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)利用webkit抓取动态网页和链接
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • *Django中的Ajax 纯js的书写样式1
  • .Net Core与存储过程(一)
  • .Net Remoting(分离服务程序实现) - Part.3
  • ??eclipse的安装配置问题!??
  • @AutoConfigurationPackage的使用
  • @font-face 用字体画图标
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [Android] Upload package to device fails #2720
  • [c#基础]值类型和引用类型的Equals,==的区别