Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include<iostream>
00009 #include"ros/ros.h"
00010
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
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
00076
00077
00078
00079
00080
00081
00082
00083
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 }