Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 #include <pcl/point_cloud.h>
00039 #include <pcl/point_types.h>
00040 #include <pcl/io/pcd_io.h>
00041 #include <pcl/io/openni_grabber.h>
00042 #include <pcl/common/time.h>
00043 #include <pcl/console/parse.h>
00044 
00045 class SimpleOpenNIProcessor
00046 {
00047   public:
00048     bool save;
00049     openni_wrapper::OpenNIDevice::DepthMode mode;
00050 
00051     SimpleOpenNIProcessor (openni_wrapper::OpenNIDevice::DepthMode depth_mode = openni_wrapper::OpenNIDevice::OpenNI_12_bit_depth) : mode (depth_mode) {}
00052 
00053     void 
00054     imageDepthImageCallback (const boost::shared_ptr<openni_wrapper::DepthImage>& d_img)
00055     {
00056       static unsigned count = 0;
00057       static double last = pcl::getTime ();
00058       if (++count == 30)
00059       {
00060         double now = pcl::getTime ();
00061         std::cout << "got depth-image. Average framerate: " << double(count)/double(now - last) << " Hz" <<  std::endl;
00062         std::cout << "Depth baseline: " << d_img->getBaseline () << " and focal length: " << d_img->getFocalLength () << std::endl;
00063         count = 0;
00064         last = now;
00065       }
00066     }
00067 
00068     void 
00069     run ()
00070     {
00071       save = false;
00072 
00073       
00074       pcl::OpenNIGrabber interface;
00075 
00076       
00077       interface.getDevice ()->setDepthOutputFormat (mode);
00078 
00079       
00080       boost::function<void (const boost::shared_ptr<openni_wrapper::DepthImage>&)> f2 = boost::bind (&SimpleOpenNIProcessor::imageDepthImageCallback, this, _1);
00081 
00082       
00083       boost::signals2::connection c2 = interface.registerCallback (f2);
00084 
00085       
00086       interface.start ();
00087 
00088       std::cout << "<Esc>, \'q\', \'Q\': quit the program" << std::endl;
00089       std::cout << "\' \': pause" << std::endl;
00090       char key;
00091       do
00092       {
00093         key = static_cast<char> (getchar ());
00094         switch (key)
00095         {
00096           case ' ':
00097             if (interface.isRunning ())
00098               interface.stop ();
00099             else
00100               interface.start ();
00101         }
00102       } while (key != 27 && key != 'q' && key != 'Q');
00103 
00104       
00105       interface.stop ();
00106     }
00107 };
00108 
00109 int
00110 main (int argc, char **argv)
00111 {
00112   int mode = openni_wrapper::OpenNIDevice::OpenNI_12_bit_depth;
00113   pcl::console::parse_argument (argc, argv, "-mode", mode);
00114 
00115   SimpleOpenNIProcessor v (static_cast<openni_wrapper::OpenNIDevice::DepthMode> (mode));
00116   v.run ();
00117   return (0);
00118 }