SLAMesh论文及代码阅读与思考<一>Real-time LiDAR Simultaneous Localization and Meshing

发布时间 2023-08-31 17:03:19作者: CodeEverything

前言

从SLAM建图到SLAM建模,是近年来这一领域发展的重要趋势之一。在此之前,环境三维模型的构建的一个重要标签就是实时性不足的问题,SLAMesh的提出,在这一问题上迈出了重要的一步,创新性地将高斯过程引入到环境信息的建模与预测任务之中,使得建模过程避免了对mesh顶点的搜索与优化,通过有序的顶点之间的连接,直接形成mesh,实现了实时性。在这里,不得不推荐作者所使用的高斯过程的前作,GP-SLAM,其作者为浙江大学的一名博士,其博士毕业论文写的深入浅出,化繁为简,向激光点云处理与建模的大本大源处循序渐进,读完让人觉得神清气爽,酣畅淋漓,几乎可以脑补出作者在博士期间一步一步探索的思绪与悸动。这样的读博做科研的历程,真是可遇不可求。读者可以自行去搜索其博士论文。当时读完之后,觉得GP-SLAM应该在学术界受到更加广泛的关注,但是奇怪的是并没有产生较大的效应。直到遇到了SLAMesh,才弥补了这样的遗憾。SLAMesh是将GP思想在SLAM领域进一步继承与发扬的典范。
关于SLAMesh的介绍,有其作者亲自的讲解
B站链接:https://www.bilibili.com/video/BV18P411W7eD/?vd_source=5af98011ae6979fcae8975f2832f9cd3
Github:https://github.com/RuanJY/SLAMesh

不过,近几年SLAM领域的重要进展和开源工作都是港科大实验室推动的,在激光SLAM领域引领风骚,羡慕之余,请君共勉。

论文Motivation

论文框架和具体过程,读者直接观看其在B站的讲解就可以,我就不在此造次。但是我更关注的是如何思考SLAM建模这一问题。从KinectFusion、ElasticFusion到BundleFusion等各种Fusion,从C-blox,VoxBlox再到VoxBlox++,Puma和VDBFusion,VoxField,TSDF的建模范式始终不变。最后再用上个实际的经典算法marching cube提取出零值面生成mesh网格模型,存储为ply格式。我们首先来看下ply格式包含了哪些信息,一般情况下,包括

  • 标头
  • 顶点列表
  • 面列表
  • 其他元素的列表
    面列表中包含了一个面对应的顶点的索引,是ply中最重要的数据部分。从最终的建模结果可以看出,SLAM建模的核心任务就是估计顶点和顶点之间的连接关系,使得所形成的mesh的集合能够最大程度的拟合点云地图。而之前的方法中,要同时搜素和优化顶点和面,所以较为费时。所以,从实时性的角度来说,SLAMesh的动机应该是,如果顶点不用优化,连接关系也不用过渡搜索,岂不就可以实时?
    那么在这样的思想指导下,其实除了SLAMesh这一种方案,还有其他的方案存在,读者可以自行发散,发散结果就会是一篇新的顶会论文。

SLAMesh的性能讨论

  1. SLAMesh作为一种建模方法,属于scan-to-map的机制,漂移误差仍然不可避免,在代码中,可以看出并未考虑加入闭环后对整个模型的更新,这也是重点挑战所在。就算是TSDF范式,也是默认定位信息是准确的,其本身也难以对位姿和模型进行全局的优化。而提升定位精度的有效方法之一就是加入IMU传感器,通过有效的融合,相信可以将漂移误差控制在非常小的范围内。
  2. 由于点云分布的稀疏性和非均匀的特性,不同区域的顶点的稳定性的收敛程度不同。固定分辨率的mesh网格对不同曲率的环境表面的表达精度存在可能的不足,如果能进行自适应的调整,建模效果会更好。
  3. 从建模效果来看,动态物体的去除未被考虑在内,是否可以通过高斯过程中的不确定性量来去吃动态顶点,是一个可能的方向。

总结

本文对SLAMesh工作进行了自以为是的分析,接下来将对代码进行展开,向作者深厚的C++功底进行学习。