SLAM 论文阅读和分类整理

前言:以前读论文,都是靠脑子硬记,哪个实验室,谁,哪一年在什么会议上发了一篇关于什么的论文。当需要回溯的时候,每篇论文能给出个大概,不具体,找起来也麻烦,以后就在这个 List 里分类整理已经读过的论文。之前读的,以及后续的一些新的有意义的论文都会慢慢补充进来 (汗, 感觉会是一个非常长的 list)。

基础知识材料

  1. 2018年, joan sola 大神, A micro Lie theory for state estimation in robotics. 系统讲述李代数,非常棒。点击可以进他的主页,他写过非常多的笔记材料以及代码,ekf slam 工具箱啥的,各类笔记材料值得入门者反复读。科研也有非常棒的论文,TRO, IROS, ICRA 不胜枚举,我辈楷模。
  2. 2017年, joan sola 大神, Quaternion kinematics for the error-state Kalman filter. 四元数和 error state ekf 系统百科全书,当初学 vio 就靠他入门。当然还有 msckf 组在 05 年写的一个四元数的文档也值得推荐:Indirect Kalman Filter for 3D Attitude Estimation.
  3. 2000年,book, 矩阵分析,Matrix Analysis and Applied Linear Algebra. 越到 SLAM 后期,数学基础知识越需要。这本书是研一那会老师上矩阵分析课的教材,非常非常棒,跟 MIT 那个有得一拼。再次看到这个书名,是在预积分的参考文献里,SVO 那个预积分用到矩阵零空间的基等一些性质就是引用的这本书。

VIO 系统

基础知识

  1. 2005 年,Stergios I. Roumeliotis,Indirect Kalman Filter for 3D Attitude Estimation 这个笔记是 University of Minnesota 做 msckf 那个组的笔记,讲解了 IMU 和四元数的一些基础知识。

VIO 初始化和外参数标定

该部分主要是 VIO系统中初始参数的确定,如相机尺度,系统初始速度,重力方向,imu bias,甚至相机和 imu 之间的外参数等等。

首先是闭式求解的方法,三篇论文一脉相承,Martinelli 作为二作和一作。

  1. 2011 年 ICRA ,Closed-Form Solution for Absolute Scale Velocity Determination Combining Inertial Measurements and a Single Feature Correspondence. 闭式求解相机尺度,只需要三帧和一个特征点。
  2. 2014 年 IJCV,closed-form solution of visual-inertial structure from motion,也是闭式求解,但是求解过程中忽略了 gyro bias 和 acc bias 的影响,因此,该方法不太实用,在实际系统中也没被采用过(17年该作者作为二作的一篇RAL说的)。
  3. 2017 年 RAL,Simultaneous State Initialization and Gyroscope Bias Calibration in Visual Inertial Aided Navigation,作者对上篇论文所述方法受 bias 的影响进行了分析,发现 acc bias 对系统影响不那么大,但是 gyro bias 影响较大,所以在 14 年论文的基础上提出了加入了标定 gyro bias 的方法。

优化迭代求解的方法

  1. 2017 年 RAL,Visual-Inertial Monocular SLAM with Map Reuse. ORBSLAM VIO 论文,主要是利用 IMU 预积分和单目 ORBSLAM 估计的姿态之间构建约束,从而迭代求解 IMU 初始状态所有参数(甚至包括acc bias),不包括外参数的标定。
  2. 2017 年 TASE,Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU Extrinsic Calibration. 沈老师组论文,sfm 求解相机姿态和 gyro 积分构建rotation约束,从而求解相机imu之间的旋转外参数,然后固定rotation,求解其他参数,如重力方向,速度,外参数平移,特征深度等。论文中直接构建一个最小二乘对上述参数进行优化求解。
  3. 2017 年 IROS,Robust Initialization of Monocular Visual-Inertial Estimation on Aerial Robots. 这篇大家比较熟悉,相对于上篇直接丢到误差函数进行优化求解的方法,沈老师他们借鉴了 ORBSLAM VIO 的做法,分步求解gyro bias, 尺度,速度,重力方向等参数。这篇论文和 ORBSLAM VIO 不同之处在于,它在初始化过程中不考虑 acc bias 的影响,因为通常 acc bias 相对于重力加速度不太可观,作者在论文中用实验表明,初始化过程中,只有当系统有足够的旋转时(超过30度),acc bias 才能收敛的比较好。反过来,如果初始化过程中忽略 acc bias, 通常 acc bias 对单目相机尺度的估计影响是在一个可接受范围内。
  4. 2018 年 ICRA,Online Initialization and Automatic Camera-IMU Extrinsic Calibration for Monocular Visual-Inertial SLAM. 求解VIO初始化过程中所有的参数,该论文在 ORBSLAM VIO 的框架下加入了外参数的标定。外参数旋转和平移的计算则参考沈老师的他们的做法。
  5. 2018年 ISMAR, Visual-inertial slam initialization: a general linear formulation and a gravity-observing non-linear optimization
  6. 2017 年 IROS, Inertial-Based Scale Estimation for Structure from Motion on Mobile Devices. 上面几篇都是基于 IMU 预积分的, 把短时间内的加速度什么的积分起来, 然后和视觉算的姿态构建误差, 优化出那些变量. 这篇论文不一样, 它是将相机姿态转换成角速度和加速度,和 imu 测量值去构建误差. 并且提出了频域对齐的方法, 值得一读.

时间戳标定

  1. 2018 年 ECCV, Modeling Varying Camera-IMU Time Offset in Optimization-Based Visual-Inertial Odometry 沈老师组博士 yongen lin 的论文. 基于VINS-Mono的论文. 该论文认为imu 和 cam之间不是时间同步的, 时间延迟 t d t_d td 也不是常数, 而是一个时变的变量. 可以认为作者把这个时间延迟当做了一个 imu 的 bias, 每次迭代优化出时间 t d t_d td, 都会将 camera 的姿态进行补偿, 从而把时间因此耦合到误差项进行优化. 这是在腾讯 AI Lab 的工作, 代码没有开源.
  2. 2018 年 IROS, Online Temporal Calibration for Monocular Visual-Inertial Systems. 沈老师他们最新 VINS-Mono 代码里已经集成了这个时间戳标定的代码, 算法假设 imu 和 cam 之间的延迟是常数的, 和以往将相机姿态利用速度和角速度乘以时间差进行补偿不同, 沈老师他们设计的非常巧妙 (比上一篇感觉更优雅). 将 imu 和相机之间的时间延迟, 变成图像平面特征检测的位置的延迟, 这样就简化了整个误差函数.

自监督在线标定

  1. 2013 年 IVS,Self-supervised Calibration for Robotic Systems. 标定工具 Kalibr 对应的论文。这篇论文非常值得一读,将传感器内外参数和机器人状态一起在线估计,并详细推导和描述了什么时候用测量数据自动更新估计的传感器参数。论文从最小二乘出发,描述了高斯牛顿估计所有参数的过程,并指出了数值计算不稳定会影响信息矩阵可观性的解决方法(即对特征值小于一定阈值的维度不进行更新)。最后提出了使用信息熵来判断新的测量数据是否用来更新内外参数的算法流程(直观理解:判断在新数据条件下待估计参数的协方差的行列式相比之前数据条件下待估计参数的协方差的行列式是否下降了一定阈值)。这篇论文中提到的可观性,信息矩阵,以及他的在线更新方法都很值得一读。同时,作者在ETH的硕士论文以及truncated_svd代码都在github上开放了。
  2. 2017 年 ICRA, Visual-inertial Self-calibration on Informative Motion Segments. 李名扬二作,思路和上篇差不错,也是判断信息熵协方差之类的决定参数是否更新。2019 年 IEEE Sensors Journal, Observability-aware Self-Calibration of Visual and Inertial Sensors for Ego-Motion Estimation. 他们把 17 年的论文进行了扩充。另外,一作小哥已经 ETH 博士毕业,也可以读读他的博士论文 thesis.pdf。

可观性,一致性,不变性

  1. 2005 年 IJRR, John J. Leonard ,Exactly Sparse Extended Information Filters forFeature-Based SLAM. 大佬们的IJRR, 这篇文章虽然跟可观性啥的没关系,但是他讲了信息矩阵的 fill-in 问题,能帮你梳理信息矩阵,协方差矩阵,marginlization 之间的关系。
  2. 2012 年 ICRA, Consistency Analysis for Sliding-Window Visual Odometry. 其实sliding window VO早期的论文应该是2006年G.Sibley,但是个人感觉没Dong-Si 的论文写得好。Dong-Si 12 年的这篇论文把滑动窗口BA中雅克比不一致导致的可观性消失讲的清晰易懂,很容易就理解了FEJ的来头。八卦一下,Dong-Si 的个人主页,工作简历可以看出12年毕业后就没做 SLAM 了,搞数据库SQL啥的去了,联想到2012年在TRO上首次提出预积分的作者也做玩具去了,估计那会SLAM不好找工作吧。
  3. 2006 年,Observability and fisher information matrix in nonlinear regression. 说了什么是可观不可观, 以及和信息矩阵的联系。不是从滤波那个状态方程去推导的。
  4. 2012 年, msckf 那个实验室的技术报告,Observability-constrained Vision-aided Inertial Navigation. 之前的操作是 FEJ, 带来的问题是线性化点的误差比较大,这篇论文直接对可观性矩阵进行强制零空间约束,也就是强制使得传递矩阵的零空间维数不会减小。论文中对这个约束对雅克比矩阵的影响进行了推导,得到了一个闭式解,宾大的开源代码 mskcf_mono 对这个进行了实现。这篇论文另外一个值得学习的地方是在附录中对 IMU 的 propagation 的误差状态转移矩阵 Φ \boldsymbol{\Phi} Φ 进行了详细的推导。当然,Mingyang Li 的技术报告 也对零空间,状态转移矩阵进行过详细推导。仔细阅读这两个论文,就能把套路摸清。当然 VIO 的可观性论文很多, 不过都是明尼苏达那实验室出来的,比如还有这个 Unobservable Directions of VINS Under Special Motions 也可以看看。
  5. 2016 年 arxv,Barrau,An EKF-SLAM algorithm with consistency properties. 不变性理论:当给定数据和系统,作者认为系统每个时刻的协方差(不确定度)应该就确定了,和我们估计的各时刻状态量没关系。上面那些认为线性化点不同而造成协方差估计出现问题的论文并不本质,因此作者提出了不变性 EKF. 这篇论文从 2d ekf 这个简单的例子进行阐述,对理解该算法很有帮助,该算法确实找到了问题本质。作者的其他论文都较理论,下面那篇是他的 15 年的博士论文,感兴趣的可以继续深入。
  6. 2015 年 phd thesis, Non-linear state error based extended Kalman filters with applications to navigation. 作者Axel Barrau 和他导师一直沿着 invariant ekf 的路在走,发了很多关于不变性的文章。
  7. 2018 年 IROS,Invariant Smoothing on Lie Groups. Barrau 的小师弟把不变性做从 ekf 扩展到了优化的框架。
  8. 2018 年 Phd Thesis,Improving Visual-Inertial Navigation Using Stationary Environmental Magnetic Disturbances. 该作者也去过Cremers组,发了一篇鱼眼 LSDSLAM。不过博士论文跟那个没关系,他的第七章对一致性的几种方法(EFJ,OC-EKF, condition, robocent, invariant)进行了大致算法分类和梳理,并在自己系统中采用了 invariant ekf 。

其他

  1. 2018 年 IROS, zhichao zhang, A Tutorial on Quantitative Trajectory Evaluation for Visual(-Inertial) Odometry. 轨迹评测的论文,Scaramuzza 组做的工作都非常扎实,细致。
  2. 2018 年 RAL, zhichao zhang, On the Comparison of Gauge Freedom Handling in Optimization-based Visual-Inertial State Estimation . VIO 有四个不可观的自由度,优化的时候需要特别处理这四个自由度,通常有三种方法,是固定这四个自由度,还是给这四个自由度加先验,还是像 vins-mono 那样任意优化这四个自由度最后reset? 这篇论文就这个问题进行了详细讨论。结论是三种方式精度都差不多,但是任意优化然后reset的操作会收敛的快一点。不过任意优化的不好之处在于他没有一个参考系,信息矩阵的逆得到的协方差没有太多的意义,作者参考引用14中的方法给出了解决方案。最后,作者给出了协方差的变换那部分的代码。
  3. 2018年 ECCV, Fast and Accurate Camera Covariance Computation for Large 3D Reconstruction。如何从BundleAdjustment里面快速恢复协方差,同时这个论文给了一个零空间的计算方法。这个零空间和dso代码中的计算方法一致,其实也是和前面 mingyang li 他们的算法是一致的,只不过给出的另一个视角下零空间原来是这么来的。
  4. 2013 年 BMVC, Steven Lovegrove ,Spline Fusion: A continuous-timerepresentation for visual-inertial fusion withapplication to rolling shutter cameras. 这篇论文三作是sliding widow filter 作者 Sibley, 用样条差值的方法来解决 rolling shutter 的问题,另外样条插值的方法也用到了 imu 数据的仿真中,给定特定时刻的姿态,他能从姿态插值生成线速度,加速度等数据。
  5. 2018 年 IROS, Arno Solin, VIO 数据集,用 iPhone 等设备采集的,对标 ARkit, ARcore, ADVIO: An Authentic Dataset for Visual-Inertial Odometry. 除了数据集贡献,作者也写过 VIO 论文, 18 年的 wacv 论文,PIVO: Probabilistic Inertial-Visual Odometry for Occlusion-Robust Navigation,17 年的 Inertial Odometry on Handheld Smartphones.
  6. 2017 年,msckf 组,Edge-based visual-inertial odometry. (占坑)
  7. 2010 年,Zero-Velocity Detection—An Algorithm Evaluation. 2013 年 Tutorial: Implementing a Pedestrian Tracker Using Inertial Sensors.
  8. 2013 年,Computing Velocities and Accelerations from a Pose Time Sequence in Three-dimensional Space. 弗莱堡大学的一个技术报告,从 一系列 pose 生成速度加速度。

VO 前端

光照处理

  1. 2017 年 ICRA, Illumination Change Robustness in Direct Visual SLAM ETH的论文,针对直接法对光照不鲁棒的问题,调研了十来种处理方法,有些参考意义。
  2. 2017 年 RA-L, P. Bergmann, Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM. Cremers 组的工作,对 DSO 光度标定算法进行了加强,变成了在线光度标定,并用于光流跟踪,看上他们的光流对光照变化比较适应,效果不错。
  3. 2017 年 ICRA,Zichao Zhang, Active Exposure Control for Robust Visual Odometry in HDR Environments 光照相应模型讲的比较清楚,也在直接法的 VO 里应用了。

特征匹配

  1. 2018 年 IROS, Geometric-based Line Segment Tracking for HDR Stereo Sequences. PL-SLAM 作者做的一个关于双目序列图像的直线匹配工作. 传统的直线匹配都是提取描述子之类的, 但是对于序列图像, 图像之间的运动变化比较小, 可以利用直线在图像里的几何性质来完成匹配(如直线在图像里的角度). 作者提出的方法不依赖图像特征, 匹配速度也比 LBD 有所提高. 直线长度差不多, 直线角度差不错, 对于直线中心点也加了一个极线条件. 将这些条件组合在一起构建了一个误差函数, 进行L1优化, 每个直线只找到一个对应的匹配项,使得匹配误差最小.

VO 后端

  1. 斯坦福大学的凸优化,Convex Optimization
  2. 2009 年,SBA: A Software Package for Generic Sparse Bundle Adjustment. g2o 里的 LM 算法流程参考的就是这篇论文的实现方法,老的经典论文还是值得反复读。
  3. PCG代码实现参考资料:1. 2018 年 master thesis,Efficient Optimization For Robust Bundle Adjustment. TUM 的硕士论文,里面有 PCG 等算法的伪代码流程。2. The Preconditioned Conjugate Gradient Method 这是一个课程的note, 伪代码流程非常的清晰,如果想自己实现代码,可以照着这个复现。对应的在网上找了别人写的 PCG 函数,点这里。
  4. 2009 年,A Brief Introduction to The Conjugate Gradient Method. 如果你对 CG 方法原理不是很熟,可以看看这个 8 页的pdf, 就能该方法的思想和出发点了解个大概。
  5. 1994 年, An Introduction to the Conjugate Gradient Method Without the Agonizing Pain. 当然如果你想进一步知道 CG 和 PCG,这篇白话就非常值得一读。
  6. 2004 年 book, Iterative methods for sparse linear systems. 第九章讲了PCG,这本书引用上万,估计也是圣经。
  7. 2014 年 ECCV, Christopher Zach, Robust Bundle Adjustment Revisited. 这篇论文主要讲了 robust cost function 在代码里实现的四种方式。这篇论文是参加 ECCV 2018 的 workshop 时,谷歌的大佬们推荐的,论文中提到的 Triggs Correction 方法正是 ceres 采用的。同时,我也在网上找到了这篇论文对应的代码(github链接).
  8. 对于带约束的凸优化问题,可以使用半正定规划( Semi-definite Programming, SDP)或者SDR (Semi-definite Relaxation) 来求解。对于这类问题的初步了解可以先看看知乎大佬的回答:SDP (半正定规划) 有什么形象的实例?怎么理解?,然后系统看看 Introduction to Semidefinite Programming 和 Semidefinite Relaxation of Quadratic Optimization Problems.

激光 SLAM

基础知识

  1. 推荐两个课程: 2013年,弗莱堡大学 Cyrill Stachniss 教授的 SLAM Course, youtube 有课程视频,网上pdf 也有。Coursera 上 Robotics: Estimation and Learning, 这个课就比较简短一些,但是非常适合新手快速入门。
  2. Occupancy Grid Map. 地图是激光 slam 系统的核心,通常激光 slam 都采用 logodds 算法对栅格地图进行概率更新。知乎上有个人对 Coursera 上课笔记进行了总结,写得非常好,对公式的推导很简洁,完整详细的推导得看 Stachniss 教授的课视频,课件。

2D SLAM

  1. 2015 年 master thesis. Precise indoor localization for mobile laser scanner. 这篇硕士论文整理了比较了 hector, gmapping, karto 三种激光 slam 方法,论文实验比较的非常详细。各自优缺点以及存在的问题都大致总结了。
  2. 2009 年 ICRA, Edwin olson. Real-Time Correlative Scan Matching. 这篇 Scan Matching 的论文是 catographer, karto 等基于图优化的 SLAM 算相对 pose 的基础。另外,AprilTag 也是作者Prof. Olson 2011 年的论文。
  3. 2011 年 SSRR , Stefan Kohlbrecher. A Flexible and Scalable SLAM System with Full 3D Motion Estimation. 这篇论文是 hector slam 的 scan match 方法,hector 代码里有对应的代码实现,很清晰简洁,如果你熟悉高斯牛顿的话,能很快上手。cartographer 里的real time scan match 就是采用的这篇论文的计算方法。
  4. 2012 年 IROS,大佬 Wolfram Burgard 加持,On the Position Accuracy of Mobile Robot Localization based on Particle Filters Combined with Scan Matching. 采用 amcl + pl-icp。
  5. 2008 年 IROS,Andrea Censi,csm, 以及 icp 的协方差估计。前面那个 icp 协方差扩展到3D, 并且 eth 的 icp 库 libpointmatcher 里好像也是用的Censi的这个公式计算的协
  6. 推荐几篇动态环境的 2d laser slam,思路都差不多,定位过程中会构建局部 local map 用来去除动态点云。2018 年 IROS, gmapping 作者加持,Efficient Long-term Mapping in Dynamic Environments, 论文开放了代码. 2008 年 IJRR, Experimental Analysis of Sample-BasedMaps for Long-Term SLAM. 2012 年 IROS, DynamicPose GraphSLAM:Long-termMappingin Low DynamicEnvironments, 这篇论文几个大佬加持,论文 III-A 部分介绍了怎么计算 local map,大致思路是拿一小段历史轨迹组合成的 grid map 和当前帧的点云做比较,得到动态物体的点云。
  7. 2016 年 RAL, Fast Keypoint Features from Laser Scanner for Robot Localization and Mapping.. 意大利 University of Parma,这篇论文提出了两种 2d 激光特征提取方法以及描述子提取方法,代码开源在二作小哥 Dario Lodi Rizzini 的 github 页面。二作小哥,2019年陆续提出了两篇 2d 激光相关的论文,一个是全局闭环匹配,一个是用于全局最优匹配的快速分枝定界方法。都开放了源码在小哥的 github 上,感兴趣的小伙伴可以尝试下。

参数标定

码盘内参数以及激光外参数标定

  1. 2013 年 TRO,Andrea Censi,Simultaneous calibration of odometry and sensor parameters for mobile robots. 这篇论文将码盘的内外参数一起标定了,作者提供了代码。论文方法简单,读论文就可以,这里想隆重介绍下作者,Censi,做啥都牛,喜欢各种开源自己的代码,激光 icp 方面出了csm。 优化方面也和 gtsam 那些大佬有诸多合作,也和木吒(Scaramuzza)合作挺多,总之,论文和工程都贡献不少, 感兴趣的看一下他的简历,能发现不少好工作。

相机码盘外参数标定

  1. 2013 年 IROS, CamOdoCal: Automatic Intrinsic and Extrinsic Calibration of a Rig with Multiple Generic Cameras and Odometry. ETH 的工作,CamOdoCal 还是比较有名的一个工作,代码开源,如果有需要可以把标定那部分的代码扣除来。

激光相机外参数标定

  1. 2004 年 Qilong Zhang, Extrinsic Calibration of a Camera and Laser Range Finder (improves camera calibration). 这是改领域较早且非常有名的一篇论文,开放了相应的 matlab 代码。标定方法使用一个标定板,相机和激光都能看到这个标定板,相机能实时计算出到标定板的姿态,标定板的平面方程能事先假设,然后利用激光落到里这个标定板平面(点在平面里),构建约束激光到相机的外参数约束,从而求解外参数。这个方法每一次观测实际上只能提供两个自由度的约束(因为平面里的激光点共线了,相当于只利用了两个激光端点构建约束),因此需要不同位置拍摄多组观测,最后一起求解。代码1, 代码2.
  2. 2017 年 ICRA, Wenbo Dong, A Novel Method for the Extrinsic Calibration of a 2D Laser Rangefinder and a Camera. 这篇论文对历年的经典外标定算法进行了简单的点评,并提出了自己的单帧观测就能计算外参的算法。该算法利用两个相交平面(不需要是直角相交)来标定,虽然不要求直角,作者要求两个平面是两个三角形构建的(当然制作标定板的时候,打印边框成三角形的形式,然后折纸飞机一样折一下就行了),这样标定板和相机之间就有多个平面了(标定板本身的两个平面,激光线和标定板三角边也会相交这里又提供了两个平面)一共六个约束,所以单帧可解外参数。作者实验也验证了他的方法比04年的那个精度要高。当都采用20组观测进行标定时,他的平移误差4mm, 04年的那个12mm左右。虽然这个方法单帧可以出结果,但是他每次都依赖激光和标定板那几条直线的交点,一旦交点不准,比如激光传感器的噪声比较大,如1cm时,单帧标定误差好几cm。作者也建议使用多帧一起标定。感觉和04年那篇差不多。
  3. 2015 年 ICRA, Ruben Gomez-Ojeda, Extrinsic Calibration of a 2D Laser-Rangefinder and a Camera based on Scene Corners. 这篇文章放在这主要是因为作者是 PL-SLAM 作者,他也做过激光视觉标定。他的方法不需要标定板,直接利用三个垂直面的三条线的相交点确定三条直线(如果直接用 lsd 检测,可能三条直线不会相交于一点,误差较大),根据激光和直线的相交点构建点在平面上的方程。这个方法感觉比较复杂,容错率比较低。论文开放了matlab源码,在二作的github页面上。
  4. 2018 年 IROS,Lipu Zhou, isam 作者 Kaess 的学生,Automatic Extrinsic Calibration of a Camera and a 3D LiDAR using Line and Plane Correspondences. 这篇是 3D 激光雷达和相机之间外参数。这篇也是利用多个线和平面约束,直接单次观测可以出外参数,不需要把传感器动来动去采集多组数据。
  5. 2017 年 ICCV,Zoltan Pusztai, Accurate Calibration of LiDAR-Camera Systems using Ordinary Boxes. 这篇还没读,先不评论。

你可能感兴趣的:(slam)