mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-08 12:30:20 +08:00
Statistics: added x,y,z map corrections. Report: added options --stats to show available statistics to plot in a database
This commit is contained in:
@@ -74,6 +74,9 @@ class RTABMAP_EXP Statistics
|
||||
RTABMAP_STATS(Loop, Visual_inliers_mean_dist,m);
|
||||
RTABMAP_STATS(Loop, Visual_inliers_distribution,);
|
||||
RTABMAP_STATS(Loop, Map_correction_norm, m);
|
||||
RTABMAP_STATS(Loop, Map_correction_x, m);
|
||||
RTABMAP_STATS(Loop, Map_correction_y, m);
|
||||
RTABMAP_STATS(Loop, Map_correction_z, m);
|
||||
RTABMAP_STATS(Loop, Map_correction_roll, deg);
|
||||
RTABMAP_STATS(Loop, Map_correction_pitch, deg);
|
||||
RTABMAP_STATS(Loop, Map_correction_yaw, deg);
|
||||
|
||||
@@ -3115,8 +3115,11 @@ bool Rtabmap::process(
|
||||
|
||||
// Map correction (/map -> /odom)
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_norm(), _mapCorrection.getNorm());
|
||||
float roll,pitch,yaw;
|
||||
_mapCorrection.getEulerAngles(roll, pitch, yaw);
|
||||
float x,y,z,roll,pitch,yaw;
|
||||
_mapCorrection.getTranslationAndEulerAngles(x, y, z, roll, pitch, yaw);
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_x(), x);
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_y(), y);
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_z(), z);
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_roll(), roll*180/M_PI);
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_pitch(), pitch*180/M_PI);
|
||||
statistics_.addStatistic(Statistics::kLoopMap_correction_yaw(), yaw*180/M_PI);
|
||||
|
||||
@@ -51,6 +51,7 @@ void showUsage()
|
||||
"rtabmap-report [\"Statistic/Id\"] [options] path\n"
|
||||
#else
|
||||
"rtabmap-report [options] path\n"
|
||||
"[Not built with Qt, statistics cannot be plotted]\n"
|
||||
#endif
|
||||
" path Directory containing rtabmap databases or path of a database.\n"
|
||||
" Options:"
|
||||
@@ -62,6 +63,9 @@ void showUsage()
|
||||
" and compute error based on the scaled path.\n"
|
||||
" --poses Export poses to [path]_poses.txt, ground truth to [path]_gt.txt\n"
|
||||
" and valid ground truth indices to [path]_indices.txt \n"
|
||||
#ifdef WITH_QT
|
||||
" --stats Show available statistics to plot (if path is a file). \n"
|
||||
#endif
|
||||
" --report Export all statistics values in report.txt \n\n");
|
||||
exit(1);
|
||||
}
|
||||
@@ -86,6 +90,7 @@ int main(int argc, char * argv[])
|
||||
bool outputRelativeError = false;
|
||||
bool outputReport = false;
|
||||
bool outputLoopAccuracy = false;
|
||||
bool showAvailableStats = false;
|
||||
#ifdef WITH_QT
|
||||
std::map<std::string, UPlot*> figures;
|
||||
#endif
|
||||
@@ -119,6 +124,10 @@ int main(int argc, char * argv[])
|
||||
{
|
||||
outputReport = true;
|
||||
}
|
||||
else if(strcmp(argv[i],"--stats") == 0)
|
||||
{
|
||||
showAvailableStats = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef WITH_QT
|
||||
@@ -222,6 +231,32 @@ int main(int argc, char * argv[])
|
||||
float maxOdomRAM = -1;
|
||||
float maxMapRAM = -1;
|
||||
#ifdef WITH_QT
|
||||
if(currentPathIsDatabase && showAvailableStats)
|
||||
{
|
||||
std::map<std::string, int> availableStats;
|
||||
for(std::set<int>::iterator iter=ids.begin(); iter!=ids.end(); ++iter)
|
||||
{
|
||||
for(std::map<std::string, float>::iterator jter=stats.at(*iter).first.begin(); jter!=stats.at(*iter).first.end(); ++jter)
|
||||
{
|
||||
if(availableStats.find(jter->first) != availableStats.end())
|
||||
{
|
||||
++availableStats.at(jter->first);
|
||||
}
|
||||
else
|
||||
{
|
||||
availableStats.insert(std::make_pair(jter->first, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("Showing available statistics in \"%s\":\n", filePath.c_str());
|
||||
for(std::map<std::string, int>::iterator iter=availableStats.begin(); iter!=availableStats.end(); ++iter)
|
||||
{
|
||||
printf("%s (%d)\n", iter->first.c_str(), iter->second);
|
||||
}
|
||||
printf("\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
std::map<std::string, UPlotCurve*> curves;
|
||||
std::map<std::string, double> firstStamps;
|
||||
for(std::map<std::string, UPlot*>::iterator iter=figures.begin(); iter!=figures.end(); ++iter)
|
||||
|
||||
Reference in New Issue
Block a user