From 3eed8d08bf79e0d2eaead9680a4ee304f2bbf93e Mon Sep 17 00:00:00 2001
From: joanvallve <jvallve@iri.upc.edu>
Date: Mon, 15 Jun 2020 15:33:16 +0200
Subject: [PATCH] iteration callback working

---
 .../ceres_wrapper/iteration_update_callback.h |  2 --
 include/core/ceres_wrapper/solver_ceres.h     | 33 ++++++++++++-------
 src/ceres_wrapper/solver_ceres.cpp            |  2 +-
 src/solver/solver_manager.cpp                 |  2 --
 4 files changed, 23 insertions(+), 16 deletions(-)

diff --git a/include/core/ceres_wrapper/iteration_update_callback.h b/include/core/ceres_wrapper/iteration_update_callback.h
index 7875cb7c1..bf847c227 100644
--- a/include/core/ceres_wrapper/iteration_update_callback.h
+++ b/include/core/ceres_wrapper/iteration_update_callback.h
@@ -28,8 +28,6 @@ class IterationUpdateCallback : public ceres::IterationCallback
             if (problem_->getStateBlockNotificationMapSize() != 0 or
                 problem_->getFactorNotificationMapSize() != 0)
             {
-                if (verbose_)
-                    std::cout << "Stopping solver to update the problem!\n";
                 WOLF_INFO_COND(verbose_, "Stopping solver to update the problem!");
                 return ceres::SOLVER_TERMINATE_SUCCESSFULLY;
             }
diff --git a/include/core/ceres_wrapper/solver_ceres.h b/include/core/ceres_wrapper/solver_ceres.h
index d3c6d17ac..424e858f1 100644
--- a/include/core/ceres_wrapper/solver_ceres.h
+++ b/include/core/ceres_wrapper/solver_ceres.h
@@ -22,16 +22,36 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsCeres);
 
 struct ParamsCeres : public ParamsSolver
 {
-    bool update_immediately;
+    bool update_immediately = false;
     ceres::Solver::Options solver_options;
     ceres::Problem::Options problem_options;
     ceres::Covariance::Options covariance_options;
 
     ParamsCeres() :
-        update_immediately(false),
+        ParamsSolver(),
         solver_options(),
         problem_options(),
         covariance_options()
+    {
+        loadHardcodedValues();
+    }
+
+    ParamsCeres(std::string _unique_name, const ParamsServer& _server) :
+        ParamsSolver(_unique_name, _server),
+        solver_options(),
+        problem_options(),
+        covariance_options()
+    {
+        loadHardcodedValues();
+
+        // stop solver whenever the problem is updated (via ceres::iterationCallback)
+        update_immediately                    = _server.getParam<bool>(prefix + "update_immediately");
+
+        // ceres solver options
+        solver_options.max_num_iterations      = _server.getParam<int>(prefix + "max_num_iterations");
+    }
+
+    void loadHardcodedValues()
     {
         problem_options.cost_function_ownership = ceres::DO_NOT_TAKE_OWNERSHIP;
         problem_options.loss_function_ownership = ceres::TAKE_OWNERSHIP;
@@ -49,15 +69,6 @@ struct ParamsCeres : public ParamsSolver
         covariance_options.apply_loss_function = false;
     }
 
-    ParamsCeres(std::string _unique_name, const ParamsServer& _server) :
-        ParamsCeres()
-    {
-        update_immediately                    = _server.getParam<bool>(prefix + "update_immediately");
-
-        // ceres solver options
-        solver_options.max_num_iterations      = _server.getParam<int>(prefix + "max_num_iterations");
-    }
-
     ~ParamsCeres() override = default;
 };
 
diff --git a/src/ceres_wrapper/solver_ceres.cpp b/src/ceres_wrapper/solver_ceres.cpp
index 1b6d5893f..c1b02b709 100644
--- a/src/ceres_wrapper/solver_ceres.cpp
+++ b/src/ceres_wrapper/solver_ceres.cpp
@@ -22,7 +22,7 @@ SolverCeres::SolverCeres(const ProblemPtr& _wolf_problem,
      : SolverManager(_wolf_problem, _params)
      , params_ceres_(_params)
 {
-    WOLF_INFO("GIVEN PARAMS constructor");
+    WOLF_INFO("GIVEN PARAMS constructor verbosity: ", (int)params_ceres_->verbose);
     covariance_ = wolf::make_unique<ceres::Covariance>(params_ceres_->covariance_options);
     ceres_problem_ = wolf::make_unique<ceres::Problem>(params_ceres_->problem_options);
 
diff --git a/src/solver/solver_manager.cpp b/src/solver/solver_manager.cpp
index 6aa6371d1..a0b6f028c 100644
--- a/src/solver/solver_manager.cpp
+++ b/src/solver/solver_manager.cpp
@@ -109,8 +109,6 @@ std::string SolverManager::solve()
 
 std::string SolverManager::solve(const ReportVerbosity report_level)
 {
-    WOLF_INFO_COND(report_level != SolverManager::ReportVerbosity::QUIET, "SOLVING...");
-
     // update problem
     update();
 
-- 
GitLab