代码链接:https://github.com/VincentCheungM/Run_based_segmentation
论文链接:Fast segmentation of 3D point clouds: A paradigm on LiDAR data for autonomous vehicle applications | IEEE Conference Publication | IEEE Xplore
这里只说地面分割的核心思想,并且此论文的地面只适用于平面,不适用含有坡度的路面。论文中的点云聚 类 是基于线束扫描法,只适用于机械旋转式激光雷达,针对固态激光雷达是适用的,例如Horizon、ML-X、M1等固态或混合固态的激光雷达。明白了此论文的适用场景,就针对性的借鉴论文中的思想.
将点云的标签都设置为0(point.label = 0u;),经过后续的计算,如果点云是地面点,将标签设置为1.
for(size_t i=0;i<laserCloudIn.points.size();i++){
point.x = laserCloudIn.points[i].x;
point.y = laserCloudIn.points[i].y;
point.z = laserCloudIn.points[i].z;
point.intensity = laserCloudIn.points[i].intensity;
point.ring = laserCloudIn.points[i].ring;
point.label = 0u;// 0 means uncluster
g_all_pc->points.push_back(point);
}
激光雷达 返回的点有很多是无效点,即这些点可能是打在空中或水面上没有返回,因此会产生很多无效点,呈现的形式是nan。因此需要将这些点滤除点,作者使用pcl库滤除无效点。
pcl::removeNaNFromPointCloud(laserCloudIn, laserCloudIn,indices);
为便于后续选取地面种子点,需要先对点云按照Z轴进行从低到高进行排序。
/*
@brief Compare function to sort points. Here use z axis.
@return z-axis accent
*/
bool point_cmp(VPoint a, VPoint b){
return a.z<b.z;
}
// 2.Sort on Z-axis value.
sort(laserCloudIn.points.begin(),lase
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删