Fixed DataRecorder UI asserting if data without images is received (in case of monocular or lidar-only recording). rtabmap-dataRecorder: added auto-close when end of stream is reached. rtabmap-reprocess: added ability to process images without odometry and to record localization poses with -p option in localizatiion mode.

This commit is contained in:
matlabbe
2025-05-11 18:37:35 -07:00
parent a3d4028faa
commit 5b368fb2f1
3 changed files with 50 additions and 9 deletions
+14 -7
View File
@@ -1024,7 +1024,7 @@ int main(int argc, char * argv[])
UTimer iterationTime;
std::string status;
if(!odometryIgnored && info.odomPose.isNull())
if(!odometryIgnored && info.odomPose.isNull() && incrementalMemory)
{
printf("Skipping node %d as it doesn't have odometry pose set.\n", data.id());
}
@@ -1235,15 +1235,22 @@ int main(int argc, char * argv[])
localizationAngleVariations.push_back(stats.data().at(Statistics::kLoopOdom_correction_angle()));
}
if(exportPoses && !info.odomPose.isNull())
if(exportPoses)
{
if(!odomTrajectoryPoses.empty())
if(!info.odomPose.isNull())
{
int previousId = odomTrajectoryPoses.rbegin()->first;
odomTrajectoryLinks.insert(std::make_pair(previousId, Link(previousId, refId, Link::kNeighbor, odomTrajectoryPoses.rbegin()->second.inverse()*info.odomPose, info.odomCovariance)));
if(!odomTrajectoryPoses.empty())
{
int previousId = odomTrajectoryPoses.rbegin()->first;
odomTrajectoryLinks.insert(std::make_pair(previousId, Link(previousId, refId, Link::kNeighbor, odomTrajectoryPoses.rbegin()->second.inverse()*info.odomPose, info.odomCovariance)));
}
odomTrajectoryPoses.insert(std::make_pair(refId, info.odomPose));
localizationPoses.insert(std::make_pair(refId, stats.mapCorrection()*info.odomPose));
}
else
{
localizationPoses.insert(std::make_pair(refId, rtabmap.getLastLocalizationPose()));
}
odomTrajectoryPoses.insert(std::make_pair(refId, info.odomPose));
localizationPoses.insert(std::make_pair(refId, stats.mapCorrection()*info.odomPose));
}
}