g2o
Loading...
Searching...
No Matches
edge_sba_cam.cpp
Go to the documentation of this file.
1// g2o - General Graph Optimization
2// Copyright (C) 2011 Kurt Konolige
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#include "edge_sba_cam.h"
28
29namespace g2o {
30
32
33bool EdgeSBACam::read(std::istream& is) {
34 Vector7 meas;
35 internal::readVector(is, meas);
37 return readInformationMatrix(is);
38}
39
40bool EdgeSBACam::write(std::ostream& os) const {
41 internal::writeVector(os, measurement().toVector());
42 return writeInformationMatrix(os);
43}
44
46 OptimizableGraph::Vertex* /*to_*/) {
47 VertexCam* from = static_cast<VertexCam*>(_vertices[0]);
48 VertexCam* to = static_cast<VertexCam*>(_vertices[1]);
49 if (from_.count(from) > 0)
51 else
53}
54
56 const VertexCam* v1 = dynamic_cast<const VertexCam*>(_vertices[0]);
57 const VertexCam* v2 = dynamic_cast<const VertexCam*>(_vertices[1]);
58 _measurement = (v1->estimate().inverse() * v2->estimate());
60 return true;
61}
62
64 _measurement = meas;
66}
67
68bool EdgeSBACam::setMeasurementData(const double* d) {
69 Eigen::Map<const Vector7> v(d);
70 _measurement.fromVector(v);
72 return true;
73}
74
75bool EdgeSBACam::getMeasurementData(double* d) const {
76 Eigen::Map<Vector7> v(d);
77 v = _measurement.toVector();
78 return true;
79}
80
82 const VertexCam* v1 = dynamic_cast<const VertexCam*>(_vertices[0]);
83 const VertexCam* v2 = dynamic_cast<const VertexCam*>(_vertices[1]);
84 SE3Quat delta =
85 _inverseMeasurement * (v1->estimate().inverse() * v2->estimate());
86 _error[0] = delta.translation().x();
87 _error[1] = delta.translation().y();
88 _error[2] = delta.translation().z();
89 _error[3] = delta.rotation().x();
90 _error[4] = delta.rotation().y();
91 _error[5] = delta.rotation().z();
92}
93
94} // namespace g2o
bool writeInformationMatrix(std::ostream &os) const
write the upper trinagular part of the information matrix into the stream
Definition base_edge.h:165
bool readInformationMatrix(std::istream &is)
Definition base_edge.h:173
EIGEN_STRONG_INLINE const Measurement & measurement() const
accessor functions for the measurement represented by the edge
Definition base_edge.h:119
Measurement _measurement
the measurement of the edge
Definition base_edge.h:146
ErrorVector _error
Definition base_edge.h:149
const EstimateType & estimate() const
return the current estimate of the vertex
virtual void initialEstimate(const OptimizableGraph::VertexSet &from, OptimizableGraph::Vertex *to)
virtual bool read(std::istream &is)
read the vertex from a stream, i.e., the internal state of the vertex
virtual bool getMeasurementData(double *d) const
virtual bool setMeasurementData(const double *d)
virtual bool setMeasurementFromState()
SE3Quat _inverseMeasurement
virtual bool write(std::ostream &os) const
write the vertex to a stream
virtual void setMeasurement(const SE3Quat &meas)
VertexContainer _vertices
std::set< Vertex * > VertexSet
A general case Vertex for optimization.
const Quaternion & rotation() const
Definition se3quat.h:93
const Vector3 & translation() const
Definition se3quat.h:89
SE3Quat inverse() const
Definition se3quat.h:114
SBACam Vertex, (x,y,z,qw,qx,qy,qz) the parameterization for the increments constructed is a 6d vector...
Definition vertex_cam.h:43
virtual void setEstimate(const SBACam &cam)
Definition vertex_cam.h:53
bool writeVector(std::ostream &os, const Eigen::DenseBase< Derived > &b)
Definition io_helper.h:36
bool readVector(std::istream &is, Eigen::DenseBase< Derived > &b)
Definition io_helper.h:42
VectorN< 7 > Vector7
Definition eigen_types.h:54