LIMO: Lidar-Monocular Visual Odometry

IROS2018的论文

本文提出了LIMO SLAM框架,主要工作是融合了LiDAR和Monocular。

https://github.com/johannes-graeter/limo

 

前端

特征

本文使用的是viso2特征,它能 non-maimum suppression, outlier rejection 和 subpixel refinement.

30-40ms能提取2000个特征。

深度

正常特征

单目没有深度信息,通过LiDAR获取。

首先把LiDAR点投影到图像平面:

  • 在特征点f附近选取投影过来的LiDAR点集F,不要取一条线上的激光点(右图)。

LIMO: Lidar-Monocular Visual Odometry

  • 在3D LiDAR空间把F分割前后景(深度不同),取前景点集F_f(因为特征点一般在边缘,打过去的激光点有些在特征点所在平面上,有些其实打在背景上了。)

LIMO: Lidar-Monocular Visual Odometry

  • 把F_f拟合一个平面,这个平面不能太小
  • 特征点的射线跟这个平面相交,获得特侦点的深度
  • 平面的法线和特征点的射线的夹角大于某个阈值,或者深度超过30米会被拒绝

地面特征点

地面上的特征点会特殊处理,因为(垂直方向)地面上雷达点更稀疏。

LIMO: Lidar-Monocular Visual Odometry

  • 首先RANSAC提取出地面平面
  • 跟之前一样我们围绕f逆和一个local平面,这个平面面积阈值比之前大一些

帧间运动量

除了常用的PnP估计外,

LIMO: Lidar-Monocular Visual Odometry

引入了Fundamental matrix的pFp约束。

LIMO: Lidar-Monocular Visual Odometry

另外用了Cauchy function包裹这个新引入的约束。

LIMO: Lidar-Monocular Visual Odometry

后端

关键帧的选择

mean optical flow 小于某个阈值的时候认为机器人没有在运动,此时不记录关键帧。

时间间隔是0.3s

路标点的选择

前端的时候所有的特征都会被计算,路标的选择在后端进行。

所有的特征点被分为远中近三组。

近处的特征对位移估计好

中间的点都好

远处的点对旋转估计好。

用了voxel filter with median filtering 来减少trees bushes对BA的影响(把局部地区富集到一起的信息离散化了?)

BA的lost function

lost function包括三部分:

投影误差和深度估计误差

LIMO: Lidar-Monocular Visual Odometry

以及

LIMO: Lidar-Monocular Visual Odometry

这个误差我没看懂,说是

优化窗口内最古老的motion包含最多的信息所以最准确。

因此我们增加了cost functor v that punishes deviations from the length of its translation vector.

P0 P1是优化窗口中最近的两个pose。

LIMO: Lidar-Monocular Visual Odometry

s is a constant with the value of LIMO: Lidar-Monocular Visual Odometry before optimization.

In that way changes in scale are regularized and the estimate is smoother and more robust outliers.

 

另外他们的BA会定期剔除一些误差项以跳出局部最优。

LIMO: Lidar-Monocular Visual Odometry