46 std::set<std::pair<int, int> > pattern;
47 for (std::set<OptimizableGraph::Edge*>::iterator it = edges.begin();
48 it != edges.end(); ++it) {
62 for (std::set<OptimizableGraph::Edge*>::iterator it = edges.begin();
63 it != edges.end(); ++it) {
71 for (
size_t i = 0; i < e->
vertices().size(); i++) {
75 if (ti == -1)
continue;
76 for (
size_t j = i; j < e->
vertices().size(); j++) {
80 if (tj == -1)
continue;
81 if (tj < ti) swap(ti, tj);
82 pattern.insert(std::make_pair(ti, tj));
89 const std::set<std::pair<int, int> >& pattern) {
90 std::vector<std::pair<int, int> > blockIndices(pattern.size());
95 for (std::set<std::pair<int, int> >::const_iterator it = pattern.begin();
96 it != pattern.end(); ++it) {
97 blockIndices[k++] = *it;
113 for (
size_t i = 0; i < e->
vertices().size(); i++) {
117 if (ti == -1)
continue;
122 MatrixXd cov(maxDim, maxDim);
124 for (
size_t i = 0; i < e->
vertices().size(); i++) {
130 for (
size_t j = 0; j < e->
vertices().size(); j++) {
138 assert(spinv.
block(ti, tj));
146 assert(spinv.
block(tj, ti));
152 spinv.
block(tj, ti)->transpose();
164 VectorXd incMean(maxDim);
166 std::vector<MySigmaPoint> incrementPoints;
168 cerr <<
"sampleUnscented fail" << endl;
176 cerr <<
"FATAL: Edge::setMeasurementFromState() not implemented" << endl;
178 assert(smss &&
"Edge::setMeasurementFromState() not implemented");
181 std::vector<MySigmaPoint> errorPoints(incrementPoints.size());
187 for (
size_t i = 0; i < incrementPoints.size(); i++) {
192 for (
size_t j = 0; j < e->
vertices().size(); j++) {
196 if (tj == -1)
continue;
200 for (
size_t j = 0; j < e->
vertices().size(); j++) {
204 if (tj == -1)
continue;
205 vr->
oplus(&incrementPoints[i]._sample[cumPos]);
220 errorPoints[i]._sample = errorPoint;
221 errorPoints[i]._wi = incrementPoints[i]._wi;
222 errorPoints[i]._wp = incrementPoints[i]._wp;
225 for (
size_t j = 0; j < e->
vertices().size(); j++) {
229 if (tj == -1)
continue;
const VertexContainer & vertices() const
int dimension() const
returns the dimensions of the error function
virtual void computeError()=0
virtual bool setMeasurementFromState()
virtual const double * errorData() const =0
returns the error vector cached after calling the computeError;
virtual const double * informationData() const =0
A general case Vertex for optimization.
virtual void push()=0
backup the position of the vertex to a stack
virtual int minimalEstimateDimension() const
void oplus(const double *v)
Sparse matrix which uses blocks.
SparseMatrixBlock * block(int r, int c, bool alloc=false)
bool computeMarginals(SparseBlockMatrix< MatrixX > &spinv, const std::vector< std::pair< int, int > > &blockIndices)
void reconstructGaussian(SampleType &mean, CovarianceType &covariance, const std::vector< SigmaPoint< SampleType > > &sigmaPoints)
bool sampleUnscented(std::vector< SigmaPoint< SampleType > > &sigmaPoints, const SampleType &mean, const CovarianceType &covariance)
SigmaPoint< VectorXd > MySigmaPoint
void augmentSparsePattern(std::set< std::pair< int, int > > &pattern, OptimizableGraph::Edge *e)
bool computePartialInverse(SparseBlockMatrix< Eigen::MatrixXd > &spinv, const std::set< std::pair< int, int > > &pattern)
bool labelEdge(const SparseBlockMatrix< Eigen::MatrixXd > &spinv, OptimizableGraph::Edge *e)
int labelEdges(std::set< OptimizableGraph::Edge * > &edges)
EdgeLabeler(SparseOptimizer *optimizer)
SparseOptimizer * _optimizer