From 577976ed07511c4e52571f702d33f7a997566391 Mon Sep 17 00:00:00 2001 From: Joan Sola <jsola@iri.upc.edu> Date: Mon, 14 Jan 2019 15:16:10 +0100 Subject: [PATCH] Add getters for some results in solver_manager --- src/ceres_wrapper/ceres_manager.cpp | 20 ++++++++++++++++++++ src/ceres_wrapper/ceres_manager.h | 8 ++++++++ src/solver/solver_manager.h | 8 ++++++++ src/test/gtest_solver_manager.cpp | 8 ++++++++ 4 files changed, 44 insertions(+) diff --git a/src/ceres_wrapper/ceres_manager.cpp b/src/ceres_wrapper/ceres_manager.cpp index bbd383c66..26babf9af 100644 --- a/src/ceres_wrapper/ceres_manager.cpp +++ b/src/ceres_wrapper/ceres_manager.cpp @@ -351,6 +351,26 @@ void CeresManager::updateStateBlockLocalParametrization(const StateBlockPtr& sta addConstraint(ctr); } +bool CeresManager::hasConverged() +{ + return summary_.termination_type == ceres::CONVERGENCE; +} + +SizeStd CeresManager::iterations() +{ + return summary_.iterations.size(); +} + +Scalar CeresManager::initialCost() +{ + return Scalar(summary_.initial_cost); +} + +Scalar CeresManager::finalCost() +{ + return Scalar(summary_.final_cost); +} + ceres::CostFunctionPtr CeresManager::createCostFunction(const ConstraintBasePtr& _ctr_ptr) { assert(_ctr_ptr != nullptr); diff --git a/src/ceres_wrapper/ceres_manager.h b/src/ceres_wrapper/ceres_manager.h index ebc8b04e9..efd9861bf 100644 --- a/src/ceres_wrapper/ceres_manager.h +++ b/src/ceres_wrapper/ceres_manager.h @@ -53,6 +53,14 @@ class CeresManager : public SolverManager virtual void computeCovariances(const StateBlockList& st_list) override; + virtual bool hasConverged(); + + virtual SizeStd iterations(); + + virtual Scalar initialCost(); + + virtual Scalar finalCost(); + ceres::Solver::Options& getSolverOptions(); void check(); diff --git a/src/solver/solver_manager.h b/src/solver/solver_manager.h index 5416067ac..9f1189495 100644 --- a/src/solver/solver_manager.h +++ b/src/solver/solver_manager.h @@ -55,6 +55,14 @@ public: virtual void computeCovariances(const StateBlockList& st_list) = 0; + virtual bool hasConverged() = 0; + + virtual SizeStd iterations() = 0; + + virtual Scalar initialCost() = 0; + + virtual Scalar finalCost() = 0; + virtual void update(); ProblemPtr getProblemPtr(); diff --git a/src/test/gtest_solver_manager.cpp b/src/test/gtest_solver_manager.cpp index effdfc140..62bc03454 100644 --- a/src/test/gtest_solver_manager.cpp +++ b/src/test/gtest_solver_manager.cpp @@ -63,6 +63,14 @@ class SolverManagerWrapper : public SolverManager virtual void computeCovariances(const CovarianceBlocksToBeComputed blocks){}; virtual void computeCovariances(const StateBlockList& st_list){}; + // The following are dummy implementations + bool hasConverged() { return true; } + SizeStd iterations() { return 1; } + Scalar initialCost() { return Scalar(1); } + Scalar finalCost() { return Scalar(0); } + + + protected: virtual std::string solveImpl(const ReportVerbosity report_level){ return std::string("");}; -- GitLab