Skip to content
Snippets Groups Projects
Commit 5a96b86a authored by Joan Vallvé Navarro's avatar Joan Vallvé Navarro
Browse files

working

parent 245827ac
No related branches found
No related tags found
2 merge requests!427Resolve "Wolf license",!426Resolve "SolverCeres: more parameters"
Pipeline #7149 failed
...@@ -66,12 +66,12 @@ struct ParamsCeres : public ParamsSolver ...@@ -66,12 +66,12 @@ struct ParamsCeres : public ParamsSolver
else if (minimizer == "LBFGS" or minimizer == "lbfgs") else if (minimizer == "LBFGS" or minimizer == "lbfgs")
{ {
solver_options.minimizer_type = ceres::LINE_SEARCH; solver_options.minimizer_type = ceres::LINE_SEARCH;
solver_options.line_search_direction_type == ceres::LBFGS; solver_options.line_search_direction_type = ceres::LBFGS;
} }
else if (minimizer == "BFGS" or minimizer == "bfgs") else if (minimizer == "BFGS" or minimizer == "bfgs")
{ {
solver_options.minimizer_type = ceres::LINE_SEARCH; solver_options.minimizer_type = ceres::LINE_SEARCH;
solver_options.line_search_direction_type == ceres::LBFGS; solver_options.line_search_direction_type = ceres::BFGS;
} }
else else
{ {
......
...@@ -38,7 +38,7 @@ static SolverManagerPtr create(const ProblemPtr& _problem, ...@@ -38,7 +38,7 @@ static SolverManagerPtr create(const ProblemPtr& _problem,
return std::make_shared<SolverClass>(_problem, params); \ return std::make_shared<SolverClass>(_problem, params); \
} \ } \
struct ParamsSolver; struct ParamsSolver;
/** /**
* \brief Solver manager for WOLF * \brief Solver manager for WOLF
...@@ -115,6 +115,8 @@ class SolverManager ...@@ -115,6 +115,8 @@ class SolverManager
*/ */
std::string solve(const ReportVerbosity report_level); std::string solve(const ReportVerbosity report_level);
virtual bool computeCovariances() final;
virtual bool computeCovariances(const CovarianceBlocksToBeComputed blocks) final; virtual bool computeCovariances(const CovarianceBlocksToBeComputed blocks) final;
virtual bool computeCovariances(const std::vector<StateBlockPtr>& st_list) final; virtual bool computeCovariances(const std::vector<StateBlockPtr>& st_list) final;
...@@ -140,8 +142,12 @@ class SolverManager ...@@ -140,8 +142,12 @@ class SolverManager
ProblemPtr getProblem(); ProblemPtr getProblem();
virtual ParamsSolverPtr getParams() const;
double getPeriod() const; double getPeriod() const;
double getCovPeriod() const;
ReportVerbosity getVerbosity() const; ReportVerbosity getVerbosity() const;
virtual bool isStateBlockRegistered(const StateBlockPtr& state_ptr) const final; virtual bool isStateBlockRegistered(const StateBlockPtr& state_ptr) const final;
...@@ -210,6 +216,9 @@ struct ParamsSolver: public ParamsBase ...@@ -210,6 +216,9 @@ struct ParamsSolver: public ParamsBase
std::string prefix = "solver/"; std::string prefix = "solver/";
double period = 0.0; double period = 0.0;
SolverManager::ReportVerbosity verbose = SolverManager::ReportVerbosity::QUIET; SolverManager::ReportVerbosity verbose = SolverManager::ReportVerbosity::QUIET;
bool compute_cov = false;
SolverManager::CovarianceBlocksToBeComputed cov_enum = SolverManager::CovarianceBlocksToBeComputed::ROBOT_LANDMARKS;
double cov_period = 1.0;
ParamsSolver() = default; ParamsSolver() = default;
ParamsSolver(std::string _unique_name, const ParamsServer& _server): ParamsSolver(std::string _unique_name, const ParamsServer& _server):
...@@ -217,10 +226,20 @@ struct ParamsSolver: public ParamsBase ...@@ -217,10 +226,20 @@ struct ParamsSolver: public ParamsBase
{ {
period = _server.getParam<double>(prefix + "period"); period = _server.getParam<double>(prefix + "period");
verbose = (SolverManager::ReportVerbosity)_server.getParam<int>(prefix + "verbose"); verbose = (SolverManager::ReportVerbosity)_server.getParam<int>(prefix + "verbose");
compute_cov = _server.getParam<bool>(prefix + "compute_cov");
if (compute_cov)
{
cov_enum = (SolverManager::CovarianceBlocksToBeComputed)_server.getParam<int>(prefix + "cov_enum");
cov_period = _server.getParam<double>(prefix + "cov_period");
}
} }
std::string print() const override std::string print() const override
{ {
return "period: " + std::to_string(period) + "\n"; return "period: " + std::to_string(period) + "\n" +
"verbose: " + std::to_string((int)verbose) + "\n" +
"compute_cov: " + std::to_string(compute_cov) + "\n" +
"cov_enum: " + std::to_string((int)cov_enum) + "\n" +
"cov_period: " + std::to_string(cov_period) + "\n";
} }
~ParamsSolver() override = default; ~ParamsSolver() override = default;
......
...@@ -185,6 +185,10 @@ std::string SolverManager::solve(const ReportVerbosity report_level) ...@@ -185,6 +185,10 @@ std::string SolverManager::solve(const ReportVerbosity report_level)
return report; return report;
} }
bool SolverManager::computeCovariances()
{
return computeCovariances(params_->cov_enum);
}
bool SolverManager::computeCovariances(const CovarianceBlocksToBeComputed blocks) bool SolverManager::computeCovariances(const CovarianceBlocksToBeComputed blocks)
{ {
...@@ -500,11 +504,21 @@ int SolverManager::numStateBlocksFloating() const ...@@ -500,11 +504,21 @@ int SolverManager::numStateBlocksFloating() const
return floating_state_blocks_.size(); return floating_state_blocks_.size();
} }
ParamsSolverPtr SolverManager::getParams() const
{
return params_;
}
double SolverManager::getPeriod() const double SolverManager::getPeriod() const
{ {
return params_->period; return params_->period;
} }
double SolverManager::getCovPeriod() const
{
return params_->cov_period;
}
bool SolverManager::check(std::string prefix) const bool SolverManager::check(std::string prefix) const
{ {
bool ok = true; bool ok = true;
......
...@@ -6,4 +6,8 @@ n_threads: 2 ...@@ -6,4 +6,8 @@ n_threads: 2
function_tolerance: 0.000001 function_tolerance: 0.000001
gradient_tolerance: 0.0000000001 gradient_tolerance: 0.0000000001
minimizer: "LEVENBERG_MARQUARDT" minimizer: "LEVENBERG_MARQUARDT"
use_nonmonotonic_steps: false use_nonmonotonic_steps: false # only for LEVENBERG_MARQUARDT and DOGLEG
\ No newline at end of file max_consecutive_nonmonotonic_steps: 5 # only if use_nonmonotonic_steps = true
compute_cov: true
cov_period: 1 #only if compute_cov
cov_enum: 2 #only if compute_cov
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment