g2o
Loading...
Searching...
No Matches
types_slam3d_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_SLAM3D_ONLINE_H
28#define G2O_TYPES_SLAM3D_ONLINE_H
29
30#include <iostream>
31
33#include "g2o_interactive_api.h"
34
35namespace g2o {
36
38 public:
41 : VertexSE3(), updatedEstimate(Eigen::Isometry3d::Identity()) {}
42
43 virtual void oplusImpl(const double* update) {
44 VertexSE3::oplusImpl(update);
45 updatedEstimate = _estimate;
46 }
47
48 void oplusUpdatedEstimate(double* update) {
49 Eigen::Map<const Vector6> v(update);
50 Isometry3 increment = internal::fromVectorMQT(v);
51 updatedEstimate = _estimate * increment;
52 }
53
55};
56
58 public:
61
63 OptimizableGraph::Vertex* /* to */) {
64 OnlineVertexSE3* fromEdge = static_cast<OnlineVertexSE3*>(_vertices[0]);
65 OnlineVertexSE3* toEdge = static_cast<OnlineVertexSE3*>(_vertices[1]);
66 if (from.count(fromEdge) > 0) {
67 toEdge->updatedEstimate = fromEdge->updatedEstimate * _measurement;
68 toEdge->setEstimate(toEdge->updatedEstimate);
69 } else {
70 fromEdge->updatedEstimate = toEdge->updatedEstimate * _inverseMeasurement;
71 fromEdge->setEstimate(fromEdge->updatedEstimate);
72 }
73 }
74
75 double chi2() const {
76 OnlineVertexSE3* from = static_cast<OnlineVertexSE3*>(_vertices[0]);
77 OnlineVertexSE3* to = static_cast<OnlineVertexSE3*>(_vertices[1]);
78 Eigen::Isometry3d delta =
79 _inverseMeasurement * from->estimate().inverse() * to->estimate();
80 Vector6 error = internal::toVectorMQT(delta);
81 return error.dot(information() * error);
82 }
83};
84
85} // namespace g2o
86
87#endif
const EstimateType & estimate() const
return the current estimate of the vertex
void setEstimate(const EstimateType &et)
set the estimate for the vertex also calls updateCache()
Edge between two 3D pose vertices.
Definition edge_se3.h:44
std::set< Vertex * > VertexSet
void initialEstimate(const OptimizableGraph::VertexSet &from, OptimizableGraph::Vertex *)
VertexSE3::EstimateType updatedEstimate
virtual void oplusImpl(const double *update)
void oplusUpdatedEstimate(double *update)
A general case Vertex for optimization.
3D pose Vertex, represented as an Isometry3
Definition vertex_se3.h:50
#define G2O_INTERACTIVE_API
Definition jet.h:938
Eigen::Transform< double, 3, Eigen::Isometry, Eigen::ColMajor > Isometry3
Definition eigen_types.h:77
VectorN< 6 > Vector6
Definition eigen_types.h:53