g2o
Loading...
Searching...
No Matches
types_slam2d_online.h
Go to the documentation of this file.
1// g2o - General Graph Optimization
2// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above copyright
12// notice, this list of conditions and the following disclaimer in the
13// documentation and/or other materials provided with the distribution.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#ifndef G2O_TYPES_SLAM2D_ONLINE_H
28#define G2O_TYPES_SLAM2D_ONLINE_H
29
30#include <iostream>
31
33#include "g2o_interactive_api.h"
34
35namespace g2o {
36
38 public:
41
42 virtual void oplusImpl(const double* update) {
43 VertexSE2::oplusImpl(update);
44 updatedEstimate = _estimate;
45 }
46
47 void oplusUpdatedEstimate(double* update) {
48 Eigen::Vector3d p = _estimate.toVector();
49 p += Eigen::Map<Eigen::Vector3d>(update);
50 p[2] = normalize_theta(p[2]);
51 updatedEstimate.fromVector(p);
52 // std::cerr << PVAR(updatedEstimate.toVector()) << " " <<
53 // PVAR(_estimate.toVector()) << std::endl;
54 }
55
57};
58
60 public:
63
65 OptimizableGraph::Vertex* /* to */) {
66 OnlineVertexSE2* fromEdge = static_cast<OnlineVertexSE2*>(_vertices[0]);
67 OnlineVertexSE2* toEdge = static_cast<OnlineVertexSE2*>(_vertices[1]);
68 if (from.count(fromEdge) > 0) {
69 toEdge->updatedEstimate = fromEdge->updatedEstimate * _measurement;
70 toEdge->setEstimate(toEdge->updatedEstimate);
71 } else {
72 fromEdge->updatedEstimate = toEdge->updatedEstimate * _inverseMeasurement;
73 fromEdge->setEstimate(fromEdge->updatedEstimate);
74 }
75 }
76
77 double chi2() const {
78 const OnlineVertexSE2* v1 =
79 static_cast<const OnlineVertexSE2*>(_vertices[0]);
80 const OnlineVertexSE2* v2 =
81 static_cast<const OnlineVertexSE2*>(_vertices[1]);
82 SE2 delta = _inverseMeasurement *
84 Eigen::Vector3d error = delta.toVector();
85 return error.dot(information() * error);
86 }
87};
88
89} // namespace g2o
90
91#endif
void setEstimate(const EstimateType &et)
set the estimate for the vertex also calls updateCache()
2D edge between two Vertex2
Definition edge_se2.h:41
std::set< Vertex * > VertexSet
void initialEstimate(const OptimizableGraph::VertexSet &from, OptimizableGraph::Vertex *)
VertexSE2::EstimateType updatedEstimate
virtual void oplusImpl(const double *update)
void oplusUpdatedEstimate(double *update)
A general case Vertex for optimization.
represent SE2
Definition se2.h:43
Vector3 toVector() const
convert to a 3D vector (x, y, theta)
Definition se2.h:105
SE2 inverse() const
invert :-)
Definition se2.h:83
2D pose Vertex, (x,y,theta)
Definition vertex_se2.h:41
#define G2O_INTERACTIVE_API
double normalize_theta(double theta)
Definition misc.h:103