mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 00:37:46 +08:00
DBReader now inherits from Camera (so that CameraThread's post processing stuff can be used with a database stream)
This commit is contained in:
@@ -47,9 +47,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
namespace rtabmap {
|
||||
class CameraThread;
|
||||
class DBReader;
|
||||
class CameraOpenni;
|
||||
class CameraFreenect;
|
||||
class OdometryThread;
|
||||
class CloudViewer;
|
||||
class LoopClosureViewer;
|
||||
@@ -254,7 +251,6 @@ private:
|
||||
|
||||
State _state;
|
||||
rtabmap::CameraThread * _camera;
|
||||
rtabmap::DBReader * _dbReader;
|
||||
rtabmap::OdometryThread * _odomThread;
|
||||
|
||||
//Dialogs
|
||||
|
||||
@@ -203,13 +203,7 @@ public:
|
||||
QString getSourceDriverStr() const;
|
||||
QString getSourceDevice() const;
|
||||
|
||||
QString getSourceDatabasePath() const; //Database group
|
||||
bool getSourceDatabaseOdometryIgnored() const; //Database group
|
||||
bool getSourceDatabaseGoalDelayIgnored() const; //Database group
|
||||
bool getSourceDatabaseGoalsIgnored() const; //Database group
|
||||
int getSourceDatabaseStartPos() const; //Database group
|
||||
bool getSourceDatabaseStampsUsed() const;//Database group
|
||||
int getSourceDatabaseCameraIndex() const; //Database group
|
||||
bool getSourceDatabaseStampsUsed() const;
|
||||
bool isSourceRGBDColorOnly() const;
|
||||
int getSourceImageDecimation() const;
|
||||
bool isSourceStereoDepthGenerated() const;
|
||||
|
||||
+58
-149
@@ -126,7 +126,6 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
|
||||
_ui(0),
|
||||
_state(kIdle),
|
||||
_camera(0),
|
||||
_dbReader(0),
|
||||
_odomThread(0),
|
||||
_preferencesDialog(0),
|
||||
_aboutDialog(0),
|
||||
@@ -671,12 +670,6 @@ void MainWindow::closeEvent(QCloseEvent* event)
|
||||
delete _camera;
|
||||
_camera = 0;
|
||||
}
|
||||
if(_dbReader)
|
||||
{
|
||||
UERROR("DBReader must be already deleted here!");
|
||||
delete _dbReader;
|
||||
_dbReader = 0;
|
||||
}
|
||||
if(_odomThread)
|
||||
{
|
||||
UERROR("OdomThread must be already deleted here!");
|
||||
@@ -3131,12 +3124,16 @@ void MainWindow::applyPrefSettings(PreferencesDialog::PANEL_FLAGS flags)
|
||||
|
||||
if(_camera)
|
||||
{
|
||||
_camera->setImageRate(_preferencesDialog->getGeneralInputRate());
|
||||
}
|
||||
if(_dbReader)
|
||||
{
|
||||
_dbReader->setFrameRate( _preferencesDialog->getSourceDatabaseStampsUsed()?-1:_preferencesDialog->getGeneralInputRate());
|
||||
if(dynamic_cast<DBReader*>(_camera->camera()) != 0)
|
||||
{
|
||||
_camera->setImageRate( _preferencesDialog->getSourceDatabaseStampsUsed()?-1:_preferencesDialog->getGeneralInputRate());
|
||||
}
|
||||
else
|
||||
{
|
||||
_camera->setImageRate(_preferencesDialog->getGeneralInputRate());
|
||||
}
|
||||
}
|
||||
|
||||
}//This will update the statistics toolbox
|
||||
|
||||
if(flags & PreferencesDialog::kPanelGeneral)
|
||||
@@ -3798,15 +3795,6 @@ void MainWindow::startDetection()
|
||||
emit stateChanged(kInitialized);
|
||||
return;
|
||||
}
|
||||
if(_dbReader != 0)
|
||||
{
|
||||
QMessageBox::warning(this,
|
||||
tr("RTAB-Map"),
|
||||
tr("A database reader is running, stop it first."));
|
||||
UWARN("_dbReader is not null... it must be stopped first");
|
||||
emit stateChanged(kInitialized);
|
||||
return;
|
||||
}
|
||||
|
||||
// Adjust pre-requirements
|
||||
if(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcUndef)
|
||||
@@ -3820,56 +3808,58 @@ void MainWindow::startDetection()
|
||||
}
|
||||
|
||||
|
||||
if(_preferencesDialog->getSourceDriver() < PreferencesDialog::kSrcDatabase)
|
||||
Camera * camera = _preferencesDialog->createCamera();
|
||||
if(!camera)
|
||||
{
|
||||
Camera * camera = _preferencesDialog->createCamera();
|
||||
if(!camera)
|
||||
emit stateChanged(kInitialized);
|
||||
return;
|
||||
}
|
||||
|
||||
_camera = new CameraThread(camera, parameters);
|
||||
_camera->setMirroringEnabled(_preferencesDialog->isSourceMirroring());
|
||||
_camera->setColorOnly(_preferencesDialog->isSourceRGBDColorOnly());
|
||||
_camera->setImageDecimation(_preferencesDialog->getSourceImageDecimation());
|
||||
_camera->setStereoToDepth(_preferencesDialog->isSourceStereoDepthGenerated());
|
||||
_camera->setScanFromDepth(
|
||||
_preferencesDialog->isSourceScanFromDepth(),
|
||||
_preferencesDialog->getSourceScanFromDepthDecimation(),
|
||||
_preferencesDialog->getSourceScanFromDepthMaxDepth(),
|
||||
_preferencesDialog->getSourceScanVoxelSize(),
|
||||
_preferencesDialog->getSourceScanNormalsK());
|
||||
|
||||
//Create odometry thread if rgbd slam
|
||||
if(uStr2Bool(parameters.at(Parameters::kRGBDEnabled()).c_str()))
|
||||
{
|
||||
// Require calibrated camera
|
||||
if(!camera->isCalibrated())
|
||||
{
|
||||
UWARN("Camera is not calibrated!");
|
||||
emit stateChanged(kInitialized);
|
||||
delete _camera;
|
||||
_camera = 0;
|
||||
|
||||
int button = QMessageBox::question(this,
|
||||
tr("Camera is not calibrated!"),
|
||||
tr("RTAB-Map cannot run with an uncalibrated camera. Do you want to calibrate the camera now?"),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
if(button == QMessageBox::Yes)
|
||||
{
|
||||
QTimer::singleShot(0, _preferencesDialog, SLOT(calibrate()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
_camera = new CameraThread(camera, parameters);
|
||||
_camera->setMirroringEnabled(_preferencesDialog->isSourceMirroring());
|
||||
_camera->setColorOnly(_preferencesDialog->isSourceRGBDColorOnly());
|
||||
_camera->setImageDecimation(_preferencesDialog->getSourceImageDecimation());
|
||||
_camera->setStereoToDepth(_preferencesDialog->isSourceStereoDepthGenerated());
|
||||
_camera->setScanFromDepth(
|
||||
_preferencesDialog->isSourceScanFromDepth(),
|
||||
_preferencesDialog->getSourceScanFromDepthDecimation(),
|
||||
_preferencesDialog->getSourceScanFromDepthMaxDepth(),
|
||||
_preferencesDialog->getSourceScanVoxelSize(),
|
||||
_preferencesDialog->getSourceScanNormalsK());
|
||||
|
||||
//Create odometry thread if rgbd slam
|
||||
if(uStr2Bool(parameters.at(Parameters::kRGBDEnabled()).c_str()))
|
||||
else
|
||||
{
|
||||
// Require calibrated camera
|
||||
if(!camera->isCalibrated())
|
||||
if(_odomThread)
|
||||
{
|
||||
UWARN("Camera is not calibrated!");
|
||||
emit stateChanged(kInitialized);
|
||||
delete _camera;
|
||||
_camera = 0;
|
||||
|
||||
int button = QMessageBox::question(this,
|
||||
tr("Camera is not calibrated!"),
|
||||
tr("RTAB-Map cannot run with an uncalibrated camera. Do you want to calibrate the camera now?"),
|
||||
QMessageBox::Yes | QMessageBox::No);
|
||||
if(button == QMessageBox::Yes)
|
||||
{
|
||||
QTimer::singleShot(0, _preferencesDialog, SLOT(calibrate()));
|
||||
}
|
||||
return;
|
||||
UERROR("OdomThread must be already deleted here?!");
|
||||
delete _odomThread;
|
||||
_odomThread = 0;
|
||||
}
|
||||
else
|
||||
|
||||
DBReader* dbReader = dynamic_cast<DBReader*>(camera);
|
||||
if(dbReader == 0 || dbReader->isOdometryIgnored())
|
||||
{
|
||||
if(_odomThread)
|
||||
{
|
||||
UERROR("OdomThread must be already deleted here?!");
|
||||
delete _odomThread;
|
||||
_odomThread = 0;
|
||||
}
|
||||
Odometry * odom = Odometry::create(parameters);
|
||||
_odomThread = new OdometryThread(odom, _preferencesDialog->getOdomBufferSize());
|
||||
|
||||
@@ -3880,65 +3870,10 @@ void MainWindow::startDetection()
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(_preferencesDialog->getSourceDriver() == PreferencesDialog::kSrcDatabase)
|
||||
|
||||
if(_dataRecorder && _camera)
|
||||
{
|
||||
_dbReader = new DBReader(_preferencesDialog->getSourceDatabasePath().toStdString(),
|
||||
_preferencesDialog->getSourceDatabaseStampsUsed()?-1:_preferencesDialog->getGeneralInputRate(),
|
||||
_preferencesDialog->getSourceDatabaseOdometryIgnored(),
|
||||
_preferencesDialog->getSourceDatabaseGoalDelayIgnored(),
|
||||
_preferencesDialog->getSourceDatabaseGoalsIgnored(),
|
||||
_preferencesDialog->getSourceDatabaseCameraIndex());
|
||||
|
||||
//Create odometry thread if rgdb slam
|
||||
if(uStr2Bool(parameters.at(Parameters::kRGBDEnabled()).c_str()) &&
|
||||
_preferencesDialog->getSourceDatabaseOdometryIgnored())
|
||||
{
|
||||
if(_odomThread)
|
||||
{
|
||||
UERROR("OdomThread must be already deleted here?!");
|
||||
delete _odomThread;
|
||||
}
|
||||
Odometry * odom = Odometry::create(parameters);
|
||||
_odomThread = new OdometryThread(odom, _preferencesDialog->getOdomBufferSize());
|
||||
|
||||
UEventsManager::addHandler(_odomThread);
|
||||
_odomThread->start();
|
||||
}
|
||||
|
||||
if(!_dbReader->init(_preferencesDialog->getSourceDatabaseStartPos()))
|
||||
{
|
||||
ULOGGER_WARN("init DBReader failed... ");
|
||||
QMessageBox::warning(this,
|
||||
tr("RTAB-Map"),
|
||||
tr("Database reader initialization failed..."));
|
||||
emit stateChanged(kInitialized);
|
||||
delete _dbReader;
|
||||
_dbReader = 0;
|
||||
if(_odomThread)
|
||||
{
|
||||
delete _odomThread;
|
||||
_odomThread = 0;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if(_odomThread)
|
||||
{
|
||||
UEventsManager::createPipe(_dbReader, _odomThread, "CameraEvent");
|
||||
UEventsManager::createPipe(_dbReader, this, "CameraEvent");
|
||||
}
|
||||
}
|
||||
|
||||
if(_dataRecorder)
|
||||
{
|
||||
if(_camera)
|
||||
{
|
||||
UEventsManager::createPipe(_camera, _dataRecorder, "CameraEvent");
|
||||
}
|
||||
else if(_dbReader)
|
||||
{
|
||||
UEventsManager::createPipe(_dbReader, _dataRecorder, "CameraEvent");
|
||||
}
|
||||
UEventsManager::createPipe(_camera, _dataRecorder, "CameraEvent");
|
||||
}
|
||||
|
||||
_lastOdomPose.setNull();
|
||||
@@ -3964,7 +3899,7 @@ void MainWindow::startDetection()
|
||||
// Could not be in the main thread here! (see handleEvents())
|
||||
void MainWindow::pauseDetection()
|
||||
{
|
||||
if(_camera || _dbReader)
|
||||
if(_camera)
|
||||
{
|
||||
if(_state == kPaused && (QApplication::keyboardModifiers() & Qt::ShiftModifier))
|
||||
{
|
||||
@@ -3998,14 +3933,13 @@ void MainWindow::pauseDetection()
|
||||
|
||||
void MainWindow::stopDetection()
|
||||
{
|
||||
if(!_camera && !_dbReader && !_odomThread)
|
||||
if(!_camera && !_odomThread)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(_state == kDetecting &&
|
||||
( (_camera && _camera->isRunning()) ||
|
||||
(_dbReader && _dbReader->isRunning()) ) )
|
||||
(_camera && _camera->isRunning()) )
|
||||
{
|
||||
QMessageBox::StandardButton button = QMessageBox::question(this, tr("Stopping process..."), tr("Are you sure you want to stop the process?"), QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
|
||||
|
||||
@@ -4022,11 +3956,6 @@ void MainWindow::stopDetection()
|
||||
_camera->join(true);
|
||||
}
|
||||
|
||||
if(_dbReader)
|
||||
{
|
||||
_dbReader->join(true);
|
||||
}
|
||||
|
||||
if(_odomThread)
|
||||
{
|
||||
_ui->actionReset_Odometry->setEnabled(false);
|
||||
@@ -4039,11 +3968,6 @@ void MainWindow::stopDetection()
|
||||
delete _camera;
|
||||
_camera = 0;
|
||||
}
|
||||
if(_dbReader)
|
||||
{
|
||||
delete _dbReader;
|
||||
_dbReader = 0;
|
||||
}
|
||||
if(_odomThread)
|
||||
{
|
||||
delete _odomThread;
|
||||
@@ -5923,11 +5847,6 @@ void MainWindow::changeState(MainWindow::State newState)
|
||||
{
|
||||
_camera->start();
|
||||
}
|
||||
|
||||
if(_dbReader)
|
||||
{
|
||||
_dbReader->start();
|
||||
}
|
||||
break;
|
||||
|
||||
case kPaused:
|
||||
@@ -5959,11 +5878,6 @@ void MainWindow::changeState(MainWindow::State newState)
|
||||
{
|
||||
_camera->start();
|
||||
}
|
||||
|
||||
if(_dbReader)
|
||||
{
|
||||
_dbReader->start();
|
||||
}
|
||||
}
|
||||
else if(_state == kDetecting)
|
||||
{
|
||||
@@ -5993,11 +5907,6 @@ void MainWindow::changeState(MainWindow::State newState)
|
||||
{
|
||||
_camera->join(true);
|
||||
}
|
||||
|
||||
if(_dbReader)
|
||||
{
|
||||
_dbReader->join(true);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case kMonitoring:
|
||||
|
||||
@@ -3520,7 +3520,7 @@ void PreferencesDialog::updateSourceGrpVisibility()
|
||||
_ui->groupBox_sourceRGB->setVisible(_ui->comboBox_sourceType->currentIndex() == 2);
|
||||
_ui->groupBox_sourceDatabase->setVisible(_ui->comboBox_sourceType->currentIndex() == 3);
|
||||
|
||||
_ui->groupBox_scanFromDepth->setVisible(_ui->comboBox_sourceType->currentIndex() <= 1);
|
||||
_ui->groupBox_scanFromDepth->setVisible(_ui->comboBox_sourceType->currentIndex() <= 1 || _ui->comboBox_sourceType->currentIndex() == 3);
|
||||
|
||||
_ui->stackedWidget_rgbd->setVisible(_ui->comboBox_sourceType->currentIndex() == 0 &&
|
||||
(_ui->comboBox_cameraRGBD->currentIndex() == kSrcOpenNI2-kSrcRGBD ||
|
||||
@@ -3549,7 +3549,7 @@ void PreferencesDialog::updateSourceGrpVisibility()
|
||||
(_ui->comboBox_sourceType->currentIndex() == 1 && _ui->comboBox_cameraStereo->currentIndex() == kSrcStereoImages-kSrcStereo) ||
|
||||
(_ui->comboBox_sourceType->currentIndex() == 2 && _ui->source_comboBox_image_type->currentIndex() == kSrcImages-kSrcRGB));
|
||||
|
||||
_ui->groupBox_scan->setVisible(_ui->comboBox_sourceType->currentIndex() != 3);
|
||||
//_ui->groupBox_scan->setVisible(_ui->comboBox_sourceType->currentIndex() != 3);
|
||||
|
||||
_ui->groupBox_depthFromScan->setVisible(_ui->comboBox_sourceType->currentIndex() == 2 && _ui->source_comboBox_image_type->currentIndex() == kSrcImages-kSrcRGB);
|
||||
}
|
||||
@@ -3891,30 +3891,6 @@ Transform PreferencesDialog::getLaserLocalTransform() const
|
||||
return t;
|
||||
}
|
||||
|
||||
QString PreferencesDialog::getSourceDatabasePath() const
|
||||
{
|
||||
return _ui->source_database_lineEdit_path->text();
|
||||
}
|
||||
bool PreferencesDialog::getSourceDatabaseOdometryIgnored() const
|
||||
{
|
||||
return _ui->source_checkBox_ignoreOdometry->isChecked();
|
||||
}
|
||||
bool PreferencesDialog::getSourceDatabaseGoalDelayIgnored() const
|
||||
{
|
||||
return _ui->source_checkBox_ignoreGoalDelay->isChecked();
|
||||
}
|
||||
bool PreferencesDialog::getSourceDatabaseGoalsIgnored() const
|
||||
{
|
||||
return _ui->source_checkBox_ignoreGoals->isChecked();
|
||||
}
|
||||
int PreferencesDialog::getSourceDatabaseStartPos() const
|
||||
{
|
||||
return _ui->source_spinBox_databaseStartPos->value();
|
||||
}
|
||||
int PreferencesDialog::getSourceDatabaseCameraIndex() const
|
||||
{
|
||||
return _ui->source_spinBox_database_cameraIndex->value();
|
||||
}
|
||||
bool PreferencesDialog::getSourceDatabaseStampsUsed() const
|
||||
{
|
||||
return _ui->source_checkBox_useDbStamps->isChecked();
|
||||
@@ -4193,8 +4169,13 @@ Camera * PreferencesDialog::createCamera(bool useRawImages)
|
||||
}
|
||||
else if(driver == kSrcDatabase)
|
||||
{
|
||||
UERROR("Call directly DBReader for kSrcDatabase.");
|
||||
return 0;
|
||||
camera = new DBReader(_ui->source_database_lineEdit_path->text().toStdString(),
|
||||
_ui->source_checkBox_useDbStamps->isChecked()?-1:this->getGeneralInputRate(),
|
||||
_ui->source_checkBox_ignoreOdometry->isChecked(),
|
||||
_ui->source_checkBox_ignoreGoalDelay->isChecked(),
|
||||
_ui->source_checkBox_ignoreGoals->isChecked(),
|
||||
_ui->source_spinBox_databaseStartPos->value(),
|
||||
_ui->source_spinBox_database_cameraIndex->value());
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -4376,30 +4357,11 @@ void PreferencesDialog::setSLAMMode(bool enabled)
|
||||
|
||||
void PreferencesDialog::testOdometry()
|
||||
{
|
||||
DBReader dbReader(_ui->source_database_lineEdit_path->text().toStdString(),
|
||||
_ui->source_checkBox_useDbStamps->isChecked()?-1:this->getGeneralInputRate(),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
_ui->source_spinBox_database_cameraIndex->value());
|
||||
Camera * camera = 0;
|
||||
if(this->getSourceType() == kSrcDatabase)
|
||||
Camera * camera = this->createCamera();
|
||||
if(!camera)
|
||||
{
|
||||
if(!dbReader.init())
|
||||
{
|
||||
QMessageBox::warning(this, tr("Camera viewer"), tr("Failed to initialize the database reader!"));
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
camera = this->createCamera();
|
||||
if(!camera)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ParametersMap parameters = this->getAllParameters();
|
||||
Odometry * odometry = Odometry::create(parameters);
|
||||
@@ -4420,9 +4382,42 @@ void PreferencesDialog::testOdometry()
|
||||
odomViewer->resize(1280, 480+QPushButton().minimumHeight());
|
||||
odomViewer->registerToEventsManager();
|
||||
|
||||
CameraThread cameraThread(camera, this->getAllParameters()); // take ownership of camera
|
||||
cameraThread.setMirroringEnabled(isSourceMirroring());
|
||||
cameraThread.setColorOnly(_ui->checkbox_rgbd_colorOnly->isChecked());
|
||||
cameraThread.setImageDecimation(_ui->spinBox_source_imageDecimation->value());
|
||||
cameraThread.setStereoToDepth(_ui->checkbox_stereo_depthGenerated->isChecked());
|
||||
cameraThread.setScanFromDepth(
|
||||
_ui->groupBox_scanFromDepth->isChecked(),
|
||||
_ui->spinBox_cameraScanFromDepth_decimation->value(),
|
||||
_ui->doubleSpinBox_cameraSCanFromDepth_maxDepth->value(),
|
||||
_ui->doubleSpinBox_cameraImages_scanVoxelSize->value(),
|
||||
_ui->spinBox_cameraImages_scanNormalsK->value());
|
||||
UEventsManager::createPipe(&cameraThread, &odomThread, "CameraEvent");
|
||||
UEventsManager::createPipe(&odomThread, odomViewer, "OdometryEvent");
|
||||
UEventsManager::createPipe(odomViewer, &odomThread, "OdometryResetEvent");
|
||||
|
||||
odomThread.start();
|
||||
cameraThread.start();
|
||||
|
||||
odomViewer->exec();
|
||||
delete odomViewer;
|
||||
|
||||
cameraThread.join(true);
|
||||
odomThread.join(true);
|
||||
}
|
||||
|
||||
void PreferencesDialog::testCamera()
|
||||
{
|
||||
CameraViewer * window = new CameraViewer(this, this->getAllParameters());
|
||||
window->setWindowTitle(tr("Camera viewer"));
|
||||
window->resize(1280, 480+QPushButton().minimumHeight());
|
||||
window->registerToEventsManager();
|
||||
|
||||
Camera * camera = this->createCamera();
|
||||
if(camera)
|
||||
{
|
||||
CameraThread cameraThread(camera, this->getAllParameters()); // take ownership of camera
|
||||
CameraThread cameraThread(camera, this->getAllParameters());
|
||||
cameraThread.setMirroringEnabled(isSourceMirroring());
|
||||
cameraThread.setColorOnly(_ui->checkbox_rgbd_colorOnly->isChecked());
|
||||
cameraThread.setImageDecimation(_ui->spinBox_source_imageDecimation->value());
|
||||
@@ -4433,97 +4428,19 @@ void PreferencesDialog::testOdometry()
|
||||
_ui->doubleSpinBox_cameraSCanFromDepth_maxDepth->value(),
|
||||
_ui->doubleSpinBox_cameraImages_scanVoxelSize->value(),
|
||||
_ui->spinBox_cameraImages_scanNormalsK->value());
|
||||
UEventsManager::createPipe(&cameraThread, &odomThread, "CameraEvent");
|
||||
UEventsManager::createPipe(&odomThread, odomViewer, "OdometryEvent");
|
||||
UEventsManager::createPipe(odomViewer, &odomThread, "OdometryResetEvent");
|
||||
UEventsManager::createPipe(&cameraThread, window, "CameraEvent");
|
||||
|
||||
odomThread.start();
|
||||
cameraThread.start();
|
||||
|
||||
odomViewer->exec();
|
||||
delete odomViewer;
|
||||
|
||||
window->exec();
|
||||
delete window;
|
||||
cameraThread.join(true);
|
||||
odomThread.join(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
UEventsManager::createPipe(&dbReader, &odomThread, "CameraEvent");
|
||||
UEventsManager::createPipe(&odomThread, odomViewer, "OdometryEvent");
|
||||
UEventsManager::createPipe(odomViewer, &odomThread, "OdometryResetEvent");
|
||||
|
||||
odomThread.start();
|
||||
dbReader.start();
|
||||
|
||||
odomViewer->exec();
|
||||
delete odomViewer;
|
||||
|
||||
dbReader.join(true);
|
||||
odomThread.join(true);
|
||||
delete window;
|
||||
}
|
||||
}
|
||||
|
||||
void PreferencesDialog::testCamera()
|
||||
{
|
||||
CameraViewer * window = new CameraViewer(this, this->getAllParameters());
|
||||
window->setWindowTitle(tr("Camera viewer"));
|
||||
window->resize(1280, 480+QPushButton().minimumHeight());
|
||||
window->registerToEventsManager();
|
||||
|
||||
if(this->getSourceType() == kSrcDatabase)
|
||||
{
|
||||
DBReader dbReader(_ui->source_database_lineEdit_path->text().toStdString(),
|
||||
_ui->source_checkBox_useDbStamps->isChecked()?-1:this->getGeneralInputRate(),
|
||||
true,
|
||||
true,
|
||||
true,
|
||||
_ui->source_spinBox_database_cameraIndex->value());
|
||||
if(!dbReader.init(_ui->source_images_spinBox_startPos->value()))
|
||||
{
|
||||
QMessageBox::warning(this, tr("Camera viewer"), tr("Failed to initialize the database reader!"));
|
||||
delete window;
|
||||
}
|
||||
else
|
||||
{
|
||||
UEventsManager::createPipe(&dbReader, window, "CameraEvent");
|
||||
|
||||
dbReader.start();
|
||||
window->exec();
|
||||
delete window;
|
||||
dbReader.join(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Camera * camera = this->createCamera();
|
||||
if(camera)
|
||||
{
|
||||
CameraThread cameraThread(camera, this->getAllParameters());
|
||||
cameraThread.setMirroringEnabled(isSourceMirroring());
|
||||
cameraThread.setColorOnly(_ui->checkbox_rgbd_colorOnly->isChecked());
|
||||
cameraThread.setImageDecimation(_ui->spinBox_source_imageDecimation->value());
|
||||
cameraThread.setStereoToDepth(_ui->checkbox_stereo_depthGenerated->isChecked());
|
||||
cameraThread.setScanFromDepth(
|
||||
_ui->groupBox_scanFromDepth->isChecked(),
|
||||
_ui->spinBox_cameraScanFromDepth_decimation->value(),
|
||||
_ui->doubleSpinBox_cameraSCanFromDepth_maxDepth->value(),
|
||||
_ui->doubleSpinBox_cameraImages_scanVoxelSize->value(),
|
||||
_ui->spinBox_cameraImages_scanNormalsK->value());
|
||||
UEventsManager::createPipe(&cameraThread, window, "CameraEvent");
|
||||
|
||||
cameraThread.start();
|
||||
window->exec();
|
||||
delete window;
|
||||
cameraThread.join(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
delete window;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PreferencesDialog::calibrate()
|
||||
{
|
||||
if(this->getSourceType() == kSrcDatabase)
|
||||
|
||||
Reference in New Issue
Block a user