ElasticFusion: Dense SLAM Without A Pose Graph
一、主要贡献
-
surfel-based稠密建图。
-
将surfel分为激活区域和非激活区域,一段时间内未观测到的归入非激活区域。
-
每一帧,尝试把激活模型中当前相机估测位姿部分,登记至非激活模型在当前帧的部分,若登记成功,则检测到闭环,进行非刚体变换。发生闭环的非激活部分再次激活,放入登记的区域。(每一帧把同视角下的激活部分和未观测到的非激活部分匹配,来检测闭环)。
-
对于全局闭环,向随机encoding database里添加预测视角,每一帧匹配这个视角,如果匹配到,就登记这个视角并检测是否全局一致。如果是,对地图进行非刚体变换,消除闭环。
二、算法流程
-
ElasticFusion通过RGB-D图像配准计算位姿,根据输入点云利用ICP算法配准计算位姿。
-
计算相机位姿如果误差大于设定阈值,表示跟踪失败,启动重定位算法;如果误差小于设定阈值,则进入下一部分。
-
利用Random Ferns进行全局的回环检测算法,检测是否存在全局的回环,如果存在全局的回环,假设当前帧为Icur 检测到和第i帧存在回环;再利用第一部中的跟踪算法计算当前帧和第i帧之间的位姿,计算得到位姿变换后,在图像中均匀抽取一些点,建立约束,优化node参数。
-
在3中如果不存在全局的回环,则检测是否存在局部的回环,如果存在局部的回环,则同第3步,进行位姿估计,并且建立约束,优化node参数。
-
计算得到相机位姿后,将当前帧的点云和重建好的做融合,融合使用openGL 的shading language,如果在存在局部的或者全局的回环,在使用openGL进行点的融合时候,将优化之后的节点变量,作用于全部的点。
-
融合到全局模型中后,再用openGL投影得到当前视角下可以看到的点,用来对下一帧图像配准。
三、Surfel表示模型
对于每个点,存储了:
点的位置信息:(x, y, z)
面片的半径: r
法向量: n
颜色信息:(R, G, B )
点的获取时间信息:t
在进行点的融合更新时:点的位置信