首先使将loam_livox的全局点云保存问题,找到全局点云后,我模仿了loam中如何保存单帧pcd的方式,全局点云的发布如下所示

 if ( laser_cloud_surround->points.size() )
            {
                down_sample_filter_surface.setInputCloud( laser_cloud_surround );
                down_sample_filter_surface.filter( *laser_cloud_surround );
                pcl::toROSMsg( *laser_cloud_surround, ros_laser_cloud_surround );
                ros_laser_cloud_surround.header.stamp = ros::Time::now();
                ros_laser_cloud_surround.header.frame_id = "camera_init";
                m_pub_laser_cloud_surround.publish( ros_laser_cloud_surround );
            }
            //screen_out << "~~~~~~~~~~~ " << "pub_surround_service, size = " << laser_cloud_surround->points.size()  << " ~~~~~~~~~~~" << endl;

然后使用单帧点云的方法进行保存

m_pcl_tools_aftmap.save_to_pcd_files( "aft_mapp", current_laser_cloud_full, m_current_frame_index );

更改一下参数即可。保存后的点云需要修改为ply格式,可以通过pcl_pcd2ply命令对全局pcd文件进行转换得到ply文件,下一步就需要使用meshlab以获取obj模型,这里可能会发现在pcl中也有从ply2obj的方法,但似乎不太准确,所以推荐使用meshlab,首先计算法线

 然后使用泊松算法进行曲面重建

接下来前往过滤器的selection中选择误差较大的边进行删除

接下来不需要纹理的话可以直接将其导出obj模型。 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐