g2o
Toggle main menu visibility
Loading...
Searching...
No Matches
g2o
types
slam3d
isometry3d_mappings.h
Go to the documentation of this file.
1
// g2o - General Graph Optimization
2
// Copyright (C) 2011 H. Strasdat, G. Grisetti, R. Kümmerle, 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_ISOMETRY3D_MAPPINGS_H_
28
#define G2O_ISOMETRY3D_MAPPINGS_H_
29
30
#include <Eigen/Core>
31
32
#include "
g2o_types_slam3d_api.h
"
33
#include "
se3quat.h
"
34
35
namespace
g2o
{
36
42
namespace
internal
{
43
55
inline
Isometry3::ConstLinearPart
extractRotation
(
const
Isometry3
& A) {
56
return
A.matrix().topLeftCorner<3, 3>();
57
}
58
65
template
<
typename
Derived>
66
void
nearestOrthogonalMatrix
(
const
Eigen::MatrixBase<Derived>& R) {
67
Eigen::JacobiSVD<Matrix3> svd(R, Eigen::ComputeFullU | Eigen::ComputeFullV);
68
double
det = (svd.matrixU() * svd.matrixV().adjoint()).determinant();
69
Matrix3
scaledU(svd.matrixU());
70
scaledU.col(0) /= det;
71
const_cast<
Eigen::MatrixBase<Derived>&
>
(R) =
72
scaledU * svd.matrixV().transpose();
73
}
74
80
template
<
typename
Derived>
81
void
approximateNearestOrthogonalMatrix
(
const
Eigen::MatrixBase<Derived>& R) {
82
Matrix3
E = R.transpose() * R;
83
E.diagonal().array() -= 1;
84
const_cast<
Eigen::MatrixBase<Derived>&
>
(R) -= 0.5 * R * E;
85
}
86
90
G2O_TYPES_SLAM3D_API
Quaternion
normalized
(
const
Quaternion
& q);
94
G2O_TYPES_SLAM3D_API
Quaternion
&
normalize
(
Quaternion
& q);
95
96
// functions to handle the rotation part
100
G2O_TYPES_SLAM3D_API
Vector3
toEuler
(
const
Matrix3
& R);
104
G2O_TYPES_SLAM3D_API
Matrix3
fromEuler
(
const
Vector3
& v);
108
G2O_TYPES_SLAM3D_API
Vector3
toCompactQuaternion
(
const
Matrix3
& R);
113
G2O_TYPES_SLAM3D_API
Matrix3
fromCompactQuaternion
(
const
Vector3
& v);
114
115
// functions to handle the toVector of the whole transformations
119
G2O_TYPES_SLAM3D_API
Vector6
toVectorMQT
(
const
Isometry3
& t);
123
G2O_TYPES_SLAM3D_API
Vector6
toVectorET
(
const
Isometry3
& t);
127
G2O_TYPES_SLAM3D_API
Vector7
toVectorQT
(
const
Isometry3
& t);
128
132
G2O_TYPES_SLAM3D_API
Isometry3
fromVectorMQT
(
const
Vector6
& v);
136
G2O_TYPES_SLAM3D_API
Isometry3
fromVectorET
(
const
Vector6
& v);
140
G2O_TYPES_SLAM3D_API
Isometry3
fromVectorQT
(
const
Vector7
& v);
141
145
G2O_TYPES_SLAM3D_API
SE3Quat
toSE3Quat
(
const
Isometry3
& t);
149
G2O_TYPES_SLAM3D_API
Isometry3
fromSE3Quat
(
const
SE3Quat
& t);
150
151
}
// end namespace internal
152
}
// end namespace g2o
153
154
#endif
g2o::SE3Quat
Definition
se3quat.h:39
g2o_types_slam3d_api.h
G2O_TYPES_SLAM3D_API
#define G2O_TYPES_SLAM3D_API
Definition
g2o_types_slam3d_api.h:55
g2o::internal
Definition
base_edge.h:40
g2o::internal::normalized
Quaternion normalized(const Quaternion &q)
Definition
isometry3d_mappings.cpp:34
g2o::internal::toVectorQT
Vector7 toVectorQT(const Isometry3 &t)
Definition
isometry3d_mappings.cpp:111
g2o::internal::normalize
Quaternion & normalize(Quaternion &q)
Definition
isometry3d_mappings.cpp:40
g2o::internal::nearestOrthogonalMatrix
void nearestOrthogonalMatrix(const Eigen::MatrixBase< Derived > &R)
Definition
isometry3d_mappings.h:66
g2o::internal::toEuler
Vector3 toEuler(const Matrix3 &R)
Definition
isometry3d_mappings.cpp:49
g2o::internal::fromEuler
Matrix3 fromEuler(const Vector3 &v)
Definition
isometry3d_mappings.cpp:62
g2o::internal::fromVectorQT
Isometry3 fromVectorQT(const Vector7 &v)
Definition
isometry3d_mappings.cpp:137
g2o::internal::approximateNearestOrthogonalMatrix
void approximateNearestOrthogonalMatrix(const Eigen::MatrixBase< Derived > &R)
Definition
isometry3d_mappings.h:81
g2o::internal::fromVectorET
Isometry3 fromVectorET(const Vector6 &v)
Definition
isometry3d_mappings.cpp:130
g2o::internal::fromCompactQuaternion
Matrix3 fromCompactQuaternion(const Vector3 &v)
Definition
isometry3d_mappings.cpp:87
g2o::internal::toVectorET
Vector6 toVectorET(const Isometry3 &t)
Definition
isometry3d_mappings.cpp:104
g2o::internal::fromVectorMQT
Isometry3 fromVectorMQT(const Vector6 &v)
Definition
isometry3d_mappings.cpp:123
g2o::internal::fromSE3Quat
Isometry3 fromSE3Quat(const SE3Quat &t)
Definition
isometry3d_mappings.cpp:149
g2o::internal::toCompactQuaternion
Vector3 toCompactQuaternion(const Matrix3 &R)
Definition
isometry3d_mappings.cpp:80
g2o::internal::toVectorMQT
Vector6 toVectorMQT(const Isometry3 &t)
Definition
isometry3d_mappings.cpp:97
g2o::internal::extractRotation
Isometry3::ConstLinearPart extractRotation(const Isometry3 &A)
Definition
isometry3d_mappings.h:55
g2o::internal::toSE3Quat
SE3Quat toSE3Quat(const Isometry3 &t)
Definition
isometry3d_mappings.cpp:144
g2o
Definition
dl_wrapper.cpp:55
g2o::Matrix3
MatrixN< 3 > Matrix3
Definition
eigen_types.h:72
g2o::Vector3
VectorN< 3 > Vector3
Definition
eigen_types.h:51
g2o::Vector6
VectorN< 6 > Vector6
Definition
eigen_types.h:53
g2o::Quaternion
Eigen::Quaternion< double > Quaternion
Definition
eigen_types.h:81
g2o::Vector7
VectorN< 7 > Vector7
Definition
eigen_types.h:54
g2o::Isometry3
Eigen::Transform< double, 3, Eigen::Isometry, Eigen::ColMajor > Isometry3
Definition
eigen_types.h:77
se3quat.h
Generated on
for g2o by
1.17.0