void thread_grabbing(TThreadParam& p) { try { CKinect kinect; // Set params: // kinect.enableGrab3DPoints(true); // kinect.enablePreviewRGB(true); //... const std::string cfgFile = "kinect_calib.cfg"; if (mrpt::system::fileExists(cfgFile)) { cout << "Loading calibration from: " << cfgFile << endl; kinect.loadConfig(mrpt::config::CConfigFile(cfgFile), "KINECT"); } else cerr << "Warning: Calibration file [" << cfgFile << "] not found -> Using default params. " "This may cause inaccurate 3D point clouds.\n Checkout the " "kinect-stereo-calib application:\n " "http://www.google.com/" "search?q=kinect-stereo-calib%20mrpt&btnI \n"; // Open: cout << "Calling CKinect::initialize()..."; kinect.initialize(); cout << "OK\n"; CTicTac tictac; int nImgs = 0; bool there_is_obs = true, hard_error = false; while (!hard_error && !p.quit) { // Grab new observation from the camera: CObservation3DRangeScan::Ptr obs = mrpt::make_aligned_shared< CObservation3DRangeScan>(); // Smart pointer to observation kinect.getNextObservation(*obs, there_is_obs, hard_error); if (!hard_error && there_is_obs) { std::atomic_store(&p.new_obs, obs); } if (p.pushed_key != 0) { switch (p.pushed_key) { case 's': p.tilt_ang_deg -= 2; if (p.tilt_ang_deg < -30) p.tilt_ang_deg = -30; kinect.setTiltAngleDegrees(p.tilt_ang_deg); break; case 'w': p.tilt_ang_deg += 2; if (p.tilt_ang_deg > 30) p.tilt_ang_deg = 30; kinect.setTiltAngleDegrees(p.tilt_ang_deg); break; case 27: p.quit = true; break; } // Clear pushed key flag: p.pushed_key = 0; } nImgs++; if (nImgs > 10) { p.Hz = nImgs / tictac.Tac(); nImgs = 0; tictac.Tic(); } } } catch (std::exception& e) { cout << "Exception in Kinect thread: " << e.what() << endl; p.quit = true; } }
void thread_grabbing(TThreadParam& p) { try { CKinect kinect; // Set params: // kinect.enableGrab3DPoints(true); // kinect.enablePreviewRGB(true); //... const std::string cfgFile = "kinect_calib.cfg"; if (mrpt::system::fileExists(cfgFile)) { cout << "Loading calibration from: " << cfgFile << endl; kinect.loadConfig(mrpt::config::CConfigFile(cfgFile), "KINECT"); } else cerr << "Warning: Calibration file [" << cfgFile << "] not found -> Using default params.\n"; // Open: cout << "Calling CKinect::initialize()..."; kinect.initialize(); cout << "OK\n"; mrpt::system::CTicTac tictac; int nImgs = 0; bool there_is_obs = true, hard_error = false; while (!hard_error && !p.quit) { // Grab new observation from the camera: CObservation3DRangeScan::Ptr obs = mrpt::make_aligned_shared< CObservation3DRangeScan>(); // Smart pointers to observations CObservationIMU::Ptr obs_imu = mrpt::make_aligned_shared<CObservationIMU>(); kinect.getNextObservation(*obs, *obs_imu, there_is_obs, hard_error); if (!hard_error && there_is_obs) { std::atomic_store(&p.new_obs, obs); std::atomic_store(&p.new_obs_imu, obs_imu); } if (p.pushed_key != 0) { switch (p.pushed_key) { case 's': p.tilt_ang_deg -= 1; if (p.tilt_ang_deg < -31) p.tilt_ang_deg = -31; kinect.setTiltAngleDegrees(p.tilt_ang_deg); break; case 'w': p.tilt_ang_deg += 1; if (p.tilt_ang_deg > 31) p.tilt_ang_deg = 31; kinect.setTiltAngleDegrees(p.tilt_ang_deg); break; case 'c': // Switch video input: kinect.setVideoChannel( kinect.getVideoChannel() == CKinect::VIDEO_CHANNEL_RGB ? CKinect::VIDEO_CHANNEL_IR : CKinect::VIDEO_CHANNEL_RGB); break; case 27: p.quit = true; break; } // Clear pushed key flag: p.pushed_key = 0; } nImgs++; if (nImgs > 10) { p.Hz = nImgs / tictac.Tac(); nImgs = 0; tictac.Tic(); } } } catch (const std::exception& e) { cout << "Exception in Kinect thread: " << mrpt::exception_to_str(e) << endl; p.quit = true; } }