From ebe2c029753ed3b89a7500e6af7ee9bb0f621163 Mon Sep 17 00:00:00 2001 From: joanvallve <jvallve@iri.upc.edu> Date: Sat, 19 Sep 2020 13:11:59 +0200 Subject: [PATCH] implemented ctest ok --- include/core/ceres_wrapper/solver_ceres.h | 4 +-- include/core/solver/solver_manager.h | 4 +-- src/ceres_wrapper/solver_ceres.cpp | 31 ++++++++++++++--------- test/dummy/solver_manager_dummy.h | 4 +-- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/include/core/ceres_wrapper/solver_ceres.h b/include/core/ceres_wrapper/solver_ceres.h index a32f91a7f..210a1aad9 100644 --- a/include/core/ceres_wrapper/solver_ceres.h +++ b/include/core/ceres_wrapper/solver_ceres.h @@ -103,10 +103,10 @@ class SolverCeres : public SolverManager std::unique_ptr<ceres::Problem>& getCeresProblem(); - void computeCovariances(CovarianceBlocksToBeComputed _blocks + bool computeCovariances(CovarianceBlocksToBeComputed _blocks = CovarianceBlocksToBeComputed::ROBOT_LANDMARKS) override; - void computeCovariances(const std::vector<StateBlockPtr>& st_list) override; + bool computeCovariances(const std::vector<StateBlockPtr>& st_list) override; bool hasConverged() override; diff --git a/include/core/solver/solver_manager.h b/include/core/solver/solver_manager.h index bdd8a37aa..3f1ae77d7 100644 --- a/include/core/solver/solver_manager.h +++ b/include/core/solver/solver_manager.h @@ -96,9 +96,9 @@ class SolverManager */ std::string solve(const ReportVerbosity report_level); - virtual void computeCovariances(const CovarianceBlocksToBeComputed blocks) = 0; + virtual bool computeCovariances(const CovarianceBlocksToBeComputed blocks) = 0; - virtual void computeCovariances(const std::vector<StateBlockPtr>& st_list) = 0; + virtual bool computeCovariances(const std::vector<StateBlockPtr>& st_list) = 0; virtual bool hasConverged() = 0; diff --git a/src/ceres_wrapper/solver_ceres.cpp b/src/ceres_wrapper/solver_ceres.cpp index 0f058b107..28ef3943c 100644 --- a/src/ceres_wrapper/solver_ceres.cpp +++ b/src/ceres_wrapper/solver_ceres.cpp @@ -82,14 +82,11 @@ std::string SolverCeres::solveDerived(const ReportVerbosity report_level) return report; } -void SolverCeres::computeCovariances(const CovarianceBlocksToBeComputed _blocks) +bool SolverCeres::computeCovariances(const CovarianceBlocksToBeComputed _blocks) { // update problem update(); - // CLEAR STORED COVARIANCE BLOCKS IN WOLF PROBLEM - wolf_problem_->clearCovariance(); - // CREATE DESIRED COVARIANCES LIST std::vector<std::pair<StateBlockPtr, StateBlockPtr>> state_block_pairs; std::vector<std::pair<const double*, const double*>> double_pairs; @@ -214,6 +211,9 @@ void SolverCeres::computeCovariances(const CovarianceBlocksToBeComputed _blocks) // COMPUTE DESIRED COVARIANCES if (covariance_->Compute(double_pairs, ceres_problem_.get())) { + // CLEAR STORED COVARIANCE BLOCKS IN WOLF PROBLEM + wolf_problem_->clearCovariance(); + // STORE DESIRED COVARIANCES for (unsigned int i = 0; i < double_pairs.size(); i++) { @@ -222,20 +222,20 @@ void SolverCeres::computeCovariances(const CovarianceBlocksToBeComputed _blocks) wolf_problem_->addCovarianceBlock(state_block_pairs[i].first, state_block_pairs[i].second, cov); // std::cout << "covariance got switch: " << std::endl << cov << std::endl; } + return true; } - else - std::cout << "WARNING: Couldn't compute covariances!" << std::endl; + + WOLF_WARN("SolverCeres::computeCovariances: Couldn't compute covariances!"); + return false; } -void SolverCeres::computeCovariances(const std::vector<StateBlockPtr>& st_list) + +bool SolverCeres::computeCovariances(const std::vector<StateBlockPtr>& st_list) { //std::cout << "SolverCeres: computing covariances..." << std::endl; // update problem update(); - // CLEAR STORED COVARIANCE BLOCKS IN WOLF PROBLEM - wolf_problem_->clearCovariance(); - // CREATE DESIRED COVARIANCES LIST std::vector<std::pair<StateBlockPtr, StateBlockPtr>> state_block_pairs; std::vector<std::pair<const double*, const double*>> double_pairs; @@ -260,6 +260,10 @@ void SolverCeres::computeCovariances(const std::vector<StateBlockPtr>& st_list) // COMPUTE DESIRED COVARIANCES if (covariance_->Compute(double_pairs, ceres_problem_.get())) + { + // CLEAR STORED COVARIANCE BLOCKS IN WOLF PROBLEM + wolf_problem_->clearCovariance(); + // STORE DESIRED COVARIANCES for (unsigned int i = 0; i < double_pairs.size(); i++) { @@ -268,8 +272,11 @@ void SolverCeres::computeCovariances(const std::vector<StateBlockPtr>& st_list) wolf_problem_->addCovarianceBlock(state_block_pairs[i].first, state_block_pairs[i].second, cov); // std::cout << "covariance got from st_list: " << std::endl << cov << std::endl; } - else - std::cout << "WARNING: Couldn't compute covariances!" << std::endl; + return true; + } + + WOLF_WARN("SolverCeres::computeCovariances: Couldn't compute covariances!"); + return false; } void SolverCeres::addFactorDerived(const FactorBasePtr& fac_ptr) diff --git a/test/dummy/solver_manager_dummy.h b/test/dummy/solver_manager_dummy.h index 5faef11f3..885f955d2 100644 --- a/test/dummy/solver_manager_dummy.h +++ b/test/dummy/solver_manager_dummy.h @@ -51,8 +51,8 @@ class SolverManagerDummy : public SolverManager return factors_derived_.size(); }; - void computeCovariances(const CovarianceBlocksToBeComputed blocks) override {}; - void computeCovariances(const std::vector<StateBlockPtr>& st_list) override {}; + bool computeCovariances(const CovarianceBlocksToBeComputed blocks) override {return false;}; + bool computeCovariances(const std::vector<StateBlockPtr>& st_list) override {return false;}; // The following are dummy implementations -- GitLab