记录使用nanoflann时候的坑
nanoflann库的中文博客介绍 nanoflann中文博客:
nanoflann库的英文介绍 nanoflann的github:
对nanoflann的使用评价
优点:
- 及其轻量化: ,只用将极少代码问价copy到现有项目中即可实现KNN搜索;
- 简单易学: github上贴心的提供了实例代码,轻松上手;
- **功能强大:**实现多个空间的近邻搜索,对L1,L2,SO2和SO3空间进行距离度量 ;
缺点:
- 实例代码容易引起歧义: 没有对输入和输出参数的具体描述,很容易引起歧义;
遇到的坑
github实例代码中的实例:
// pointcloud_kdd_radius.cpp
{
const num_t search_radius = static_cast<num_t>(0.1);
std::vector<std::pair<size_t,num_t> > ret_matches;
nanoflann::SearchParams params;
//params.sorted = false;
const size_t nMatches = index.radiusSearch(&query_pt[0], search_radius, ret_matches, params);
cout << "radiusSearch(): radius=" << search_radius << " -> " << nMatches << " matches\n";
for (size_t i = 0; i < nMatches; i++)
cout << "idx["<< i << "]=" << ret_matches[i].first << " dist["<< i << "]=" << ret_matches[i].second << endl;
cout << "\n";
}
search_radius使用时输入是搜索半径的平方,即
// pointcloud_kdd_radius.cpp
{
const num_t search_radius = static_cast<num_t>(0.1);
}
search_radius代表的搜索半径是0.3米。
专门可视化逐行找错误,白白浪费一下午时间,特此记录。