diff --git a/src/ceres_wrapper/ceres_manager.cpp b/src/ceres_wrapper/ceres_manager.cpp index b1b8fbbd3aa3d3e047a6e68445cf6281142b6e35..f2642f433a1166083151779fa20e9ca3a0cefc09 100644 --- a/src/ceres_wrapper/ceres_manager.cpp +++ b/src/ceres_wrapper/ceres_manager.cpp @@ -22,13 +22,13 @@ CeresManager::CeresManager(ProblemPtr _wolf_problem, const ceres::Solver::Option covariance_options.num_threads = 8; covariance_options.apply_loss_function = false; //covariance_options.null_space_rank = -1; - covariance_ = new ceres::Covariance(covariance_options); + covariance_ = wolf::make_unique<ceres::Covariance>(covariance_options); ceres::Problem::Options problem_options; problem_options.cost_function_ownership = ceres::DO_NOT_TAKE_OWNERSHIP; problem_options.loss_function_ownership = ceres::TAKE_OWNERSHIP; problem_options.local_parameterization_ownership = ceres::DO_NOT_TAKE_OWNERSHIP; - ceres_problem_ = new ceres::Problem(problem_options); + ceres_problem_ = wolf::make_unique<ceres::Problem>(problem_options); } CeresManager::~CeresManager() @@ -38,11 +38,6 @@ CeresManager::~CeresManager() while (!ctr_2_residual_idx_.empty()) removeConstraint(ctr_2_residual_idx_.begin()->first); // std::cout << "all residuals removed! \n"; - - delete covariance_; - //std::cout << "covariance deleted! \n"; - delete ceres_problem_; - //std::cout << "ceres problem deleted! \n"; } std::string CeresManager::solve(const unsigned int& _report_level) @@ -55,7 +50,7 @@ std::string CeresManager::solve(const unsigned int& _report_level) //std::cout << "After Update: Residual blocks: " << ceres_problem_->NumResidualBlocks() << " Parameter blocks: " << ceres_problem_->NumParameterBlocks() << std::endl; // run Ceres Solver - ceres::Solve(ceres_options_, ceres_problem_, &summary_); + ceres::Solve(ceres_options_, ceres_problem_.get(), &summary_); //std::cout << "solved" << std::endl; //return report @@ -190,7 +185,7 @@ void CeresManager::computeCovariances(CovarianceBlocksToBeComputed _blocks) //std::cout << "pairs... " << double_pairs.size() << std::endl; // COMPUTE DESIRED COVARIANCES - if (covariance_->Compute(double_pairs, ceres_problem_)) + if (covariance_->Compute(double_pairs, ceres_problem_.get())) { // STORE DESIRED COVARIANCES for (unsigned int i = 0; i < double_pairs.size(); i++) @@ -230,7 +225,7 @@ void CeresManager::computeCovariances(const StateBlockList& st_list) //std::cout << "pairs... " << double_pairs.size() << std::endl; // COMPUTE DESIRED COVARIANCES - if (covariance_->Compute(double_pairs, ceres_problem_)) + if (covariance_->Compute(double_pairs, ceres_problem_.get())) // STORE DESIRED COVARIANCES for (unsigned int i = 0; i < double_pairs.size(); i++) { diff --git a/src/ceres_wrapper/ceres_manager.h b/src/ceres_wrapper/ceres_manager.h index 0a41a4da218136457d5e99ecb092923df6b49bf7..d6e86bc136c8d9f3f93cc91504be73b4e00f0946 100644 --- a/src/ceres_wrapper/ceres_manager.h +++ b/src/ceres_wrapper/ceres_manager.h @@ -1,6 +1,8 @@ #ifndef CERES_MANAGER_H_ #define CERES_MANAGER_H_ +#include "../make_unique.h" + //Ceres includes #include "ceres/jet.h" #include "ceres/ceres.h" @@ -27,12 +29,14 @@ WOLF_PTR_TYPEDEFS(CeresManager); class CeresManager : public SolverManager { protected: + std::map<ConstraintBasePtr, ceres::ResidualBlockId> ctr_2_residual_idx_; std::map<ConstraintBasePtr, ceres::CostFunctionPtr> ctr_2_costfunction_; - ceres::Problem* ceres_problem_; + ceres::Solver::Options ceres_options_; - ceres::Covariance* covariance_; ceres::Solver::Summary summary_; + std::unique_ptr<ceres::Problem> ceres_problem_; + std::unique_ptr<ceres::Covariance> covariance_; public: CeresManager(ProblemPtr _wolf_problem, const ceres::Solver::Options& _ceres_options = ceres::Solver::Options());