Go to the documentation of this file.00001
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 }