mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-10 19:49:49 +08:00
0.11.11: changed Statistics table name to Info and added new Statistics table containing detection statistics. StatisticsToolBox can cache statistics (true by default). DatabaseViewer: new Statistics panel to see all statistics contained in the database.
This commit is contained in:
@@ -115,6 +115,7 @@ DatabaseViewer::DatabaseViewer(const QString & ini, QWidget * parent) :
|
||||
ui_->dockWidget_info->setVisible(false);
|
||||
ui_->dockWidget_stereoView->setVisible(false);
|
||||
ui_->dockWidget_view3d->setVisible(false);
|
||||
ui_->dockWidget_statistics->setVisible(false);
|
||||
|
||||
// Create cloud viewers
|
||||
constraintsViewer_ = new CloudViewer(ui_->dockWidgetContents);
|
||||
@@ -159,6 +160,7 @@ DatabaseViewer::DatabaseViewer(const QString & ini, QWidget * parent) :
|
||||
ui_->menuView->addAction(ui_->dockWidget_guiparameters->toggleViewAction());
|
||||
ui_->menuView->addAction(ui_->dockWidget_coreparameters->toggleViewAction());
|
||||
ui_->menuView->addAction(ui_->dockWidget_info->toggleViewAction());
|
||||
ui_->menuView->addAction(ui_->dockWidget_statistics->toggleViewAction());
|
||||
connect(ui_->dockWidget_graphView->toggleViewAction(), SIGNAL(triggered()), this, SLOT(updateGraphView()));
|
||||
|
||||
connect(ui_->parameters_toolbox, SIGNAL(parametersChanged(const QStringList &)), this, SLOT(notifyParametersChanged(const QStringList &)));
|
||||
@@ -311,6 +313,7 @@ DatabaseViewer::DatabaseViewer(const QString & ini, QWidget * parent) :
|
||||
ui_->dockWidget_guiparameters->installEventFilter(this);
|
||||
ui_->dockWidget_coreparameters->installEventFilter(this);
|
||||
ui_->dockWidget_info->installEventFilter(this);
|
||||
ui_->dockWidget_statistics->installEventFilter(this);
|
||||
}
|
||||
|
||||
DatabaseViewer::~DatabaseViewer()
|
||||
@@ -778,6 +781,7 @@ void DatabaseViewer::closeEvent(QCloseEvent* event)
|
||||
|
||||
if(event->isAccepted())
|
||||
{
|
||||
ui_->toolBox_statistics->closeFigures();
|
||||
if(dbDriver_)
|
||||
{
|
||||
delete dbDriver_;
|
||||
@@ -1145,6 +1149,7 @@ void DatabaseViewer::updateIds()
|
||||
dbDriver_->getAllNodeIds(idsWithoutBad, false, true);
|
||||
int badcountInLTM = 0;
|
||||
int badCountInGraph = 0;
|
||||
double firstStamp = 0.0;
|
||||
for(int i=0; i<ids_.size(); ++i)
|
||||
{
|
||||
idToIndex_.insert(ids_[i], i);
|
||||
@@ -1157,6 +1162,17 @@ void DatabaseViewer::updateIds()
|
||||
dbDriver_->getNodeInfo(ids_[i], p, mapId, w, l, s, g);
|
||||
mapIds_.insert(std::make_pair(ids_[i], mapId));
|
||||
|
||||
double stamp=0.0;
|
||||
std::map<std::string, float> statistics = dbDriver_->getStatistics(ids_[i], stamp);
|
||||
if(firstStamp==0.0)
|
||||
{
|
||||
firstStamp = stamp;
|
||||
}
|
||||
for(std::map<std::string, float>::iterator iter=statistics.begin(); iter!=statistics.end(); ++iter)
|
||||
{
|
||||
ui_->toolBox_statistics->updateStat(iter->first.c_str(), float(stamp-firstStamp), iter->second, true);
|
||||
}
|
||||
|
||||
if(i>0)
|
||||
{
|
||||
if(mapIds_.at(ids_[i-1]) == mapId)
|
||||
|
||||
+123
-124
@@ -533,58 +533,57 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
|
||||
const std::map<std::string, float> & statistics = Statistics::defaultData();
|
||||
for(std::map<std::string, float>::const_iterator iter = statistics.begin(); iter != statistics.end(); ++iter)
|
||||
{
|
||||
_ui->statsToolBox->updateStat(QString((*iter).first.c_str()).replace('_', ' '), 0, (*iter).second);
|
||||
_ui->statsToolBox->updateStat(QString((*iter).first.c_str()).replace('_', ' '), false);
|
||||
}
|
||||
}
|
||||
// Specific MainWindow
|
||||
_ui->statsToolBox->updateStat("Planning/From/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Planning/Time/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Planning/Goal/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Planning/Poses/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Planning/Length/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Planning/From/", false);
|
||||
_ui->statsToolBox->updateStat("Planning/Time/ms", false);
|
||||
_ui->statsToolBox->updateStat("Planning/Goal/", false);
|
||||
_ui->statsToolBox->updateStat("Planning/Poses/", false);
|
||||
_ui->statsToolBox->updateStat("Planning/Length/m", false);
|
||||
|
||||
_ui->statsToolBox->updateStat("Camera/Time capturing/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time decimation/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time disparity/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time mirroring/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time scan from depth/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time capturing/ms", false);
|
||||
_ui->statsToolBox->updateStat("Camera/Time decimation/ms", false);
|
||||
_ui->statsToolBox->updateStat("Camera/Time disparity/ms", false);
|
||||
_ui->statsToolBox->updateStat("Camera/Time mirroring/ms", false);
|
||||
_ui->statsToolBox->updateStat("Camera/Time scan from depth/ms", false);
|
||||
|
||||
_ui->statsToolBox->updateStat("Odometry/ID/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Features/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Matches/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Inliers/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/ICPInliersRatio/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/StdDev/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Variance/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeEstimation/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeFiltering/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalMapSize/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalScanMapSize/", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Interval/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Speed/kph", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Distance/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tx/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Ty/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tz/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Troll/deg", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tpitch/deg", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tyaw/deg", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Px/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Py/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Pz/m", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Proll/deg", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Ppitch/deg", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Pyaw/deg", 0.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/ID/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Features/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Matches/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Inliers/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/ICPInliersRatio/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/StdDev/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Variance/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeEstimation/ms", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeFiltering/ms", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalMapSize/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalScanMapSize/", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Interval/ms", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Speed/kph", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Distance/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tx/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Ty/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tz/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Troll/deg", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tpitch/deg", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tyaw/deg", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Px/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Py/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Pz/m", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Proll/deg", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Ppitch/deg", false);
|
||||
_ui->statsToolBox->updateStat("Odometry/Pyaw/deg", false);
|
||||
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh odom/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D cloud/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D closure_view/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh stats/ms", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Data Size/MB", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Clouds Size/MB", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Grids Size/MB", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh odom/ms", false);
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D cloud/ms", false);
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh stats/ms", false);
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Data Size/MB", false);
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Clouds Size/MB", false);
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Grids Size/MB", false);
|
||||
#ifdef RTABMAP_OCTOMAP
|
||||
_ui->statsToolBox->updateStat("GUI/Octomap Size/MB", 0.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Octomap Size/MB", false);
|
||||
#endif
|
||||
|
||||
this->loadFigures();
|
||||
@@ -857,13 +856,13 @@ void MainWindow::processCameraInfo(const rtabmap::CameraInfo & info)
|
||||
{
|
||||
_firstStamp = info.stamp;
|
||||
}
|
||||
_ui->statsToolBox->updateStat("Camera/Time total/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeTotal*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time capturing/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeCapture*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time undistort depth/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeUndistortDepth*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time decimation/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeImageDecimation*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time disparity/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeDisparity*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time mirroring/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeMirroring*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time scan from depth/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeScanFromDepth*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Camera/Time total/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeTotal*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Camera/Time capturing/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeCapture*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Camera/Time undistort depth/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeUndistortDepth*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Camera/Time decimation/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeImageDecimation*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Camera/Time disparity/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeDisparity*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Camera/Time mirroring/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeMirroring*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Camera/Time scan from depth/ms", _preferencesDialog->isTimeUsedInFigures()?info.stamp-_firstStamp:(float)info.id, info.timeScanFromDepth*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
void MainWindow::processOdometry(const rtabmap::OdometryEvent & odom, bool dataIgnored)
|
||||
@@ -1303,85 +1302,85 @@ void MainWindow::processOdometry(const rtabmap::OdometryEvent & odom, bool dataI
|
||||
}
|
||||
|
||||
//Process info
|
||||
_ui->statsToolBox->updateStat("Odometry/Inliers/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().inliers);
|
||||
_ui->statsToolBox->updateStat("Odometry/ICPInliersRatio/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().icpInliersRatio);
|
||||
_ui->statsToolBox->updateStat("Odometry/Matches/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().matches);
|
||||
_ui->statsToolBox->updateStat("Odometry/StdDev/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), sqrt((float)odom.info().variance));
|
||||
_ui->statsToolBox->updateStat("Odometry/Variance/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().variance);
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeEstimation/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().timeEstimation*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeFiltering/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().timeParticleFiltering*1000.0f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Features/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().features);
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalMapSize/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().localMapSize);
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalScanMapSize/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().localScanMapSize);
|
||||
_ui->statsToolBox->updateStat("Odometry/ID/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.data().id());
|
||||
_ui->statsToolBox->updateStat("Odometry/Inliers/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().inliers, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/ICPInliersRatio/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().icpInliersRatio, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Matches/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().matches, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/StdDev/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), sqrt((float)odom.info().variance), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Variance/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().variance, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeEstimation/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().timeEstimation*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TimeFiltering/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().timeParticleFiltering*1000.0f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Features/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().features, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalMapSize/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().localMapSize, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/LocalScanMapSize/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.info().localScanMapSize, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/ID/", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), (float)odom.data().id(), _preferencesDialog->isCacheSavedInFigures());
|
||||
|
||||
float x=0.0f,y,z, roll,pitch,yaw;
|
||||
if(!odom.info().transform.isNull())
|
||||
{
|
||||
odom.info().transform.getTranslationAndEulerAngles(x,y,z,roll,pitch,yaw);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x);
|
||||
_ui->statsToolBox->updateStat("Odometry/Ty/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z);
|
||||
_ui->statsToolBox->updateStat("Odometry/Troll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/Tx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Ty/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Tz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Troll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Tpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Tyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
if(!odom.info().transformFiltered.isNull())
|
||||
{
|
||||
odom.info().transformFiltered.getTranslationAndEulerAngles(x,y,z,roll,pitch,yaw);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFy/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFroll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/TFx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TFy/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TFz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TFroll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TFpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TFyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
if(odom.info().interval > 0)
|
||||
{
|
||||
_ui->statsToolBox->updateStat("Odometry/Interval/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), odom.info().interval*1000.f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Speed/kph", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x/odom.info().interval*3.6f);
|
||||
_ui->statsToolBox->updateStat("Odometry/Interval/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), odom.info().interval*1000.f, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Speed/kph", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x/odom.info().interval*3.6f, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
if(!odom.info().transformGroundTruth.isNull())
|
||||
{
|
||||
odom.info().transformGroundTruth.getTranslationAndEulerAngles(x,y,z,roll,pitch,yaw);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGy/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGroll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/TGx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TGy/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TGz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TGroll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TGpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/TGyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
//cumulative pose
|
||||
if(!odom.pose().isNull())
|
||||
{
|
||||
odom.pose().getTranslationAndEulerAngles(x,y,z,roll,pitch,yaw);
|
||||
_ui->statsToolBox->updateStat("Odometry/Px/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x);
|
||||
_ui->statsToolBox->updateStat("Odometry/Py/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y);
|
||||
_ui->statsToolBox->updateStat("Odometry/Pz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z);
|
||||
_ui->statsToolBox->updateStat("Odometry/Proll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/Ppitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/Pyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/Px/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Py/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Pz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Proll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Ppitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/Pyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
if(!odom.data().groundTruth().isNull())
|
||||
{
|
||||
odom.data().groundTruth().getTranslationAndEulerAngles(x,y,z,roll,pitch,yaw);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGy/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGroll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI);
|
||||
_ui->statsToolBox->updateStat("Odometry/PGx/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), x, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/PGy/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), y, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/PGz/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), z, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/PGroll/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), roll*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/PGpitch/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), pitch*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Odometry/PGyaw/deg", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), yaw*180.0/CV_PI, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
if(odom.info().distanceTravelled > 0)
|
||||
{
|
||||
_ui->statsToolBox->updateStat("Odometry/Distance/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), odom.info().distanceTravelled);
|
||||
_ui->statsToolBox->updateStat("Odometry/Distance/m", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), odom.info().distanceTravelled, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh odom/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), time.elapsed()*1000.0);
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh odom/ms", _preferencesDialog->isTimeUsedInFigures()?odom.data().stamp()-_firstStamp:(float)odom.data().id(), time.elapsed()*1000.0, _preferencesDialog->isCacheSavedInFigures());
|
||||
_processingOdometry = false;
|
||||
}
|
||||
|
||||
@@ -1618,8 +1617,8 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
|
||||
UDEBUG("time= %d ms", time.restart());
|
||||
|
||||
_ui->statsToolBox->updateStat("Keypoint/Keypoints count in the last signature/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), signature.getWords().size());
|
||||
_ui->statsToolBox->updateStat("Keypoint/Keypoints count in the loop signature/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), loopSignature.getWords().size());
|
||||
_ui->statsToolBox->updateStat("Keypoint/Keypoints count in the last signature/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), signature.getWords().size(), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Keypoint/Keypoints count in the loop signature/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), loopSignature.getWords().size(), _preferencesDialog->isCacheSavedInFigures());
|
||||
|
||||
// PDF AND LIKELIHOOD
|
||||
if(!stat.posterior().empty() && _ui->dockWidget_posterior->isVisible())
|
||||
@@ -1647,7 +1646,7 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
for(std::map<std::string, float>::const_iterator iter = statistics.begin(); iter != statistics.end(); ++iter)
|
||||
{
|
||||
//ULOGGER_DEBUG("Updating stat \"%s\"", (*iter).first.c_str());
|
||||
_ui->statsToolBox->updateStat(QString((*iter).first.c_str()).replace('_', ' '), _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), (*iter).second);
|
||||
_ui->statsToolBox->updateStat(QString((*iter).first.c_str()).replace('_', ' '), _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), (*iter).second, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
UDEBUG("time= %d ms", time.restart());
|
||||
@@ -1717,7 +1716,7 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
_odometryCorrection = groundTruthOffset * stat.mapCorrection();
|
||||
|
||||
UDEBUG("time= %d ms", time.restart());
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D cloud/ms", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), int(timerVis.elapsed()*1000.0f));
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D cloud/ms", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), int(timerVis.elapsed()*1000.0f), _preferencesDialog->isCacheSavedInFigures());
|
||||
|
||||
// loop closure view
|
||||
if((stat.loopClosureId() > 0 || stat.proximityDetectionId() > 0) &&
|
||||
@@ -1733,7 +1732,7 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
UTimer loopTimer;
|
||||
_loopClosureViewer->updateView(Transform(), _preferencesDialog->getAllParameters());
|
||||
UINFO("Updating loop closure cloud view time=%fs", loopTimer.elapsed());
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D closure view/ms", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), int(loopTimer.elapsed()*1000.0f));
|
||||
_ui->statsToolBox->updateStat("GUI/RGB-D closure view/ms", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), int(loopTimer.elapsed()*1000.0f), _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
|
||||
UDEBUG("time= %d ms", time.restart());
|
||||
@@ -1828,19 +1827,19 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
UINFO("rotational_min=%f", rotational_min);
|
||||
UINFO("rotational_max=%f", rotational_max);
|
||||
|
||||
_ui->statsToolBox->updateStat("GT/translational_rmse/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_rmse);
|
||||
_ui->statsToolBox->updateStat("GT/translational_mean/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_mean);
|
||||
_ui->statsToolBox->updateStat("GT/translational_median/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_median);
|
||||
_ui->statsToolBox->updateStat("GT/translational_std/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_std);
|
||||
_ui->statsToolBox->updateStat("GT/translational_min/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_min);
|
||||
_ui->statsToolBox->updateStat("GT/translational_max/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_max);
|
||||
_ui->statsToolBox->updateStat("GT/translational_rmse/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_rmse, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/translational_mean/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_mean, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/translational_median/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_median, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/translational_std/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_std, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/translational_min/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_min, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/translational_max/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), translational_max, _preferencesDialog->isCacheSavedInFigures());
|
||||
|
||||
_ui->statsToolBox->updateStat("GT/rotational_rmse/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_rmse);
|
||||
_ui->statsToolBox->updateStat("GT/rotational_mean/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_mean);
|
||||
_ui->statsToolBox->updateStat("GT/rotational_median/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_median);
|
||||
_ui->statsToolBox->updateStat("GT/rotational_std/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_std);
|
||||
_ui->statsToolBox->updateStat("GT/rotational_min/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_min);
|
||||
_ui->statsToolBox->updateStat("GT/rotational_max/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_max);
|
||||
_ui->statsToolBox->updateStat("GT/rotational_rmse/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_rmse, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/rotational_mean/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_mean, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/rotational_median/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_median, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/rotational_std/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_std, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/rotational_min/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_min, _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GT/rotational_max/", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), rotational_max, _preferencesDialog->isCacheSavedInFigures());
|
||||
}
|
||||
}
|
||||
UDEBUG("time= %d ms", time.restart());
|
||||
@@ -1896,7 +1895,7 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
}
|
||||
float elapsedTime = static_cast<float>(totalTime.elapsed());
|
||||
UINFO("Updating GUI time = %fs", elapsedTime/1000.0f);
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh stats/ms", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), elapsedTime);
|
||||
_ui->statsToolBox->updateStat("GUI/Refresh stats/ms", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), elapsedTime, _preferencesDialog->isCacheSavedInFigures());
|
||||
if(_ui->actionAuto_screen_capture->isChecked() && !_autoScreenCaptureOdomSync)
|
||||
{
|
||||
this->captureScreen(_autoScreenCaptureRAM);
|
||||
@@ -1907,11 +1906,11 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
|
||||
_cachedSignatures.clear();
|
||||
_cachedMemoryUsage = 0;
|
||||
}
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Data Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _cachedMemoryUsage/(1024*1024));
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Clouds Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _createdCloudsMemoryUsage/(1024*1024));
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Grids Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _cachedGridsMemoryUsage/(1024*1024));
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Data Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _cachedMemoryUsage/(1024*1024), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Clouds Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _createdCloudsMemoryUsage/(1024*1024), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("GUI/Cache Grids Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _cachedGridsMemoryUsage/(1024*1024), _preferencesDialog->isCacheSavedInFigures());
|
||||
#ifdef RTABMAP_OCTOMAP
|
||||
_ui->statsToolBox->updateStat("GUI/Octomap Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _octomap->octree()->memoryUsage()/(1024*1024));
|
||||
_ui->statsToolBox->updateStat("GUI/Octomap Size/MB", _preferencesDialog->isTimeUsedInFigures()?stat.stamp()-_firstStamp:stat.refImageId(), _octomap->octree()->memoryUsage()/(1024*1024), _preferencesDialog->isCacheSavedInFigures());
|
||||
#endif
|
||||
if(_state != kMonitoring && _state != kDetecting)
|
||||
{
|
||||
@@ -3310,11 +3309,11 @@ void MainWindow::processRtabmapGlobalPathEvent(const rtabmap::RtabmapGlobalPathE
|
||||
_ui->graphicsView_graphView->setGlobalPath(event.getPoses());
|
||||
}
|
||||
|
||||
_ui->statsToolBox->updateStat("Planning/From/", float(event.getPoses().size()?event.getPoses().begin()->first:0));
|
||||
_ui->statsToolBox->updateStat("Planning/Time/ms", float(event.getPlanningTime()*1000.0));
|
||||
_ui->statsToolBox->updateStat("Planning/Goal/", float(event.getGoal()));
|
||||
_ui->statsToolBox->updateStat("Planning/Poses/", float(event.getPoses().size()));
|
||||
_ui->statsToolBox->updateStat("Planning/Length/m", float(graph::computePathLength(event.getPoses())));
|
||||
_ui->statsToolBox->updateStat("Planning/From/", float(event.getPoses().size()?event.getPoses().begin()->first:0), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Planning/Time/ms", float(event.getPlanningTime()*1000.0), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Planning/Goal/", float(event.getGoal()), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Planning/Poses/", float(event.getPoses().size()), _preferencesDialog->isCacheSavedInFigures());
|
||||
_ui->statsToolBox->updateStat("Planning/Length/m", float(graph::computePathLength(event.getPoses())), _preferencesDialog->isCacheSavedInFigures());
|
||||
|
||||
if(_preferencesDialog->notifyWhenNewGlobalPathIsReceived())
|
||||
{
|
||||
|
||||
@@ -279,6 +279,7 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
|
||||
connect(_ui->checkBox_imageHighestHypShown, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
connect(_ui->checkBox_beep, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
connect(_ui->checkBox_stamps, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
connect(_ui->checkBox_cacheStatistics, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
connect(_ui->checkBox_notifyWhenNewGlobalPathIsReceived, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
connect(_ui->spinBox_odomQualityWarnThr, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
connect(_ui->checkBox_posteriorGraphView, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteGeneralPanel()));
|
||||
@@ -1188,6 +1189,7 @@ void PreferencesDialog::resetSettings(QGroupBox * groupBox)
|
||||
_ui->general_checkBox_cloudsKept->setChecked(true);
|
||||
_ui->checkBox_beep->setChecked(false);
|
||||
_ui->checkBox_stamps->setChecked(true);
|
||||
_ui->checkBox_cacheStatistics->setChecked(true);
|
||||
_ui->checkBox_notifyWhenNewGlobalPathIsReceived->setChecked(false);
|
||||
_ui->checkBox_verticalLayoutUsed->setChecked(true);
|
||||
_ui->checkBox_imageRejectedShown->setChecked(true);
|
||||
@@ -1563,6 +1565,7 @@ void PreferencesDialog::readGuiSettings(const QString & filePath)
|
||||
_ui->checkBox_imageHighestHypShown->setChecked(settings.value("imageHighestHypShown", _ui->checkBox_imageHighestHypShown->isChecked()).toBool());
|
||||
_ui->checkBox_beep->setChecked(settings.value("beep", _ui->checkBox_beep->isChecked()).toBool());
|
||||
_ui->checkBox_stamps->setChecked(settings.value("figure_time", _ui->checkBox_stamps->isChecked()).toBool());
|
||||
_ui->checkBox_cacheStatistics->setChecked(settings.value("figure_cache", _ui->checkBox_cacheStatistics->isChecked()).toBool());
|
||||
_ui->checkBox_notifyWhenNewGlobalPathIsReceived->setChecked(settings.value("notifyNewGlobalPath", _ui->checkBox_notifyWhenNewGlobalPathIsReceived->isChecked()).toBool());
|
||||
_ui->spinBox_odomQualityWarnThr->setValue(settings.value("odomQualityThr", _ui->spinBox_odomQualityWarnThr->value()).toInt());
|
||||
_ui->checkBox_posteriorGraphView->setChecked(settings.value("posteriorGraphView", _ui->checkBox_posteriorGraphView->isChecked()).toBool());
|
||||
@@ -1989,6 +1992,7 @@ void PreferencesDialog::writeGuiSettings(const QString & filePath) const
|
||||
settings.setValue("imageHighestHypShown", _ui->checkBox_imageHighestHypShown->isChecked());
|
||||
settings.setValue("beep", _ui->checkBox_beep->isChecked());
|
||||
settings.setValue("figure_time", _ui->checkBox_stamps->isChecked());
|
||||
settings.setValue("figure_cache", _ui->checkBox_cacheStatistics->isChecked());
|
||||
settings.setValue("notifyNewGlobalPath", _ui->checkBox_notifyWhenNewGlobalPathIsReceived->isChecked());
|
||||
settings.setValue("odomQualityThr", _ui->spinBox_odomQualityWarnThr->value());
|
||||
settings.setValue("posteriorGraphView", _ui->checkBox_posteriorGraphView->isChecked());
|
||||
@@ -3769,6 +3773,10 @@ bool PreferencesDialog::isTimeUsedInFigures() const
|
||||
{
|
||||
return _ui->checkBox_stamps->isChecked();
|
||||
}
|
||||
bool PreferencesDialog::isCacheSavedInFigures() const
|
||||
{
|
||||
return _ui->checkBox_cacheStatistics->isChecked();
|
||||
}
|
||||
bool PreferencesDialog::notifyWhenNewGlobalPathIsReceived() const
|
||||
{
|
||||
return _ui->checkBox_notifyWhenNewGlobalPathIsReceived->isChecked();
|
||||
|
||||
+103
-13
@@ -44,24 +44,30 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
namespace rtabmap {
|
||||
|
||||
StatItem::StatItem(const QString & name, const std::vector<float> & x, const std::vector<float> & y, const QString & unit, const QMenu * menu, QGridLayout * grid, QWidget * parent) :
|
||||
StatItem::StatItem(const QString & name, bool cacheOn, const std::vector<float> & x, const std::vector<float> & y, const QString & unit, const QMenu * menu, QGridLayout * grid, QWidget * parent) :
|
||||
QWidget(parent),
|
||||
_button(0),
|
||||
_name(0),
|
||||
_value(0),
|
||||
_unit(0),
|
||||
_menu(0)
|
||||
_menu(0),
|
||||
_cacheOn(cacheOn)
|
||||
{
|
||||
this->setupUi(grid);
|
||||
_name->setText(name);
|
||||
if(y.size() == 1)
|
||||
if(y.size() == 1 || (y.size() > 1 && _cacheOn))
|
||||
{
|
||||
_value->setNum(y[0]);
|
||||
_value->setNum(y[y.size()-1]);
|
||||
}
|
||||
else if(y.size() > 1)
|
||||
{
|
||||
_value->setText("*");
|
||||
}
|
||||
if(cacheOn)
|
||||
{
|
||||
_x = x;
|
||||
_y = y;
|
||||
}
|
||||
_unit->setText(unit);
|
||||
this->updateMenu(menu);
|
||||
}
|
||||
@@ -73,19 +79,53 @@ StatItem::~StatItem()
|
||||
|
||||
void StatItem::addValue(float y)
|
||||
{
|
||||
if(_cacheOn)
|
||||
{
|
||||
if(_y.size() % 100)
|
||||
{
|
||||
_y.reserve(_y.size()+100);
|
||||
}
|
||||
_y.push_back(y);
|
||||
}
|
||||
_value->setText(QString::number(y, 'g', 3));
|
||||
emit valueAdded(y);
|
||||
}
|
||||
|
||||
void StatItem::addValue(float x, float y)
|
||||
{
|
||||
if(_cacheOn)
|
||||
{
|
||||
if(_y.size() % 100)
|
||||
{
|
||||
_y.reserve(_y.size()+100);
|
||||
}
|
||||
_y.push_back(y);
|
||||
if(_x.size() % 100)
|
||||
{
|
||||
_x.reserve(_x.size()+100);
|
||||
}
|
||||
_x.push_back(x);
|
||||
}
|
||||
|
||||
_value->setText(QString::number(y, 'g', 3));
|
||||
emit valueAdded(x,y);
|
||||
}
|
||||
|
||||
void StatItem::setValues(const std::vector<float> & x, const std::vector<float> & y)
|
||||
{
|
||||
_value->setText("*");
|
||||
if(_cacheOn)
|
||||
{
|
||||
_x = x;
|
||||
_y = y;
|
||||
if(y.size())
|
||||
{
|
||||
_value->setNum(y[y.size()-1]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_value->setText("*");
|
||||
}
|
||||
emit valuesChanged(x,y);
|
||||
}
|
||||
|
||||
@@ -132,6 +172,16 @@ void StatItem::setupUi(QGridLayout * grid)
|
||||
}
|
||||
}
|
||||
|
||||
void StatItem::setCacheOn(bool on)
|
||||
{
|
||||
_cacheOn = on;
|
||||
if(!on)
|
||||
{
|
||||
_x.clear();
|
||||
_y.clear();
|
||||
}
|
||||
}
|
||||
|
||||
void StatItem::updateMenu(const QMenu * menu)
|
||||
{
|
||||
_menu->clear();
|
||||
@@ -190,22 +240,37 @@ void StatsToolBox::closeFigures()
|
||||
}
|
||||
}
|
||||
|
||||
void StatsToolBox::updateStat(const QString & statFullName, float y)
|
||||
void StatsToolBox::setCacheOn(bool on)
|
||||
{
|
||||
QList<StatItem *> items = _statBox->findChildren<StatItem *>();
|
||||
for(int i=0; i<items.size(); ++i)
|
||||
{
|
||||
items[i]->setCacheOn(on);
|
||||
}
|
||||
}
|
||||
|
||||
void StatsToolBox::updateStat(const QString & statFullName, bool cacheOn)
|
||||
{
|
||||
std::vector<float> vx,vy;
|
||||
updateStat(statFullName, vx, vy, cacheOn);
|
||||
}
|
||||
|
||||
void StatsToolBox::updateStat(const QString & statFullName, float y, bool cacheOn)
|
||||
{
|
||||
std::vector<float> vx,vy(1);
|
||||
vy[0] = y;
|
||||
updateStat(statFullName, vx, vy);
|
||||
updateStat(statFullName, vx, vy, cacheOn);
|
||||
}
|
||||
|
||||
void StatsToolBox::updateStat(const QString & statFullName, float x, float y)
|
||||
void StatsToolBox::updateStat(const QString & statFullName, float x, float y, bool cacheOn)
|
||||
{
|
||||
std::vector<float> vx(1),vy(1);
|
||||
vx[0] = x;
|
||||
vy[0] = y;
|
||||
updateStat(statFullName, vx, vy);
|
||||
updateStat(statFullName, vx, vy, cacheOn);
|
||||
}
|
||||
|
||||
void StatsToolBox::updateStat(const QString & statFullName, const std::vector<float> & x, const std::vector<float> & y)
|
||||
void StatsToolBox::updateStat(const QString & statFullName, const std::vector<float> & x, const std::vector<float> & y, bool cacheOn)
|
||||
{
|
||||
// round float to max 2 numbers after the dot
|
||||
//x = (float(int(100*x)))/100;
|
||||
@@ -214,6 +279,7 @@ void StatsToolBox::updateStat(const QString & statFullName, const std::vector<fl
|
||||
StatItem * item = _statBox->findChild<StatItem *>(statFullName);
|
||||
if(item)
|
||||
{
|
||||
item->setCacheOn(cacheOn);
|
||||
if(y.size() == 1 && x.size() == 1)
|
||||
{
|
||||
item->addValue(x[0], y[0]);
|
||||
@@ -296,7 +362,7 @@ void StatsToolBox::updateStat(const QString & statFullName, const std::vector<fl
|
||||
return;
|
||||
}
|
||||
|
||||
item = new StatItem(name, x, y, unit, _plotMenu, grid, _statBox->widget(index));
|
||||
item = new StatItem(name, cacheOn, x, y, unit, _plotMenu, grid, _statBox->widget(index));
|
||||
item->setObjectName(statFullName);
|
||||
|
||||
//layout->insertWidget(layout->count()-1, item);
|
||||
@@ -327,6 +393,17 @@ void StatsToolBox::plot(const StatItem * stat, const QString & plotName)
|
||||
{
|
||||
plot->setMaxVisibleItems(0);
|
||||
}
|
||||
if(!stat->yValues().empty())
|
||||
{
|
||||
if(stat->xValues().size() == stat->yValues().size())
|
||||
{
|
||||
curve->setData(stat->xValues(),stat->yValues());
|
||||
}
|
||||
else
|
||||
{
|
||||
curve->setData(stat->yValues());
|
||||
}
|
||||
}
|
||||
if(!plot->addCurve(curve))
|
||||
{
|
||||
ULOGGER_WARN("Already added to the figure");
|
||||
@@ -376,6 +453,19 @@ void StatsToolBox::plot(const StatItem * stat, const QString & plotName)
|
||||
{
|
||||
newPlot->setMaxVisibleItems(0);
|
||||
}
|
||||
|
||||
if(!stat->yValues().empty())
|
||||
{
|
||||
if(stat->xValues().size() == stat->yValues().size())
|
||||
{
|
||||
curve->setData(stat->xValues(),stat->yValues());
|
||||
}
|
||||
else
|
||||
{
|
||||
curve->setData(stat->yValues());
|
||||
}
|
||||
}
|
||||
|
||||
if(!newPlot->addCurve(curve))
|
||||
{
|
||||
ULOGGER_ERROR("Not supposed to be here !?!");
|
||||
@@ -493,12 +583,12 @@ void StatsToolBox::getFiguresSetup(QList<int> & curvesPerFigure, QStringList & c
|
||||
}
|
||||
}
|
||||
}
|
||||
void StatsToolBox::addCurve(const QString & name, bool newFigure)
|
||||
void StatsToolBox::addCurve(const QString & name, bool newFigure, bool cacheOn)
|
||||
{
|
||||
StatItem * item = _statBox->findChild<StatItem *>(name);
|
||||
if(!item)
|
||||
{
|
||||
this->updateStat(name, 0, 0);
|
||||
this->updateStat(name, cacheOn);
|
||||
item = _statBox->findChild<StatItem *>(name);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1285</width>
|
||||
<height>857</height>
|
||||
<height>965</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -52,7 +52,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>204</width>
|
||||
<width>203</width>
|
||||
<height>208</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -1125,7 +1125,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>-32</y>
|
||||
<y>0</y>
|
||||
<width>280</width>
|
||||
<height>584</height>
|
||||
</rect>
|
||||
@@ -1443,8 +1443,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>282</width>
|
||||
<height>163</height>
|
||||
<width>201</width>
|
||||
<height>126</height>
|
||||
</rect>
|
||||
</property>
|
||||
<attribute name="label">
|
||||
@@ -1543,8 +1543,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>267</width>
|
||||
<height>168</height>
|
||||
<width>181</width>
|
||||
<height>200</height>
|
||||
</rect>
|
||||
</property>
|
||||
<attribute name="label">
|
||||
@@ -1876,6 +1876,24 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QDockWidget" name="dockWidget_statistics">
|
||||
<property name="windowTitle">
|
||||
<string>Statistics</string>
|
||||
</property>
|
||||
<attribute name="dockWidgetArea">
|
||||
<number>1</number>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="dockWidgetContents_5">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="rtabmap::StatsToolBox" name="toolBox_statistics" native="true"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<action name="actionOpen_database">
|
||||
<property name="text">
|
||||
<string>Open database</string>
|
||||
@@ -2019,6 +2037,12 @@
|
||||
<header>ParametersToolBox.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>rtabmap::StatsToolBox</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>rtabmap/gui/StatsToolBox.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>-179</y>
|
||||
<y>0</y>
|
||||
<width>673</width>
|
||||
<height>2496</height>
|
||||
</rect>
|
||||
@@ -86,7 +86,7 @@
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>5</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="page_22">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
|
||||
@@ -108,6 +108,42 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QLabel" name="label_102">
|
||||
<property name="text">
|
||||
<string>Notify when a new global path is received.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="label_313">
|
||||
<property name="text">
|
||||
<string>Insert created clouds in the GUI cache to avoid regenerating clouds on export.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="general_checkBox_cloudsKept">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="label_59">
|
||||
<property name="text">
|
||||
@@ -141,20 +177,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="label_102">
|
||||
<property name="text">
|
||||
<string>Notify when a new global path is received.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_notifyWhenNewGlobalPathIsReceived">
|
||||
<property name="text">
|
||||
<string/>
|
||||
@@ -164,29 +187,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLabel" name="label_313">
|
||||
<property name="text">
|
||||
<string>Insert created clouds in the GUI cache to avoid regenerating clouds on export.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="general_checkBox_cloudsKept">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_stamps">
|
||||
<property name="text">
|
||||
@@ -207,6 +207,26 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="label_342">
|
||||
<property name="text">
|
||||
<string>Cache statistics.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="checkBox_cacheStatistics">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
@@ -2384,7 +2404,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_55" columnstretch="0,0,0,1,0">
|
||||
<layout class="QGridLayout" name="gridLayout_55" columnstretch="0,0,0,1">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboBox_cameraRGBD">
|
||||
<property name="sizeAdjustPolicy">
|
||||
|
||||
Reference in New Issue
Block a user