From 3f0bb0eec5ba8a8c7c55d258483f015c044e7afa Mon Sep 17 00:00:00 2001 From: sotnik-github Date: Wed, 6 Jun 2018 15:38:10 +0200 Subject: [PATCH] Fixing 846 without tests. (#1183) Fixing "Optimizing: -nan%... #846" https://github.com/googlecartographer/cartographer/issues/846. The issue was triggered in a multithreaded execution, when all nodes were processed, but the working queue was still non empty (having other kind of jobs). Unfortunately I failed to reproduce the bug in tests, so no new tests were added. --- .../mapping/internal/2d/pose_graph_2d.cc | 19 +++++++++++-------- .../mapping/internal/3d/pose_graph_3d.cc | 19 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/cartographer/mapping/internal/2d/pose_graph_2d.cc b/cartographer/mapping/internal/2d/pose_graph_2d.cc index 49d0c0c..23d16a0 100644 --- a/cartographer/mapping/internal/2d/pose_graph_2d.cc +++ b/cartographer/mapping/internal/2d/pose_graph_2d.cc @@ -397,14 +397,17 @@ void PoseGraph2D::WaitForAllComputations() { !work_queue_); }, common::FromSeconds(1.))) { - std::ostringstream progress_info; - progress_info << "Optimizing: " << std::fixed << std::setprecision(1) - << 100. * - (constraint_builder_.GetNumFinishedNodes() - - num_finished_nodes_at_start) / - (num_trajectory_nodes_ - num_finished_nodes_at_start) - << "%..."; - std::cout << "\r\x1b[K" << progress_info.str() << std::flush; + // Log progress on nodes only when we are actually processing nodes. + if (num_trajectory_nodes_ != num_finished_nodes_at_start) { + std::ostringstream progress_info; + progress_info << "Optimizing: " << std::fixed << std::setprecision(1) + << 100. * + (constraint_builder_.GetNumFinishedNodes() - + num_finished_nodes_at_start) / + (num_trajectory_nodes_ - num_finished_nodes_at_start) + << "%..."; + std::cout << "\r\x1b[K" << progress_info.str() << std::flush; + } } std::cout << "\r\x1b[KOptimizing: Done. " << std::endl; constraint_builder_.WhenDone( diff --git a/cartographer/mapping/internal/3d/pose_graph_3d.cc b/cartographer/mapping/internal/3d/pose_graph_3d.cc index a2db4e7..99fb6b5 100644 --- a/cartographer/mapping/internal/3d/pose_graph_3d.cc +++ b/cartographer/mapping/internal/3d/pose_graph_3d.cc @@ -412,14 +412,17 @@ void PoseGraph3D::WaitForAllComputations() { !work_queue_); }, common::FromSeconds(1.))) { - std::ostringstream progress_info; - progress_info << "Optimizing: " << std::fixed << std::setprecision(1) - << 100. * - (constraint_builder_.GetNumFinishedNodes() - - num_finished_nodes_at_start) / - (num_trajectory_nodes_ - num_finished_nodes_at_start) - << "%..."; - std::cout << "\r\x1b[K" << progress_info.str() << std::flush; + // Log progress on nodes only when we are actually processing nodes. + if (num_trajectory_nodes_ != num_finished_nodes_at_start) { + std::ostringstream progress_info; + progress_info << "Optimizing: " << std::fixed << std::setprecision(1) + << 100. * + (constraint_builder_.GetNumFinishedNodes() - + num_finished_nodes_at_start) / + (num_trajectory_nodes_ - num_finished_nodes_at_start) + << "%..."; + std::cout << "\r\x1b[K" << progress_info.str() << std::flush; + } } std::cout << "\r\x1b[KOptimizing: Done. " << std::endl; constraint_builder_.WhenDone(