示例#1
0
int 
main (int argc, char** argv)
{
  print_highlight ("PCL OpenNI Recorder for saving buffered PCD (binary compressed to disk). See %s -h for options.\n", argv[0]);

  int buff_size = BUFFER_SIZE;
  
  if (find_switch (argc, argv, "-h") || find_switch (argc, argv, "--help"))
  {
    print_info ("Options are: \n"
              "             -xyz    = save only XYZ data, even if the device is RGB capable\n"
              "             -shift  = use OpenNI shift values rather than 12-bit depth\n"
              "             -buf X  = use a buffer size of X frames (default: "); 
    print_value ("%d", buff_size); print_info (")\n");
    return (0);
  }


  bool just_xyz = find_switch (argc, argv, "-xyz");
  openni_wrapper::OpenNIDevice::DepthMode depth_mode = openni_wrapper::OpenNIDevice::OpenNI_12_bit_depth;
  if (find_switch (argc, argv, "-shift"))
    depth_mode = openni_wrapper::OpenNIDevice::OpenNI_shift_values;

  if (parse_argument (argc, argv, "-buf", buff_size) != -1)
    print_highlight ("Setting buffer size to %d frames.\n", buff_size);
  else
    print_highlight ("Using default buffer size of %d frames.\n", buff_size);

  print_highlight ("Starting the producer and consumer threads... Press Cltr+C to end\n");
 
  OpenNIGrabber grabber ("");
  if (grabber.providesCallback<OpenNIGrabber::sig_cb_openni_point_cloud_rgba> () && 
      !just_xyz)
  {
    print_highlight ("PointXYZRGBA enabled.\n");
    PCDBuffer<PointXYZRGBA> buf;
    buf.setCapacity (buff_size);
    Producer<PointXYZRGBA> producer (buf, depth_mode);
    boost::this_thread::sleep (boost::posix_time::seconds (2));
    Consumer<PointXYZRGBA> consumer (buf);

    signal (SIGINT, ctrlC);
    producer.stop ();
    consumer.stop ();
  }
  else
  {
    print_highlight ("PointXYZ enabled.\n");
    PCDBuffer<PointXYZ> buf;
    buf.setCapacity (buff_size);
    Producer<PointXYZ> producer (buf, depth_mode);
    boost::this_thread::sleep (boost::posix_time::seconds (2));
    Consumer<PointXYZ> consumer (buf);

    signal (SIGINT, ctrlC);
    producer.stop ();
    consumer.stop ();
  }
  return (0);
}
示例#2
0
int 
main (int argc, char** argv)
{
	int buff_size = BUFFER_SIZE;
	if (argc == 2)
	{
		buff_size = atoi (argv[1]);
		std::cout << "Setting buffer size to " << buff_size << " frames " << std::endl;
	}
	else
	{
		std::cout << "Using default buffer size of " << buff_size << " frames " << std::endl;
	}
	buff.setCapacity (buff_size);
	std::cout << "Starting the producer and consumer threads..." << std::endl;
	std::cout << "Press Ctrl-C to end" << std::endl;
	boost::thread producer (grabAndSend);
	boost::this_thread::sleep (boost::posix_time::seconds (2));
	boost::thread consumer (receiveAndProcess);
	signal (SIGINT, ctrlC);
	producer.join ();
	{
		boost::mutex::scoped_lock io_lock (io_mutex);
		std::cout << "Producer done" << std::endl;
	}
	consumer.join ();
	std::cout << "Consumer done" << std::endl;
	return (0);
}
示例#3
0
int
main (int argc, char** argv)
{
  print_highlight ("PCL OpenNI Recorder for saving buffered PCD (binary compressed to disk). See %s -h for options.\n", argv[0]);

  std::string device_id ("");
  int buff_size = BUFFER_SIZE;

  openni_wrapper::OpenNIDriver& driver = openni_wrapper::OpenNIDriver::getInstance ();
  if (driver.getNumberDevices () > 0) {
    cout << "Device Id not set, using first device." << endl;
  }
  

  bool just_xyz = find_switch (argc, argv, "-xyz");
  openni_wrapper::OpenNIDevice::DepthMode depth_mode = openni_wrapper::OpenNIDevice::OpenNI_12_bit_depth;
  if (find_switch (argc, argv, "-shift"))
    depth_mode = openni_wrapper::OpenNIDevice::OpenNI_shift_values;

  if (parse_argument (argc, argv, "-buf", buff_size) != -1)
    print_highlight ("Setting buffer size to %d frames.\n", buff_size);
  else
    print_highlight ("Using default buffer size of %d frames.\n", buff_size);

  print_highlight ("Starting the producer and consumer threads... Press 's' to  capture and 'q' to quit\n");
 
  OpenNIGrabber grabber (device_id);
  if (grabber.providesCallback<OpenNIGrabber::sig_cb_openni_point_cloud_rgba> () && 
      !just_xyz) {
    print_highlight ("PointXYZRGBA enabled.\n");
    PCDBuffer<PointXYZRGBA> buf;
    buf.setCapacity (buff_size);
    Producer<PointXYZRGBA> producer (buf, depth_mode);
    // boost::this_thread::sleep (boost::posix_time::seconds (2));
    string prefix = "frame";
    pcl::console::parse_argument (argc, argv, "-name", prefix);

    Consumer<PointXYZRGBA> consumer (buf, prefix);
    // consumer.pcd_nb() = 0;

    producer.stop ();
    consumer.stop ();
  }
  return (0);
}
示例#4
0
//////////////////////////////////////////////////////////////////////////////////////////
// Consumer thread function
void 
receiveAndProcess ()
{
	while (true)
	{
		if (is_done)
			break;
		writeToDisk (buff.getFront ());
	}

	{
		boost::mutex::scoped_lock io_lock (io_mutex);
		std::cout << "Writing remaing " << buff.getSize () << " clouds in the buffer to disk..." << std::endl;
	}
	while (!buff.isEmpty ())
	{
		writeToDisk (buff.getFront ());
	}
}
示例#5
0
void 
grabberCallBack (const pcl::PointCloud<pcl::PointXYZRGBA>::ConstPtr& cloud)
{
	if (!buff.pushBack (cloud))
	{
		{
			boost::mutex::scoped_lock io_lock(io_mutex);
			std::cout << "Warning! Buffer was full, overwriting data" << std::endl;
		}
	}
  FPS_CALC ("cloud callback");
}