NeRF-LOAM: Neural Implicit Representation for Large-ScaleIncremental LiDAR Odometry and Mapping
创新点:
1.基于Lidar数据 采用隐式神经方式计算里程计和建图
2.结合SFD模块采用动态生成和key-scans优化策略
3.online联合优化 不需要预训练 适应不同环境
对光线上的点进行采样,进行voxel embeddings操作后输入MLP(Neural SDF Query)
Rays and points sampling:
作者采样的策略是: 在当前给定的体素上,与该体素相交的射线并且和该体素产生交点 设置一个阈值来避免表面遮挡的影响 由于Lidar光线是由扫描位姿变换得到的,所以每条射线包含姿态信息 这样优化时就能同时优化位姿和体素嵌入。
Neural SDF value:
与基于视觉的NeRF方法不同 SDF是直接表示场景的方法,所以不适合室外环境的Lidar数据
所以对每个采样点通过体素嵌入的三线性插值进行回归
Training SDF pairs:
激光雷达提供了精确的距离测量 能够得到从采样点到射线端点的符号距离,即SDF值
如图所示 蓝线代表SDF的真实值 红线为近似值 当角度
θ
\theta
θ接近0时 两个距离之间的差异可以显著 这个问题在z轴上更加显著 因为在Lidar扫描中约束z轴漂移的点较少
这里提出将Lidar点分为地面点和非地面点
Optimization
使用三种不同损失的加权和来训练网络
1.自由空间损失函数
L
f
\mathcal{L}_f
Lf,使得Lidar到截断正区域
P
f
\mathcal{P}_f
Pf各点的Neural SDF为截断距离
T
r
{T}_r
Tr
为了避免表面相交歧义 不考虑负截断区域 该损失函数在去除动态对象时非常重要
2.定义截断区域
P
f
\mathcal{P}_f
Pf中点的SDF损失函数
L
s
\mathcal{L}_s
Ls来监督SDF估计
与使用sigmoid函数来增加Lidar点周围的积分不同的是,对该区域内的点都做相同的处理 因为这些点对测程都很重要
3.SDF值是可微的 并且在截断区域内等于1 所以添加Eikonal loss
L
e
\mathcal{L}_e
Le
NeRF-LOAM
本文方法是以增量激光雷达流作为输入 通过三个模块输出三维重建网格 分别是 神经里程计 神经建图 网格重建
前两个部分作为前端和后端并行运行 第三个部分分别运行以获得全局网格地图和细化的扫描位姿
Neural Odometry
对于传入的Lidar扫描点集 P t P_t Pt 随机选取N条射线并将他们转换到世界坐标系中 沿着射线采样一组点 通过减少损失 优化位子和体素嵌入
在K扫描后,网络参数会被锁定,这不会降低结果的质量,因为局部集合结构主要存储在提速中。第一个K扫面后的提速嵌入和位姿将通过Key-scan来细化。
Neural Mapping
Dynamic voxel embeddings generation
采用八叉树的放来分割场景 通过Neural Odometry 估计出的位姿可采用八叉树的放来分割场景 通过Neural Odometry 估计出的位姿可以将当前扫描的点转到世界坐标系中 任何不在现有体素中的点都被分配给新生成的体素 这些提速与对应提速嵌入一起被添加到八叉树中 为了快速定位所需的嵌入 将3D提速坐标编码为唯一的标量值,即莫顿代码
Joint optimization of the map and pose
优化体素嵌入 同时微调位姿
Mesh Reconstrution
Key-scans selection and refinement
建立一个key-scan缓冲区 以缓解前K次扫描的灾难性以往以提高建图质量
如果新添加的体素数量
N
v
N_v
Nv超过阈值
N
t
N_t
Nt或者当前扫描与最后一个key-scan之间的距离
d
f
d_f
df足够大 则向缓冲区添加一个key-scan
Final mesh and poses
在key-scan细化后,地图和位姿得到了良好的训练 修改过的SDF是连续的 所以理论上我们可以推断任意位置的SDF值 通过查询相同固定大小(即体素大小)的SDF值 通过移动立方体得到最终网格