0. 简介
在众多机器人应用中,通过最近邻搜索建立新采集点与历史累积数据(即地图)之间的对应关系至关重要。然而,静态树数据结构不足以实时处理大型且动态增长的地图。为了解决这个问题,我们在文中《i-Octree: A Fast, Lightweight, and Dynamic Octree for Proximity Search》提出了i-Octree,一个动态八叉树数据结构,它既支持快速最近邻搜索,也支持实时动态更新,如点插入、删除和树上下采样。i-Octree基于叶节点的八叉树构建,并具有两个关键特性:一种局部空间连续的存储策略,允许快速访问点同时最小化内存使用;以及局部树上更新,与现有的静态或动态树结构相比,显著减少了计算时间。实验表明,i-Octree通过平均在真实世界开放数据集上实现19%的运行时间减少,超越了当今最先进的方法。相关代码已经在Github上开源了
1. 主要贡献
- 在本文中,我们提出了一种称为i-Octree的动态八叉树结构,它能够用新点增量更新八叉树,并实现快速的最近邻搜索(NNS)。
- 此外,我们的i-Octree在时间和内存效率上均表现出色,适应各种类型的点,并允许进行树上下采样和按盒删除。
- 我们在随机数据和真实世界开放数据集上进行验证实验,以评估i-Octree的有效性。在随机数据实验中,与最新提出的增量k-d树(即ikd-Tree[9])相比,我们的i-Octree在运行时间上展现了显著改进。具体来说,它在构建树的运行时间上减少了64%,在点插入上减少了66%,在KNN搜索上减少了30%,在半径邻居搜索上减少了56%。此外,当应用于基于LiDAR的SLAM的真实世界数据时,i-Octree展示了显著的时间性能提升。它的速度是原始方法的两倍多,同时通常保持更高的精度水平。
2. i-Octree的设计与实现
i-Octree以序列化点云作为输入,目标有两个:动态维护一个全局地图并在该地图上执行快速的最近邻搜索(即,KNN搜索和半径邻居搜索)。图1展示了i-Octree的典型应用场景。范围传感器持续感知周围环境,并定期生成序列化的3D范围数据。利用范围数据的初始扫描来构建i-Octree并定义全局坐标框架。随后,i-Octree便能通过KNN搜索或半径邻居搜索,建立新到达数据与历史数据之间的对应关系。基于这些对应关系,可以估算新数据的姿态,并将带有姿态的3D点添加到i-Octree中。为了防止i-Octree中的地图大小无限制地增长,只保持以当前位置为中心的大型本地区域(即,与轴对齐的盒子)内的地图点。接下来,我们首先描述i-Octree的数据结构和构造方法,然后重点讨论动态更新和最近邻搜索。
图1. 在测距中使用i-Octree的示例。i-Octree和测距技术协同工作,以估算从范围传感器获得的3D数据的姿态。i-Octree提供了一个稳健且高效的数据结构,用于存储和查询3D数据,而测距技术则使得数据点的姿态估算成为可能。