0. 写在前面
在集成RadiusOutlierRemoval算法的过程中,遇到了Invalid point的问题,在此记录。
1. 引起bug的代码段
PointCloudPtr ror_filtered(new PointCloudT);
pcl::RadiusOutlierRemoval<PointT> ror;
ror.setInputCloud(cloudptr);
float r = 0.1;
int min_pts = 10;
ror.setRadiusSearch(r);
ror.setMinNeighborsInRadius(min_pts);
ror.filter(*ror_filtered);
经过定位,问题发生在:
ror.filter(*ror_filtered);
具体报错:
Assertion failed!
Expression: isFinite (query) && "Invalid (NaN, Inf) point coordinates given to nearestKSearch!"
2. 解决办法
根据以上报错信息,认为可能是NaN点引起的报错,所以加入removeNaNFromPointCloud进行无效点的去除,具体代码如下:
std::vector<int> valid_indices;
pcl::removeNaNFromPointCloud(*cloudptr, *cloudptr, valid_indices);
经处理后的原始点云再进行filter即不再发生类似问题。