原标题:IMLS-SLAM:基于scan-to-model方法的大场景3D激光SLAM
来源:自动驾驶之家 链接:http://www.heredrive.com/news/20191204/7131.html
论文题目:IMLS-SLAM: scan-to-model matching based on 3D data
IMSL-SLAM 和 IMSL-SLAM++是kitti数据集上仅次于LOAM的激光SLAM系统,虽然它有一个最大的缺点,就是不实时,而且时间确实非常慢(1.3s),但是作者也给出了这种不实时的原因,是可以改进的。更重要的是,论文里以IMLS曲面为基础进行的scan-to-model匹配方法是值得借鉴的,有必要进行了解,所以我们在这里一起探讨这篇论文。
一、整体思路
即使不看论文,我们也应该清楚,作为一个SLAM系统来讲,它的整体思路基本包含以下几方面:
1)处理点云。包括去畸变,移除离群点,高级点可以移除动态物体
2)对点云采样。一般都不会用全部点的,具体采样方法主要取决于自己的匹配方法
3)建立地图。可以是特征地图,可以是点云直接拼接的地图,也可以是曲面模型
4)匹配。把点云和地图进行匹配,更新位姿
5)更新地图。根据新的点云,对地图进行更新。更新频率和策略一般也取决于匹配方法
本文的SLAM方法作为SLAM的一种,自然也遵循这个规律。所以以上五点就是它的整体思路。
另外,以上五点是概括性的,包含了多种选择性,而本文的方法属于其中基于曲面的地图匹配方法,所以建立地图和地图更新就主要是曲面更新,匹配就主要是和曲面的数据关联以及优化。
下面对各个点分别介绍
二、实现方法
1.处理点云
这篇论文在处理点云上所加的措施是移除了一些离群点和动态物体。它所采用的做法是先提取地面,然后对剩下的点云聚类,小于一定尺寸的聚类(14m×14m×4m)就全部去掉。
好暴力啊!
这种自然能把移动物体去掉,正常交通路面上,能移动的物体一般也不会大于这个尺寸,但是这种宁可错杀一千也不放过一个的做法显得有点粗暴,周围点云少的时候,再错误去掉了一些非动态的点云,效果自然不会太好。
移除动态物体有很多方法,聚类是第一步,在聚类之后如果加上一些跟踪和判断,只移除真正运动的物体,会更合适一些。
2. 对点云采样
这一步比较有意思。
在以前的改进版ICP中,提取点的特征的时候往往都是先计算协方差矩阵,然后对矩阵计算特征值,根据特征值对特征分类,同时提取主轴方向,根据主轴方向和特征值进行点的筛选。
作者认为这样不好,值得拥有更好的。
他认为,首先主轴方向应该为车的方向,也就是雷达的方向,其次,提取点是为了匹配得到位姿,不同的点对位姿精度的贡献不一样,如果能直接提取出对位姿贡献大的点,那么不就既可以很大程度上减少点的数量,又可以取得很好的精度吗。
所以,这个问题就演变成了,怎样去判断哪些点对位姿精度贡献大,对算法来讲,就是设计一些指标,去把这些点筛选出来,下面这几个公式就是作者筛选的九个指标
关于这九个指标,作者的解释是前六个是点对姿态精度贡献的定量评价,后三个是对位置精度贡献的定量评价。至于为什么,我也没想太清楚,有没有大神指点下?
总之,作者对每个点都计算九个量,就得到了九列值,然后对这九列值排序,找出对位姿影响最大的那些点,就完成了筛选。
这里有一张图,展示它的筛选方法,其中红色的点就是筛选过的点。
3. 建立地图
首先,作者使用的地图是曲面地图,关于曲面地图的简介和历史,在以前介绍SuMa-SLAM的时候已经介绍过,这里给出链接,不再详述了。
激光SLAM|SuMa:基于Surfel地图的室外大场景SLAM
IMSL:《Provably good moving least squares》由于KinectFusion使用的TSDF曲面表示方法不适合大场景,所以使用了IMSL曲面表示方法。作者对这个方法并没有做什么改进,只是使用,所以我们给出文章题目,感兴趣的可以去看论文。
MSL:《Mesh-Independent Surface Interpolation》(IMSL的前身)
4. 匹配
毕竟scan-to-model嘛,所以就是scan和曲面地图之间做数据关联然后优化。
这里用三个公式来表示匹配原理
其中前两个是对点做映射,最后一个是根据位姿计算残差,有了残差去优化不就是修正误差,得到匹配的精确姿态了嘛
5. 更新地图
更新地图就是把原有地图章没有,而新的点云中有的东西加入地图中去。同时注意的是,为了匹配时和scan进行数据关联,要对地图进行KD树存储,目前的做法是每次更新完就重新建立KD树,显然这种做法比较耗计算量,这也是整个步骤中耗时最长的一步。所以设计增量式KD树是有必要的,即每次根据删除的老点和增加的新点更新KD树,而不是重新建。
三、实验效果
他和LOAM比,在他自己的实验中,性能是优于LOAM的,但是在kitti的榜单中,却落后于loam。而且还有一个现象,这里loam的指标和kitti榜单公布的指标是基本吻合的,而作者的SLAM在kitti上的指标却没有这个论文里的好,即使后来的改进版本IMSL-SLAM++也没达到这种水平。
经各位大佬的指点,原因可以归结为以下几方面:
1)kitti分训练集和测试集,榜单上是测试集的结果,论文中是训练集的结果,所以出现不一致的现象,而且一般训练集要比测试集精度高。
2)loam开源出来的是老版本,榜单上是新版本,做了很多改进,所以,如果loam新版本再用训练集做一次测试,精度会比表格中给出的要高很多。
四、关于效率
在效率方面,它的时间实在是太长,IMSL-SLAM是1.25S,IMSL-SLAM++是1.3S,在这一点上,作者也给出了自己的解释,主要包括两方面
1)他使用扫描的三维点云计算每次扫描的法向,而不是使用论文《Fast and accurate computation of surface normals from range images》中的方法,而后者比前者快17倍,至于为什么不用,他说是因为Kitti数据集只提供三维点云,而不提供原始激光雷达数据。这个理由略显牵强,而且这一步只消耗了0.2s,不是时间的大头
2)就是刚才提到的更新地图时KD树的事,这一步消耗1.0s,所以改进这一步去提高效率倒是可取的。
【来源:知乎】
一THE END一
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com