VLOAM
📌本质上,VLOAM是将LOAM的Odometry线程换成了VO
双线程:与LOAM一致
-
使用高频(60Hz)的VO来做里程计Odometry;
-
然后使用低频(1Hz)的Lidar来细化运动估计,并且消除由于视觉里程计的漂移而导致的点云失真;
RGBD的问题
- RGBD有深度信息和RGB图像信息,非常好用。但是!深度信息D比较短,而且不能保证每一个像素都能有对应的D信息;
📌VLOAM将激光点云投影到像素平面,将深度和RGB信息联系起来;
VLOAM的三种深度:
(1)激光点云投影过来的深度;
(2)利用先验位姿估计得到的三角化深度;
(3)不可用的深度;(可能就是激光点云投影过来没有对应的像素点)
📌Track:在目标函数中,残差大的特征点对应较小的权重;残差大于阈值的特征点直接就视为“异常值”,权重为0
激光点云转深度
-
将激光点云存储为深度图,然后只保留相机前方的激光点云,而且在一定时间之前接受的点,直接删除;
-
将深度图缩小到一个恒定的点密度(目的就是为了保证点云更密集,从而在与RGB关联的时候,保证RGB每个像素都有对应的深度值);
-
将缩小后的深度图投影到RGB图像帧;
📌在球坐标系下,使用距离 + 两个角度 来表示“深度图中的点”,并且存储在二维KDTree中;当特征匹配的时候,从每个特征中找到深度图上最近的三个点,三个点构成一个平面,然后计算特征点到这个平面的距离;
这个 “距离”用于特征匹配;
- 但是,深度图中有些特征的距离不可用(可能是没有对应的像素点),但是吧!这些特征已经被追踪了一段时间(因为使用的是KLT光流追踪),所以不想放弃这些点,所以要解决这些点“没有深度”的问题:
使用前一帧的位姿估计,来计算三角化深度;
-
绿色的点是与深度图距离相关的特征;
-
蓝点是三角测量;
系统框图
-
sweep to sweep refinement step匹配连续扫描之间的点云以细化运动估计,目的是为了消除因为视觉里程计引起的点云畸变;
-
sweep to map registration step匹配并在地图上注册registration点云;(其实就是LOAM的scan2map)
📌VLOAM有两个线程:(1)视觉VO(文中称为DEMO) (2)LOAM
- 视觉VO:Harris + KLT光流;
为了均匀分布图像的视觉特征,将图像划分为5 - 6个相同的子区域,每个子区域提供最多10个特征
- 融合高频和低频,最终发布高频位姿:
高频VO实现粗略的位姿估计(60Hz),低频的Lidar细化位姿估计(1Hz);在完成scan2map之后将VO和Lidar线程合并,输出高频的位姿估计;