dlut_hash_icp.cpp
Go to the documentation of this file.
00001 /*************************************************************************
00002   > File Name: dlut_hash_icp.cpp
00003   > Author: 吴乃亮
00004   > Mail: wunailiang@gmail.com
00005   > Created Time: Wed 21 May 2014 10:13:53 AM CST
00006  ************************************************************************/
00007 
00008 #include<iostream>
00009 #include"ros/ros.h"
00010 //用于打开pcd
00011 #include <pcl/io/io.h>
00012 #include <pcl/io/pcd_io.h>
00013 #include <pcl_ros/point_cloud.h>
00014 #include <pcl/point_types.h>
00015 #include <pcl/filters/voxel_grid.h>
00016 #include <pcl/filters/filter.h>
00017 
00018 
00019 
00020 #include "src/voxel.h"
00021 #include "src/icp.h"
00022 
00023 
00024 #include "src/net_transfor.h"
00025 using namespace std;
00026 
00027 typedef boost::unordered_map<unordered_map_voxel,un_key> umap;
00028 
00029 int main(int argc,char** argv)
00030 {
00031     ros::init(argc,argv,"dlut_hash_icp");
00032     ros::NodeHandle n;
00033     double voxel_size,filter_voxel_size;
00034     n.param("voxel_size",voxel_size,0.3);
00035     n.param("filter_voxel_size",filter_voxel_size,0.03);
00036 
00037     Voxelize* voxelize1;
00038     voxelize1 = new Voxelize;
00039     pcl::PCDWriter writer;
00040 
00041     //打开两个pcd文件并且分别进行栅格化处理
00042     pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
00043     pcl::PointCloud<pcl::PointXYZ>::Ptr cloud1(new pcl::PointCloud<pcl::PointXYZ>);
00044     pcl::PointCloud<pcl::PointXYZ> cloud_fil;
00045     pcl::PointCloud<pcl::PointXYZ> cloud_fil1;
00046     pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_unmerged(new pcl::PointCloud<pcl::PointXYZ>);
00047 
00048     pcl::PCDReader reader;
00049     reader.read<pcl::PointXYZ>(argv[1],*cloud);
00050 
00051     /*
00052      *滤波,过滤掉无效激光点
00053      */
00054     std::vector<int> indices;
00055     pcl::removeNaNFromPointCloud(*cloud,*cloud, indices);
00056     indices.clear();
00057 
00058     boost::unordered_map<unordered_map_voxel,un_key> m1;
00059 
00060     /*
00061      *滤波,用于精简数据加速算法
00062      */
00063     pcl::VoxelGrid<pcl::PointXYZ> sor;
00064     sor.setInputCloud(cloud);
00065     sor.setLeafSize(filter_voxel_size,filter_voxel_size,filter_voxel_size);
00066     sor.filter(cloud_fil);
00067     writer.write(std::string(argv[1])+"_filtered.pcd",cloud_fil);
00068     cout<<argv[1]<<"'s size is "<<cloud_fil.size()<<endl;
00069 
00070     /*
00071      * 做一个旋转平移矩阵打乱匹配点云
00072      */
00073 
00074     /*
00075      *Eigen::Matrix4f tf_distored=Eigen::Matrix4f::Identity();
00076      *double theta=M_PI*10/180;
00077      *tf_distored(0,0)=cos(theta);
00078      *tf_distored(0,1)=-sin(theta);
00079      *tf_distored(1,0)=sin(theta);
00080      *tf_distored(1,1)=cos(theta);
00081      *tf_distored(0,3)=0;
00082      *tf_distored(1,3)=0;
00083      *pcl::transformPointCloud(cloud_fil,cloud_fil,tf_distored);
00084      */
00085 
00086 
00087     voxelize1->generateUmap(cloud_fil,voxel_size,m1);
00088 
00089     reader.read<pcl::PointXYZ>(argv[2],*cloud1);
00090     pcl::removeNaNFromPointCloud(*cloud1,*cloud1, indices);
00091 
00092     sor.setInputCloud(cloud1);
00093     sor.setLeafSize(filter_voxel_size,filter_voxel_size,filter_voxel_size);
00094     sor.filter(cloud_fil1);
00095     writer.write(std::string(argv[2])+"_filtered.pcd",cloud_fil1);
00096     cout<<argv[2]<<"'s size is "<<cloud_fil1.size()<<endl;
00097 
00098     *cloud_unmerged=(cloud_fil+cloud_fil1);
00099 
00100     /*
00101      *存储未做任何处理的点云
00102      */
00103 
00104     writer.write("un_merged.pcd",*cloud_unmerged);
00105 
00106     boost::unordered_map<unordered_map_voxel,un_key> m2;
00107     voxelize1->generateUmap(cloud_fil1,voxel_size,m2);
00108 
00109     Icp testicp(m1,m2,cloud_fil, voxel_size);
00110     Eigen::Matrix4f tf_mat=testicp.icpFit();
00111     pcl::transformPointCloud(cloud_fil,cloud_fil,tf_mat);
00112     cloud->clear();
00113     *cloud=(cloud_fil+cloud_fil1);
00114     writer.write("merged.pcd",*cloud);
00115 
00116     delete voxelize1;
00117     return 0;
00118 }


dlut_hash_icp
Author(s): Zhuang Yan , Yan Fei, Wu Nai Liang
autogenerated on Thu Jun 6 2019 18:56:21