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++ 向量配合使用。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案