mirror of
https://github.com/introlab/rtabmap.git
synced 2026-10-04 17:17:47 +08:00
rtabmap-reprocess: support Rtabmap/DetectionRate when intermediate nodes are created and -skip option is not used
This commit is contained in:
+27
-10
@@ -953,6 +953,11 @@ int main(int argc, char * argv[])
|
|||||||
|
|
||||||
Odometry * odometry = 0;
|
Odometry * odometry = 0;
|
||||||
float rtabmapUpdateRate = Parameters::defaultRtabmapDetectionRate();
|
float rtabmapUpdateRate = Parameters::defaultRtabmapDetectionRate();
|
||||||
|
Parameters::parse(parameters, Parameters::kRtabmapDetectionRate(), rtabmapUpdateRate);
|
||||||
|
if(rtabmapUpdateRate!=0)
|
||||||
|
{
|
||||||
|
rtabmapUpdateRate = 1.0f/rtabmapUpdateRate;
|
||||||
|
}
|
||||||
double lastUpdateStamp = 0;
|
double lastUpdateStamp = 0;
|
||||||
if(recomputeOdometry)
|
if(recomputeOdometry)
|
||||||
{
|
{
|
||||||
@@ -965,14 +970,17 @@ int main(int argc, char * argv[])
|
|||||||
{
|
{
|
||||||
printf("Odometry will be recomputed (\"odom\" option is set)%s.\n",
|
printf("Odometry will be recomputed (\"odom\" option is set)%s.\n",
|
||||||
useInputOdometryAsGuess?" with input odometry guess (\"odom_guess_input\" option is set)":"");
|
useInputOdometryAsGuess?" with input odometry guess (\"odom_guess_input\" option is set)":"");
|
||||||
Parameters::parse(parameters, Parameters::kRtabmapDetectionRate(), rtabmapUpdateRate);
|
|
||||||
if(rtabmapUpdateRate!=0)
|
|
||||||
{
|
|
||||||
rtabmapUpdateRate = 1.0f/rtabmapUpdateRate;
|
|
||||||
}
|
|
||||||
odometry = Odometry::create(parameters);
|
odometry = Odometry::create(parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(!intermediateNodes && framesToSkip == 0 &&
|
||||||
|
(configParameters.find(Parameters::kRtabmapDetectionRate())!=configParameters.end() ||
|
||||||
|
customParameters.find(Parameters::kRtabmapDetectionRate())!=customParameters.end()))
|
||||||
|
{
|
||||||
|
printf("[Warning] Parameter %s is ignored because parameter %s=false.\n",
|
||||||
|
Parameters::kRtabmapDetectionRate().c_str(),
|
||||||
|
Parameters::kRtabmapCreateIntermediateNodes().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
printf("Reprocessing data of \"%s\"...\n", inputDatabasePath.c_str());
|
printf("Reprocessing data of \"%s\"...\n", inputDatabasePath.c_str());
|
||||||
std::map<std::string, float> globalMapStats;
|
std::map<std::string, float> globalMapStats;
|
||||||
@@ -1079,11 +1087,16 @@ int main(int argc, char * argv[])
|
|||||||
info.odomPose = pose;
|
info.odomPose = pose;
|
||||||
info.odomCovariance = odomCovariance;
|
info.odomCovariance = odomCovariance;
|
||||||
odomCovariance = cv::Mat();
|
odomCovariance = cv::Mat();
|
||||||
if(data.id() != -1)
|
|
||||||
lastUpdateStamp = data.stamp();
|
|
||||||
|
|
||||||
uInsert(globalMapStats, odomInfo.statistics(pose));
|
uInsert(globalMapStats, odomInfo.statistics(pose));
|
||||||
}
|
}
|
||||||
|
else if(framesToSkip==0 && intermediateNodes && lastUpdateStamp > 0.0 && (data.stamp() < lastUpdateStamp + rtabmapUpdateRate))
|
||||||
|
{
|
||||||
|
data.setId(-1); // intermediate node
|
||||||
|
}
|
||||||
|
|
||||||
|
if(data.id() != -1)
|
||||||
|
lastUpdateStamp = data.stamp();
|
||||||
|
|
||||||
UTimer iterationTime;
|
UTimer iterationTime;
|
||||||
std::string status;
|
std::string status;
|
||||||
@@ -1274,15 +1287,19 @@ int main(int argc, char * argv[])
|
|||||||
{
|
{
|
||||||
++loopIntra;
|
++loopIntra;
|
||||||
}
|
}
|
||||||
printf("Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms %s on %d [%d]\n", ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000), stats.loopClosureId() > 0?"Loop":"Prox", loopId, loopMapId);
|
printf("[%f] Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms %s on %d [%d]\n", data.stamp(), ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000), stats.loopClosureId() > 0?"Loop":"Prox", loopId, loopMapId);
|
||||||
}
|
}
|
||||||
else if(landmarkId != 0)
|
else if(landmarkId != 0)
|
||||||
{
|
{
|
||||||
printf("Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms Loop on landmark %d\n", ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000), landmarkId);
|
printf("[%f] Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms Loop on landmark %d\n", data.stamp(), ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000), landmarkId);
|
||||||
|
}
|
||||||
|
else if(data.id() == -1)
|
||||||
|
{
|
||||||
|
printf("[%f] Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms Intermediate node\n", data.stamp(), ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printf("Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms\n", ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000));
|
printf("[%f] Processed %d/%d nodes [id=%d map=%d graph=%d hyp=%d]... %dms\n", data.stamp(), ++processed, totalIds, refId, refMapId, int(stats.poses().size()), int(uValue(stats.data(), Statistics::kLoopHighest_hypothesis_value())*100.0f), int(iterationTime.ticks() * 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Here we accumulate statistics about distance from last localization
|
// Here we accumulate statistics about distance from last localization
|
||||||
|
|||||||
Reference in New Issue
Block a user