test_ndt_mapper.cc
Go to the documentation of this file.
00001 #include <ndt_map_builder/ndt_map_builder.h>
00002 #include <ndt_map/oc_tree.h>
00003 #include <ndt_registration/ndt_matcher_d2d.h>
00004 #include <pointcloud_vrml/pointcloud_utils.h>
00005 
00006 using namespace std;
00007 using namespace lslgeneric;
00008 
00009 int main(int argc, char**argv)
00010 {
00011 
00012     if(argc != 7)
00013     {
00014         cout<<"Usage: "<<argv[0]<<" N_CLOUDS clouds_prefix (bKinect|bLaser) (doHistogram=0|1) (bD2D|bP2D|bICP) offset\n \
00015             \t bKinect -> use settings more suitable for a kinect\n \
00016             \t bLaser -> use settings more suitable for a kinect\n \
00017             \t bD2D . p2D ICP -> choice of registration algorithm\n";
00018         return -1;
00019     }
00020 
00021     bool bKinect = (strncmp(argv[3],"bKinect",7) == 0);
00022     bool doHistogram = (atoi(argv[4]) == 1);
00023     bool bICP = (strncmp(argv[5],"bICP",4) == 0);
00024     bool bP2D = (strncmp(argv[5],"bP2D",4) == 0);
00025     bool bD2D = ((strncmp(argv[5],"bD2D",4) == 0) || !(bICP || bP2D));
00026     int offset = atoi(argv[6]);
00027 
00028     lslgeneric::OctTree<pcl::PointXYZ> histogramPrototype;
00029     std::vector<double> resolutions;
00030 
00031     double __res1[] = {0.5, 1, 2};
00032     double __res2[] = {0.1,0.2,1,2,4};
00033     if(!bKinect)
00034     {
00035         resolutions = std::vector<double>(__res1, __res1+sizeof(__res1)/sizeof(double));
00036         histogramPrototype.BIG_CELL_SIZE = 2;
00037         histogramPrototype.SMALL_CELL_SIZE = 0.2;
00038 
00039     }
00040     else
00041     {
00042         resolutions = std::vector<double>(__res2, __res2+sizeof(__res2)/sizeof(double));
00043         histogramPrototype.BIG_CELL_SIZE = 0.5;
00044         histogramPrototype.SMALL_CELL_SIZE = 0.1;
00045 
00046     }
00047 
00048     lslgeneric::NDTMatcherD2D<pcl::PointXYZ,pcl::PointXYZ> matcherF2F(false, false, resolutions);
00049     lslgeneric::NDTMatcherP2D<pcl::PointXYZ,pcl::PointXYZ> matcherP2F(resolutions);
00050 
00051     NDTMapBuilder<pcl::PointXYZ> mapper(doHistogram);
00052     if(bD2D)
00053     {
00054         mapper.setMatcherF2F(&matcherF2F);
00055         cout<<"setting to D2D matcher\n";
00056     }
00057     else if(bP2D)
00058     {
00059         mapper.setMatcherP2F(&matcherP2F);
00060         cout<<"setting to P2D matcher\n";
00061     }
00062     else
00063     {
00064         mapper.setICP();
00065         cout<<"setting to ICP matcher\n";
00066     }
00067 
00068     mapper.tr = histogramPrototype;
00069 
00070     int N_CLOUDS = atoi(argv[1]);
00071     char fname[600];
00072 
00073     double MAX_DIST = 26;
00074 
00075     if(bKinect) MAX_DIST = 5;
00076 
00077     for (int i=offset; i<N_CLOUDS; i++)
00078     {
00079         snprintf(fname,600,"%s%03d.wrl",argv[2],i);
00080         cout<<fname<<endl;
00081         pcl::PointCloud<pcl::PointXYZ> cl = lslgeneric::readVRML<pcl::PointXYZ>(fname);
00082         pcl::PointCloud<pcl::PointXYZ> filtered;
00083         for(int q=0; q<cl.points.size(); q++)
00084         {
00085             double dist = sqrt(pow(cl.points[q].x,2)+pow(cl.points[q].y,2)+pow(cl.points[q].z,2));
00086             if(dist<MAX_DIST)
00087             {
00088                 if(!bKinect)
00089                 {
00090                     filtered.points.push_back(cl.points[q]);
00091                 }
00092                 else
00093                 {
00094                     pcl::PointXYZ pNew;
00095                     pNew.x = cl.points[q].z;
00096                     pNew.y = cl.points[q].x;
00097                     pNew.z = -cl.points[q].y;
00098                     filtered.points.push_back(pNew);
00099                 }
00100 
00101             }
00102         }
00103 
00104         cout<<"adding cloud number "<<i<<endl;
00105         mapper.addScan(filtered);
00106     }
00107 
00108     snprintf(fname,600,"%s.g2o",argv[2]);
00109     mapper.saveG2OlogFile(fname);
00110 
00111     snprintf(fname,600,"%s.dat",argv[2]);
00112     mapper.saveDatlogFile(fname);
00113 
00114     snprintf(fname,600,"%s_COMPLETE.wrl",argv[2]);
00115     mapper.theMotherOfAllPointClouds(fname);
00116 
00117     return 0;
00118 }


ndt_map_builder
Author(s): Todor Stoyanov
autogenerated on Mon Oct 6 2014 03:20:19