affine_transform_test.cc
Go to the documentation of this file.
00001 // Visualizer of feature f2f registration.
00002 #include <iostream>
00003 #include <boost/thread/thread.hpp>
00004 #include <boost/program_options.hpp>
00005 
00006 #include <pcl/visualization/pcl_visualizer.h>
00007 #include <pcl/io/io.h>
00008 #include <pcl/io/pcd_io.h>
00009 #include <pcl/common/transform.h>
00010 #include <pcl/registration/transforms.h>
00011 #include <pcl/point_types.h>
00012 #include <Eigen/Core>
00013 
00014 
00015 using namespace pcl;
00016 using namespace std;
00017 
00018 namespace po = boost::program_options;
00019 
00020 int main(int argc, char** argv)
00021 {
00022     cout << "--------------------------------------------------" << endl;
00023     cout << "Small test program of affine transforms" << endl;
00024     cout << "--------------------------------------------------" << endl;
00025 
00026     string pc_name;
00027     float tx,ty,tz,rx;
00028     po::options_description desc("Allowed options");
00029     desc.add_options()
00030     ("help", "produce help message")
00031     ("debug", "print debug output")
00032     ("pc", po::value<string>(&pc_name), "pointcloud .pcd file")
00033     ("tx", po::value<float>(&tx), "transl x")
00034     ("ty", po::value<float>(&ty), "transl y")
00035     ("tz", po::value<float>(&tz), "transl z")
00036     ("rx", po::value<float>(&rx), "rotation x-axis")
00037     ;
00038 
00039     po::variables_map vm;
00040     po::store(po::parse_command_line(argc, argv, desc), vm);
00041     po::notify(vm);
00042 
00043     if (vm.count("help"))
00044     {
00045         cout << desc << "\n";
00046         return 1;
00047     }
00048     if (!vm.count("pc"))
00049     {
00050         cout << "ERROR: need a point cloud file (.pcd)\n";
00051         return 1;
00052     }
00053     bool debug = vm.count("debug");
00054 
00055     pcl::PointCloud<pcl::PointXYZ>::Ptr pc(new pcl::PointCloud<pcl::PointXYZ>);
00056     pcl::PCDReader reader;
00057     reader.read<pcl::PointXYZ>(pc_name, *pc);
00058 
00059     pcl::visualization::PCLVisualizer viewer("3D Viewer");
00060     viewer.addPointCloud(pc);
00061 
00062     pcl::PointCloud<pcl::PointXYZ>::Ptr pc_moved(new pcl::PointCloud<pcl::PointXYZ>);
00063 
00064 
00065 
00066     viewer.addCoordinateSystem();
00067     while (!viewer.wasStopped())
00068     {
00069         Eigen::Affine3f transl_transform = (Eigen::Affine3f)Eigen::Translation3f(tx, ty, tz);
00070         Eigen::Affine3f rot_transform = (Eigen::Affine3f)Eigen::AngleAxisf(rx,Eigen::Vector3f::UnitX());
00071         pcl::transformPointCloud<pcl::PointXYZ> (*pc, *pc_moved, rot_transform*transl_transform);
00072         viewer.addPointCloud(pc_moved, "pc_moved");
00073 
00074         viewer.spinOnce(100);
00075         viewer.removePointCloud("pc_moved");
00076 
00077         rx += 0.01;
00078     }
00079 
00080 }


ndt_feature_reg
Author(s): Henrik Andreasson, Todor Stoyanov
autogenerated on Mon Jan 6 2014 11:36:18