jlblancoc/nanoflann

nanoflann: a C++11 header-only library for Nearest Neighbor (NN) search with KD-trees

解决的问题

nanoflann 是一个专为多维数据集中的快速最近邻搜索而设计的高性能 C++ 库。它通过提供一个头文件仅有的实现,解决了早期库(如 FLANN)中存在的开销和内存效率低下的问题,避免了虚方法的性能损耗和不必要的数据复制。

工作原理

该库通过构建 KD 树来组织各种拓扑结构中的数据点,包括欧几里得空间(R², R³)、二维旋转群(SO2)和三维旋转群(SO3)。它结合使用奇特的递归模板模式(CRTP)和内联方法,以最大化执行速度。为节省内存,采用适配器接口,允许库直接访问用户现有的数据,而无需将整个数据集复制到自定义矩阵中。

适用人群

适用于处理点云、机器人学和多维数据集的 C++ 开发者,他们需要极快且线程安全的最近邻查询功能。

主要亮点

  • 头文件仅用:无需编译或安装,只需包含头文件即可使用。
  • 内存高效:使用适配器直接访问数据,避免数据集的重复存储。
  • 灵活的拓扑结构:支持 R^N、SO(2) 和 SO(3) 的距离度量。
  • 动态数据集:提供针对动态点云的专用适配器,包括用于滑动窗口 LiDAR 地图的自平衡树。
  • 线程安全:支持并行索引构建和并发查询。
  • 良好集成:可直接与 Eigen::Matrix 和标准 C++ 向量配合使用。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目