0 论文连接
1.Abstract
- 由 TSDF 构建 ESDF
- 对于移动机器人的低有效载荷和功率运算,提出更快速,更轻量化的算法
TSDF
2.Introduction
实时的测绘与规划要同时进行
相关算法对比
- 局部算法不全局要快,可以最小的代价快速找到可行但不一定最优的结果
- 基于轨迹优化的方法需要提前知道地图以及障碍物的状态
- 距离图的增量计算对于映射的大小需要提前知道,且不能动态更改
- 占用地图往往难以解析
该论文提出在动态增长的地图上实时在线增量构建ESDF
- 快速创建
- 过滤传感器的噪音
- 仅在围绕表面的截断半径内计算这些距离
方法贡献
– 从动态增长的TSDF中增量构建ESDF
– 分析不同的TSDF,最大限度提高大体素尺寸下的重建速度与表面精度
3. Related Work
引入
- 有些占用地图只提供占用信息是不够的
- 大部分ESDF基于GPU的运算,但在移动机器人端,要将计算置于CPU
- 扩展了从占用地图中建立ESDF的方法,而是直接从TSDF中建立ESDF,并不使用占用信息
具体阐述
对于该方法的主要限制是固定大小的体素网格需要预知地图的大小同时需要大量内存。为了解决这一限制因素:使用体素哈希的方法,允许地图在探索时动态增长
该方法的重点在于使用移动立方体实时输出高分辨率的网格,注重于精确,快速,移动机器人端,利用大体素加速
- 其他方法:从完整TSDF得到占用网格,固定体积大小计算ESDF。动态性不足。
- 本文方法: 直接从TSDF得到和维护ESDF,允许动态增长
4.System
两个部分
- 将传入的传感器数据合并到TSDF中
- 从TSDF传播更新的体素来更新ESDF
为了实现动态,采用动态大小的映射
每个体素都有自己的层,每个层包含独立的块,这些块根据在映射中的位置进行索引,块位置与内存位置之间的映射用哈希表维护
5. TSDF Construction
将传入的传感器数合并到TSDF中
采用加权合并方法
权重部分
- 对于每个点进行射线投射更新沿该射线的距离和权重的估计
- 权重的影响很大
采用大体素加速时,可能一个大体素就同时映射了几千个点,权重的影响会大幅增大
其中 d 是与表面边界的距离, w 是权重, x 是当前体素中心的位置, p 是传感器数据, s 是传感器的源头
- 先行下降往往产生最佳结果
- 单射线测量的 \sigma 主要随着测量对象在相机框架中的深度 z 平方变化
其中我们使用截断距离 \delta = 4v,\epsilon = v, v 为体素大小
合并部分
对于大体素来说,可能会出现几千条射线扫描到同一个体素,所以对于每一段体素只执行一次射线投射策略已进行加速
两种方法:射线映射以及投影映射
- 射线映射:从观测点为中心更新所有体素到点后的截断距离 \delta
- 投影映射:体素投影到深度图像中,计算其从体素中心到图像深度值之间的距离
本文中采用的方法是分组射线映射,由点构成体素网格,再将同一个体素中的其他点进行分组,再将点与颜色进行加权平均,在每个平均的位置只进行一次的射线投射,最后在进行合并。
6. Consrtruction ESDF from TSDF
从TSDF传播更新的体素来更新ESDF
构建部分
利用TSDF作为输入,允许ESDF动态改变大小
一个重要提升:使用了存储在TSDF地图中的距离而非去计算与最近被占用体素的距离
将已占用和空闲的概念转换为围绕表面的固定带,ESDF体素的值来源于它们共同定位的TSDF体素,并且可能不会被修改。固定带的大小由满足距离 |v_T.d|< \gamma 的TSDF体素定义,其中 \gamma 为带的半径。
算法
采用波前思想:从起始体素传播到邻居。
使用两种波阵面:上升与下降。当新的TSDF值高于ESDF,则将其添加到上升队列中,但这个体素以及其子体素都会失效;当有新的固定体素加入或先前观察的值降低,加入下降队列,并用相邻与当前体素之间距离更新其距离,当没有能用邻元素去更新其距离的体素存在,则结束。
本文将所有的体素先上升,后下降,不会去更新未知的体素
主函数(PROPAGATE)
ISFIXED 函数
INSERTNEIGHBORS 函数
PROCESSRAISEQUEUE 函数
PROCESSLOWERQUEUE 函数
误差来源
- TSDF投影距离的计算
高估最近表面的实际欧式距离
误差取决于测量的体素距离 d 和相机射线与物品表面之间入射角 \theta
- 距离计算中的拟欧氏近似
ESDF计算中的准欧式距离
2 条评论
心田 · 2021年11月23日 10:43
关于本文的一个疑问
关于更新的范围
当新的一帧数据来到时,是整个格子的TSDF都要更新,还是说通过所谓的光线投射找到其经过的格子,只更新这部分格子的TSDF值?
望君解答,谢谢分享!
KrMzyc · 2021年11月24日 08:30
从论文上来理解是整个格子的TSDF都要更新,因为处理TSDF的时候是要进行相应的Raise和Low操作,无论是什么处理,对于周边的TSDF都有相应的更改。
谢谢支持