g2o
Toggle main menu visibility
Loading...
Searching...
No Matches
g2o
solvers
csparse
solver_csparse.cpp
Go to the documentation of this file.
1
// g2o - General Graph Optimization
2
// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3
//
4
// g2o is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU Lesser General Public License as published
6
// by the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8
//
9
// g2o is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
// GNU Lesser General Public License for more details.
13
//
14
// You should have received a copy of the GNU Lesser General Public License
15
// along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17
#include "
g2o/core/block_solver.h
"
18
#include "
g2o/core/optimization_algorithm_dogleg.h
"
19
#include "
g2o/core/optimization_algorithm_factory.h
"
20
#include "
g2o/core/optimization_algorithm_gauss_newton.h
"
21
#include "
g2o/core/optimization_algorithm_levenberg.h
"
22
#include "
g2o/core/solver.h
"
23
#include "
g2o/core/sparse_optimizer.h
"
24
#include "
g2o/stuff/logger.h
"
25
#include "
g2o/stuff/macros.h
"
26
#include "
linear_solver_csparse.h
"
27
28
using namespace
std
;
29
30
namespace
g2o
{
31
32
namespace
{
33
template
<
int
p,
int
l,
bool
blockorder>
34
std::unique_ptr<BlockSolverBase> AllocateSolver() {
35
G2O_DEBUG
(
"Using CSparse poseDim {} landMarkDim {} blockordering {}"
, p, l,
36
blockorder);
37
auto
linearSolver = std::make_unique<
38
LinearSolverCSparse<typename BlockSolverPL<p, l>::PoseMatrixType
>>();
39
linearSolver->
setBlockOrdering
(blockorder);
40
return
std::make_unique<BlockSolverPL<p, l>>(std::move(linearSolver));
41
}
42
}
// namespace
43
47
static
OptimizationAlgorithm
*
createSolver
(
const
std::string& fullSolverName) {
48
static
const
std::map<std::string,
49
std::function<std::unique_ptr<BlockSolverBase>()>>
50
solver_factories{
51
{
"var_csparse"
, &AllocateSolver<-1, -1,
true
>},
52
{
"fix3_2_csparse"
, &AllocateSolver<3, 2, true>},
53
{
"fix6_3_csparse"
, &AllocateSolver<6, 3, true>},
54
{
"fix7_3_csparse"
, &AllocateSolver<7, 3, true>},
55
{
"fix3_2_scalar_csparse"
, &AllocateSolver<3, 2, false>},
56
{
"fix6_3_scalar_csparse"
, &AllocateSolver<6, 3, false>},
57
{
"fix7_3_scalar_csparse"
, &AllocateSolver<7, 3, false>},
58
};
59
60
string
solverName = fullSolverName.substr(3);
61
auto
solverf = solver_factories.find(solverName);
62
if
(solverf == solver_factories.end())
return
nullptr
;
63
64
string
methodName = fullSolverName.substr(0, 2);
65
66
if
(methodName ==
"gn"
) {
67
return
new
OptimizationAlgorithmGaussNewton
(solverf->second());
68
}
else
if
(methodName ==
"lm"
) {
69
return
new
OptimizationAlgorithmLevenberg
(solverf->second());
70
}
else
if
(methodName ==
"dl"
) {
71
return
new
OptimizationAlgorithmDogleg
(solverf->second());
72
}
73
74
return
nullptr
;
75
}
76
77
class
CSparseSolverCreator
:
public
AbstractOptimizationAlgorithmCreator
{
78
public
:
79
explicit
CSparseSolverCreator
(
const
OptimizationAlgorithmProperty
& p)
80
:
AbstractOptimizationAlgorithmCreator
(p) {}
81
virtual
OptimizationAlgorithm
*
construct
() {
82
return
createSolver
(
property
().name);
83
}
84
};
85
86
// clang-format off
87
G2O_REGISTER_OPTIMIZATION_LIBRARY
(
csparse
);
88
89
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(gn_var_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"gn_var_csparse"
,
"Gauss-Newton: Cholesky solver using CSparse (variable blocksize)"
,
"CSparse"
,
false
, Eigen::Dynamic, Eigen::Dynamic)));
90
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(gn_fix3_2_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"gn_fix3_2_csparse"
,
"Gauss-Newton: Cholesky solver using CSparse (fixed blocksize)"
,
"CSparse"
,
true
, 3, 2)));
91
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(gn_fix6_3_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"gn_fix6_3_csparse"
,
"Gauss-Newton: Cholesky solver using CSparse (fixed blocksize)"
,
"CSparse"
,
true
, 6, 3)));
92
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(gn_fix7_3_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"gn_fix7_3_csparse"
,
"Gauss-Newton: Cholesky solver using CSparse (fixed blocksize)"
,
"CSparse"
,
true
, 7, 3)));
93
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(lm_var_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"lm_var_csparse"
,
"Levenberg: Cholesky solver using CSparse (variable blocksize)"
,
"CSparse"
,
false
, Eigen::Dynamic, Eigen::Dynamic)));
94
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(lm_fix3_2_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"lm_fix3_2_csparse"
,
"Levenberg: Cholesky solver using CSparse (fixed blocksize)"
,
"CSparse"
,
true
, 3, 2)));
95
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(lm_fix6_3_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"lm_fix6_3_csparse"
,
"Levenberg: Cholesky solver using CSparse (fixed blocksize)"
,
"CSparse"
,
true
, 6, 3)));
96
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(lm_fix7_3_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"lm_fix7_3_csparse"
,
"Levenberg: Cholesky solver using CSparse (fixed blocksize)"
,
"CSparse"
,
true
, 7, 3)));
97
98
G2O_REGISTER_OPTIMIZATION_ALGORITHM
(dl_var_csparse,
new
CSparseSolverCreator
(
OptimizationAlgorithmProperty
(
"dl_var_csparse"
,
"Dogleg: Cholesky solver using CSparse (variable blocksize)"
,
"CSparse"
,
false
, Eigen::Dynamic, Eigen::Dynamic)));
99
// clang-format on
100
101
}
// namespace g2o
block_solver.h
g2o::AbstractOptimizationAlgorithmCreator::property
const OptimizationAlgorithmProperty & property() const
return the properties of the solver
Definition
optimization_algorithm_factory.h:60
g2o::AbstractOptimizationAlgorithmCreator::AbstractOptimizationAlgorithmCreator
AbstractOptimizationAlgorithmCreator(const OptimizationAlgorithmProperty &p)
Definition
optimization_algorithm_factory.cpp:39
g2o::CSparseSolverCreator
Definition
solver_csparse.cpp:77
g2o::CSparseSolverCreator::CSparseSolverCreator
CSparseSolverCreator(const OptimizationAlgorithmProperty &p)
Definition
solver_csparse.cpp:79
g2o::CSparseSolverCreator::construct
virtual OptimizationAlgorithm * construct()
allocate a solver operating on optimizer, re-implement for your creator
Definition
solver_csparse.cpp:81
g2o::LinearSolverCCS::setBlockOrdering
void setBlockOrdering(bool blockOrdering)
Definition
linear_solver.h:177
g2o::LinearSolverCSparse
linear solver which uses CSparse
Definition
linear_solver_csparse.h:47
g2o::OptimizationAlgorithmDogleg
Implementation of Powell's Dogleg Algorithm.
Definition
optimization_algorithm_dogleg.h:43
g2o::OptimizationAlgorithmGaussNewton
Implementation of the Gauss Newton Algorithm.
Definition
optimization_algorithm_gauss_newton.h:41
g2o::OptimizationAlgorithmLevenberg
Implementation of the Levenberg Algorithm.
Definition
optimization_algorithm_levenberg.h:41
g2o::OptimizationAlgorithm
Generic interface for a non-linear solver operating on a graph.
Definition
optimization_algorithm.h:46
linear_solver_csparse.h
G2O_DEBUG
#define G2O_DEBUG(...)
logger.h
macros.h
g2o::csparse
Definition
csparse_wrapper.cpp:39
g2o
Definition
dl_wrapper.cpp:55
g2o::createSolver
static OptimizationAlgorithm * createSolver(const std::string &solverName)
Definition
graph_optimizer_sparse_incremental.cpp:471
std
Definition
jet.h:876
optimization_algorithm_dogleg.h
optimization_algorithm_factory.h
G2O_REGISTER_OPTIMIZATION_LIBRARY
#define G2O_REGISTER_OPTIMIZATION_LIBRARY(libraryname)
Definition
optimization_algorithm_factory.h:160
G2O_REGISTER_OPTIMIZATION_ALGORITHM
#define G2O_REGISTER_OPTIMIZATION_ALGORITHM(optimizername, instance)
Definition
optimization_algorithm_factory.h:181
optimization_algorithm_gauss_newton.h
optimization_algorithm_levenberg.h
solver.h
sparse_optimizer.h
g2o::OptimizationAlgorithmProperty
describe the properties of a solver
Definition
optimization_algorithm_property.h:39
Generated on
for g2o by
1.17.0