g2o
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
g2o::Star Struct Reference

#include <star.h>

Collaboration diagram for g2o::Star:
Collaboration graph
[legend]

Public Member Functions

 Star (int level, SparseOptimizer *optimizer)
 
bool labelStarEdges (int iterations, EdgeLabeler *labeler)
 
int level () const
 returns the level of the lower edges in the star
 
SparseOptimizeroptimizer ()
 returns the optimizer
 
HyperGraph::EdgeSetlowLevelEdges ()
 low level edge set
 
HyperGraph::EdgeSetstarEdges ()
 high level edge set
 
HyperGraph::EdgeSetstarFrontierEdges ()
 edges in the high level that lead to some node owned by a different star
 
HyperGraph::VertexSetgauge ()
 set of nodes to keep fixed in the optimization
 
HyperGraph::VertexSetlowLevelVertices ()
 set of all vertices in the low level
 

Public Attributes

int _level
 level of the star
 
SparseOptimizer_optimizer
 optimizer
 
HyperGraph::EdgeSet _lowLevelEdges
 edges in the lower level
 
HyperGraph::EdgeSet _starEdges
 edges in the star
 
HyperGraph::EdgeSet _starFrontierEdges
 edges in the star that lead to some other star
 
HyperGraph::VertexSet _gauge
 vertices that are fixed (center of the star)
 
HyperGraph::VertexSet _lowLevelVertices
 vertices that are fixed (center of the star)
 

Detailed Description

Class that represents a subgraph in the hierarchical optimization. The subgraph is consisting of

Additionally, a star provides a function to compute the parameters for each of the edges in the higher level, based on the actual configuration of the state variables. It does so by using an EdgeLabeler class.

Definition at line 54 of file star.h.

Constructor & Destructor Documentation

◆ Star()

g2o::Star::Star ( int  level,
SparseOptimizer optimizer 
)

constructs a star at level l in the graph of the sparse optimizer passed as argument

Parameters
levelthe (higher) level of the star
optimizerthe optimizer

Definition at line 34 of file star.cpp.

int _level
level of the star
Definition star.h:83
SparseOptimizer * optimizer()
returns the optimizer
Definition star.h:70
SparseOptimizer * _optimizer
optimizer
Definition star.h:85
int level() const
returns the level of the lower edges in the star
Definition star.h:68

Member Function Documentation

◆ gauge()

HyperGraph::VertexSet & g2o::Star::gauge ( )
inline

set of nodes to keep fixed in the optimization

Definition at line 78 of file star.h.

78{ return _gauge; }
HyperGraph::VertexSet _gauge
vertices that are fixed (center of the star)
Definition star.h:93

References _gauge.

Referenced by g2o::computeBorder(), g2o::computeSimpleStars(), and main().

◆ labelStarEdges()

bool g2o::Star::labelStarEdges ( int  iterations,
EdgeLabeler labeler 
)

labels the edges in the star by first optimizing the low level edges, then by calling the labelEdge of the labeler.

Parameters
iterationsthe number of iterations of the optimizer
labelerthe labeler

Definition at line 37 of file star.cpp.

37 {
38 // mark all vertices in the lowLevelEdges as floating
39 bool ok = true;
40 std::set<OptimizableGraph::Vertex*> vset;
41 for (HyperGraph::EdgeSet::iterator it = _lowLevelEdges.begin();
42 it != _lowLevelEdges.end(); ++it) {
43 HyperGraph::Edge* e = *it;
44 for (size_t i = 0; i < e->vertices().size(); i++) {
45 OptimizableGraph::Vertex* v = (OptimizableGraph::Vertex*)e->vertices()[i];
46 v->setFixed(false);
47 vset.insert(v);
48 }
49 }
50 for (std::set<OptimizableGraph::Vertex*>::iterator it = vset.begin();
51 it != vset.end(); ++it) {
52 OptimizableGraph::Vertex* v = *it;
53 v->push();
54 }
55
56 // fix all vertices in the gauge
57 // cerr << "fixing gauge: ";
58 for (HyperGraph::VertexSet::iterator it = _gauge.begin(); it != _gauge.end();
59 ++it) {
60 OptimizableGraph::Vertex* v = (OptimizableGraph::Vertex*)*it;
61 // cerr << v->id() << " ";
62 v->setFixed(true);
63 }
64 // cerr << endl;
65 if (iterations > 0) {
68 int result = _optimizer->optimize(iterations);
69 if (result < 1) {
70 cerr << "Vertices num: " << _optimizer->activeVertices().size()
71 << "ids: ";
72 for (size_t i = 0; i < _optimizer->indexMapping().size(); i++) {
73 cerr << _optimizer->indexMapping()[i]->id() << " ";
74 }
75 cerr << endl;
76 cerr << "!!! optimization failure" << endl;
77 cerr << "star size=" << _lowLevelEdges.size() << endl;
78 cerr << "gauge: ";
79 for (HyperGraph::VertexSet::iterator it = _gauge.begin();
80 it != _gauge.end(); ++it) {
81 OptimizableGraph::Vertex* v = (OptimizableGraph::Vertex*)*it;
82 cerr << "[" << v->id() << " " << v->hessianIndex() << "] ";
83 }
84 cerr << endl;
85 ok = false;
86 }
87 } else {
89 // cerr << "guess" << endl;
90 // optimizer()->computeInitialGuess();
91 // cerr << "solver init" << endl;
92 optimizer()->solver()->init();
93 // cerr << "structure" << endl;
94 OptimizationAlgorithmWithHessian* solverWithHessian =
95 dynamic_cast<OptimizationAlgorithmWithHessian*>(optimizer()->solver());
96 if (!solverWithHessian->buildLinearStructure())
97 cerr << "FATAL: failure while building linear structure" << endl;
98 // cerr << "errors" << endl;
100 // cerr << "system" << endl;
101 solverWithHessian->updateLinearSystem();
102 }
103
104 std::set<OptimizableGraph::Edge*> star;
105 for (HyperGraph::EdgeSet::iterator it = _starEdges.begin();
106 it != _starEdges.end(); ++it) {
107 star.insert((OptimizableGraph::Edge*)*it);
108 }
109 if (ok) {
110 int result = labeler->labelEdges(star);
111 if (result < 0) ok = false;
112 }
113 // release all vertices in the gauge
114 for (std::set<OptimizableGraph::Vertex*>::iterator it = vset.begin();
115 it != vset.end(); ++it) {
116 OptimizableGraph::Vertex* v = *it;
117 v->pop();
118 }
119 for (HyperGraph::VertexSet::iterator it = _gauge.begin(); it != _gauge.end();
120 ++it) {
121 OptimizableGraph::Vertex* v = (OptimizableGraph::Vertex*)*it;
122 v->setFixed(false);
123 }
124
125 return ok;
126}
virtual bool init(bool online=false)=0
int optimize(int iterations, bool online=false)
virtual bool initializeOptimization(HyperGraph::EdgeSet &eset)
virtual void computeInitialGuess()
const VertexContainer & indexMapping() const
the index mapping of the vertices
const VertexContainer & activeVertices() const
the vertices active in the current optimization
OptimizationAlgorithm * solver()
HyperGraph::EdgeSet _starEdges
edges in the star
Definition star.h:89
HyperGraph::EdgeSet _lowLevelEdges
edges in the lower level
Definition star.h:87

References _gauge, _lowLevelEdges, _optimizer, _starEdges, g2o::SparseOptimizer::activeVertices(), g2o::OptimizationAlgorithmWithHessian::buildLinearStructure(), g2o::SparseOptimizer::computeActiveErrors(), g2o::SparseOptimizer::computeInitialGuess(), g2o::OptimizableGraph::Vertex::hessianIndex(), g2o::HyperGraph::Vertex::id(), g2o::SparseOptimizer::indexMapping(), g2o::OptimizationAlgorithm::init(), g2o::SparseOptimizer::initializeOptimization(), g2o::EdgeLabeler::labelEdges(), g2o::SparseOptimizer::optimize(), optimizer(), g2o::OptimizableGraph::Vertex::pop(), g2o::OptimizableGraph::Vertex::push(), g2o::OptimizableGraph::Vertex::setFixed(), g2o::SparseOptimizer::solver(), g2o::OptimizationAlgorithmWithHessian::updateLinearSystem(), and g2o::HyperGraph::Edge::vertices().

Referenced by g2o::assignHierarchicalEdges(), and g2o::computeSimpleStars().

◆ level()

int g2o::Star::level ( ) const
inline

returns the level of the lower edges in the star

Definition at line 68 of file star.h.

68{ return _level; };

References _level.

◆ lowLevelEdges()

HyperGraph::EdgeSet & g2o::Star::lowLevelEdges ( )
inline

low level edge set

Definition at line 72 of file star.h.

72{ return _lowLevelEdges; }

References _lowLevelEdges.

Referenced by g2o::assignHierarchicalEdges(), g2o::computeSimpleStars(), and g2o::constructEdgeStarMap().

◆ lowLevelVertices()

HyperGraph::VertexSet & g2o::Star::lowLevelVertices ( )
inline

set of all vertices in the low level

Definition at line 80 of file star.h.

80{ return _lowLevelVertices; }
HyperGraph::VertexSet _lowLevelVertices
vertices that are fixed (center of the star)
Definition star.h:95

References _lowLevelVertices.

Referenced by g2o::assignHierarchicalEdges().

◆ optimizer()

SparseOptimizer * g2o::Star::optimizer ( )
inline

returns the optimizer

Definition at line 70 of file star.h.

70{ return _optimizer; }

References _optimizer.

Referenced by g2o::computeSimpleStars(), and labelStarEdges().

◆ starEdges()

HyperGraph::EdgeSet & g2o::Star::starEdges ( )
inline

high level edge set

Definition at line 74 of file star.h.

74{ return _starEdges; }

References _starEdges.

Referenced by g2o::constructEdgeStarMap().

◆ starFrontierEdges()

HyperGraph::EdgeSet & g2o::Star::starFrontierEdges ( )
inline

edges in the high level that lead to some node owned by a different star

Definition at line 76 of file star.h.

76{ return _starFrontierEdges; }
HyperGraph::EdgeSet _starFrontierEdges
edges in the star that lead to some other star
Definition star.h:91

References _starFrontierEdges.

Referenced by g2o::computeBorder(), and main().

Member Data Documentation

◆ _gauge

HyperGraph::VertexSet g2o::Star::_gauge

vertices that are fixed (center of the star)

Definition at line 93 of file star.h.

Referenced by g2o::assignHierarchicalEdges(), g2o::computeSimpleStars(), gauge(), labelStarEdges(), and g2o::BackBoneTreeAction::perform().

◆ _level

int g2o::Star::_level

level of the star

Definition at line 83 of file star.h.

Referenced by level().

◆ _lowLevelEdges

HyperGraph::EdgeSet g2o::Star::_lowLevelEdges

edges in the lower level

Definition at line 87 of file star.h.

Referenced by g2o::computeSimpleStars(), g2o::BackBoneTreeAction::fillStar(), labelStarEdges(), and lowLevelEdges().

◆ _lowLevelVertices

HyperGraph::VertexSet g2o::Star::_lowLevelVertices

vertices that are fixed (center of the star)

Definition at line 95 of file star.h.

Referenced by g2o::BackBoneTreeAction::addToMap(), g2o::assignHierarchicalEdges(), g2o::computeSimpleStars(), g2o::BackBoneTreeAction::fillStar(), and lowLevelVertices().

◆ _optimizer

SparseOptimizer* g2o::Star::_optimizer

optimizer

Definition at line 85 of file star.h.

Referenced by labelStarEdges(), and optimizer().

◆ _starEdges

HyperGraph::EdgeSet g2o::Star::_starEdges

edges in the star

Definition at line 89 of file star.h.

Referenced by g2o::assignHierarchicalEdges(), g2o::computeBorder(), g2o::computeSimpleStars(), labelStarEdges(), main(), and starEdges().

◆ _starFrontierEdges

HyperGraph::EdgeSet g2o::Star::_starFrontierEdges

edges in the star that lead to some other star

Definition at line 91 of file star.h.

Referenced by starFrontierEdges().


The documentation for this struct was generated from the following files: