标签:voxel 0.02 mapPointCloud Lidar filter pcl 点云 VoxelGrid
问题介绍:
slam构建地图,先进行降采样,再进行可视化或存储。然而经过降采样后,代码没有报错的情况下,点云数据散成一团。将代码和点云数据展示如下,
pcl::VoxelGrid<Lidar::PointType> voxel_filter; voxel_filter.setLeafSize(0.02, 0.02, 0.02); Lidar::PointCloudPtr mapPointCloud(new Lidar::PointCloudType); //滤波器输入变量 //... //往输入变量中填充数据 //... voxel_filter.setInputCloud(mapPointCloud); voxel_filter.filter(*mapPointCloud); std::cout << "after voxel_filter, mapPointCloud size : " << mapPointCloud->points.size() << std::endl; std::string index = std::to_string(ndtCount); pcl::io::savePCDFileASCII ("/home/gordon/fase_ws/src/ddd_wall_mapping/filter_map_"+index+".pcd", *mapPointCloud);
问题分析:
猜想是由于降采样滤波器的输入和输出是同一个指针变量,在处理过程中内存混乱,导致点云数据出错。
解决方案:
使用两个不同的变量作为降采样滤波器的输入和输出,并且作为输出的变量每次都要进行清空操作。
问题解决后的代码和点云数据展示如下,
pcl::VoxelGrid<Lidar::PointType> voxel_filter; voxel_filter.setLeafSize(0.02, 0.02, 0.02); Lidar::PointCloudPtr mapPointCloud(new Lidar::PointCloudType); //滤波器输入变量 //... //往输入变量中填充数据 //... Lidar::PointCloudPtr filter_mapPointCloud(new Lidar::PointCloudType); // 滤波器输出变量 voxel_filter.setInputCloud(mapPointCloud); voxel_filter.filter(*filter_mapPointCloud); mapPointCloud->clear(); *mapPointCloud += *filter_mapPointCloud; std::cout << "after voxel_filter, mapPointCloud size : " << mapPointCloud->points.size() << std::endl; std::string index = std::to_string(ndtCount); pcl::io::savePCDFileASCII ("/home/gordon/fase_ws/src/ddd_wall_mapping/filter_map_"+index+".pcd", *mapPointCloud);
至于具体原因,至今不详,忘高手或前辈指点迷津。
标签:voxel,0.02,mapPointCloud,Lidar,filter,pcl,点云,VoxelGrid 来源: https://www.cnblogs.com/gdut-gordon/p/10942776.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。