Voxblox: Incremental 3D Euclidean Signed Distance Fields for
On-Board MAV Planning
来自ETHZ:Autonomous systems lab的好文章
增量式的用于无人机导航的3D欧几里得符号距离场
摘要:在非结构、未探索的小型无人机需要快速的灵活的局部路径规划算法,并且这样的规划算法可以在探索到新的地图部分的时候重新规划路径。轨迹最优化方法可以满足这样的要求,但是需要障碍物的距离信息,这个距离信息可以从ESDFs中得到,也就是本文主角欧几里得符号距离场。
我们提出了一种方法,可以增量式的从截断距离符号场(TSDFs)中构建ESDFs,其中TSDFs是一个通用的显式的在计算机图形学和计算机视觉中使用的表面表示方法。TSDFs可以非常快速被构建并且通过多次观测来平滑掉(smooth out)传感器噪声,此外TSDFs可以用来构建网格。(meshes)
我们的方法可以以超越构建八叉树地图(octomaps)的速度构建TSDFs,而且从TSDFs构建的ESDFs比octomaps更准确。这样的完整系统被称为voxblox,将会开源,并且可以在一个CPU上实时的运行。我们在MAV上通过使用一个轨迹最优规划器验证了我们的方法,整个验证过程都是on-board和实时的。
基础知识;
TSDFs 是截断符号距离函数场,这里的体素储存的是 投影距离(projective distance),就是沿着传感器射线到已测量的表面的距离。
ESDFs 是欧几里得符号距离场,在这个场里面的每一个体素都包含了距离它最近的障碍物的欧几里得距离。
主要贡献:
1)第一个能在地图动态增长的情况下,从TSDFs中增量式的构建ESDFs的方法
2)为了最大化在大体素(large voxel sizes)的情况的TSDFs的重建速度和表面准确度,分析了不同的构建TSDFs的方法。
3)提供了定量的和实验上的关于ESDFs误差的分析,并且提出了安全的克服这些误差的补丁
4)通过在无人机上使用这些地图以及在线再规划来验证整个系统。
系统构成:
1)把不断采集到的数据整合进入TSDFs中,
2)通过传播来自TSDFs的已更新体素来更新ESDFs。
此外本程序的实现用到了哈希表:
为了使得这个地图更适合用于探索和建图应用,我们使用一个利用了体素哈希方法的有动态大小的地图。每一种体素(voxel)(不论是TSDF还是ESDF)都有属于它的层(layer),并且每个层都有独立的块(block),其中这些块是通过它们在地图中的位置来建立索引的。块位置和它们在内存中的位置之间的映射是储存在哈希表中的,这个允许o(1)的插入和查找操作。这样就使得数据结构能够更加灵活的用来建立地图,并且可以获得比八叉树地图更快的查询速度。
这是整个地图的流程,ESDFs用来给无人机规划路径,TSDFs用来生成网格,以便给人类观看
TSDF构建过程:
A:加权(weighting)
将新的扫描数据整合到TSDF里面的一种常见的策略就是对从传感器原点到传感器里面每一个点都执行光线投射(ray-cast),并且沿着这条线更新距离和权重。加权函数的选择对重建结果的准确性有很大的影响,特别是对于大的体素,在这里每次扫描都可能把上千的点整合到同一个体素里面
Kinectfusion 讨论说使用基于
控制整合过程的广泛方程是基于现有距离、体素的权重,D 和W,以及新的更新值是来自于在传感器中的特定点的观测,d和w,其中d是从表面边界过来的距离。考虑x是现有体素的中心位置,p是不断来到的3D数据点的位置,s是传感器原点,并且
我们建议使用一个复杂的权重与上面显示的权重进行对比,bylow等人比较了在等表面边界之后进行权重下降的结果,然后发现一个线性的权重下降通常会得到更好的结果。
nguyen等人根据经验确定了一个RGBD模型,发现单一射线测量值的
其中,我们使用了一个截断距离
直观的来说,这会使得从多视点观测到的薄曲面的表示形式有更大区别,这是因为他减少了没有被直接观测到的体素所产生的影响(在曲面后的体素)
B 合并
当我们专注于使用更大的体素大小来加速计算的时候,一个重要的需要考虑的就是如何使得新的扫描数据被整合到现有的体素网格中(voxel grid),对于大的体素(大约几十厘米)来自同一次扫描产生的数千个射线也许会映射到同一个voxel,我们利用这一点通过设计一个对每一个end voxel只执行一次光线投射的策略来显著提高速度。
这两有两种主要的可以把传感器数据整合到TSDF里面的方法:【光线投射】,【投影映射】
【光线投射】:光线投射从相机光心出发,到观测到的每一个点的中心,更新从中心到截断距离
【投影映射】:把在可视区域内的体素投影到深度图里面,同时计算它的距离:在深度图中的值与体素中心的距离,这样做非常的快,但是在大的体素上会导致很严重的aliasing(扭曲)效应
我们提出的新方法【分组光线投射】(grouped raycasting):显著的加速了光线投射速度,但是又不会损失太多的准确度。对于在传感器数据中的每一个点,我们把它的位置给投影到体素里面,然后把它和所有的被映射到同一个体素的点分成一组,然后我们计算在体素内的所有点和颜色的加权平均值,然后只做一次光线投射在这个平均的位置上。因为所有的观测值都被考虑到了,并且他们的权重和距离是像往常一样被组合,这样就得到了一个非常相似的重建效果但是却比普通的光线投射方法要快了20倍。
V:从TSDF构建ESDF
本文的方法是基于另一个能够快速的从TSDFs构建ESDFs的方法【1】。我们利用TSDFs作为输入数据,并且允许ESDFs能够动态的改变大小。完整的算法如下,其中
参考文献
【1】B. Lau, C. Sprunk, and W. Burgard, “Improved updating of euclidean
distance maps and voronoi diagrams,” in IEEE/RSJ International
Conference on Intelligent Robots and Systems (IROS), IEEE, 2010
.