Template Class Sim3

Inheritance Relationships

Base Type

Class Documentation

template<class Scalar_, int Options>
class Sim3 : public Sophus::Sim3Base<Sim3<Scalar_, Options>>

Sim3 using default storage; derived from Sim3Base.

Public Types

using Base = Sim3Base<Sim3<Scalar_, Options>>
using Scalar = Scalar_
using Transformation = typename Base::Transformation
using Point = typename Base::Point
using HomogeneousPoint = typename Base::HomogeneousPoint
using Tangent = typename Base::Tangent
using Adjoint = typename Base::Adjoint
using RxSo3Member = RxSO3<Scalar, Options>
using TranslationMember = Vector3<Scalar, Options>

Public Functions

SOPHUS_FUNC Sim3 & operator= (Sim3 const &other)=default

Define copy-assignment operator explicitly. The definition of implicit copy assignment operator is deprecated in presence of a user-declared copy constructor (-Wdeprecated-copy in clang >= 13).

EIGEN_MAKE_ALIGNED_OPERATOR_NEW SOPHUS_FUNC Sim3 ()

Default constructor initializes similarity transform to the identity.

SOPHUS_FUNC Sim3(Sim3 const &other) = default

Copy constructor

template<class OtherDerived>
inline SOPHUS_FUNC Sim3(Sim3Base<OtherDerived> const &other)

Copy-like constructor from OtherDerived.

template<class OtherDerived, class D>
inline explicit SOPHUS_FUNC Sim3(RxSO3Base<OtherDerived> const &rxso3, Eigen::MatrixBase<D> const &translation)

Constructor from RxSO3 and translation vector

template<class D1, class D2>
inline explicit SOPHUS_FUNC Sim3(Eigen::QuaternionBase<D1> const &quaternion, Eigen::MatrixBase<D2> const &translation)

Constructor from quaternion and translation vector.

Precondition: quaternion must not be close to zero.

template<class D1, class D2>
inline explicit SOPHUS_FUNC Sim3(Scalar const &scale, Eigen::QuaternionBase<D1> const &unit_quaternion, Eigen::MatrixBase<D2> const &translation)

Constructor from scale factor, unit quaternion, and translation vector.

Precondition: quaternion must not be close to zero.

inline explicit SOPHUS_FUNC Sim3(Matrix<Scalar, 4, 4> const &T)

Constructor from 4x4 matrix

Precondition: Top-left 3x3 matrix needs to be “scaled-orthogonal” with positive determinant. The last row must be (0, 0, 0, 1).

inline SOPHUS_FUNC Scalar * data ()

This provides unsafe read/write access to internal data. Sim(3) is represented by an Eigen::Quaternion (four parameters) and a 3-vector. When using direct write access, the user needs to take care of that the quaternion is not set close to zero.

inline SOPHUS_FUNC Scalar const  * data () const

Const version of data() above.

inline SOPHUS_FUNC RxSo3Member & rxso3 ()

Accessor of RxSO3

inline SOPHUS_FUNC RxSo3Member const  & rxso3 () const

Mutator of RxSO3

inline SOPHUS_FUNC TranslationMember & translation ()

Mutator of translation vector

inline SOPHUS_FUNC TranslationMember const  & translation () const

Accessor of translation vector

Public Static Functions

static inline SOPHUS_FUNC Sophus::Matrix< Scalar, num_parameters, DoF > Dx_exp_x_at_0 ()

Returns derivative of exp(x) wrt. x_i at x=0.

static inline SOPHUS_FUNC Sophus::Matrix< Scalar, num_parameters, DoF > Dx_exp_x (const Tangent &a)

Returns derivative of exp(x) wrt. x.

static inline SOPHUS_FUNC Sophus::Matrix< Scalar, 3, DoF > Dx_exp_x_times_point_at_0 (Point const &point)

Returns derivative of exp(x) * p wrt. x_i at x=0.

static inline SOPHUS_FUNC Transformation Dxi_exp_x_matrix_at_0 (int i)

Returns derivative of exp(x).matrix() wrt. x_i at x=0.

static inline SOPHUS_FUNC Sim3< Scalar > exp (Tangent const &a)

Group exponential

This functions takes in an element of tangent space and returns the corresponding element of the group Sim(3).

The first three components of a represent the translational part upsilon in the tangent space of Sim(3), the following three components of a represents the rotation vector omega and the final component represents the logarithm of the scaling factor sigma. To be more specific, this function computes expmat(hat(a)) with expmat(.) being the matrix exponential and hat(.) the hat-operator of Sim(3), see below.

static inline SOPHUS_FUNC Transformation generator (int i)

Returns the ith infinitesimal generators of Sim(3).

The infinitesimal generators of Sim(3) are:

      |  0  0  0  1 |
G_0 = |  0  0  0  0 |
      |  0  0  0  0 |
      |  0  0  0  0 |

      |  0  0  0  0 |
G_1 = |  0  0  0  1 |
      |  0  0  0  0 |
      |  0  0  0  0 |

      |  0  0  0  0 |
G_2 = |  0  0  0  0 |
      |  0  0  0  1 |
      |  0  0  0  0 |

      |  0  0  0  0 |
G_3 = |  0  0 -1  0 |
      |  0  1  0  0 |
      |  0  0  0  0 |

      |  0  0  1  0 |
G_4 = |  0  0  0  0 |
      | -1  0  0  0 |
      |  0  0  0  0 |

      |  0 -1  0  0 |
G_5 = |  1  0  0  0 |
      |  0  0  0  0 |
      |  0  0  0  0 |

      |  1  0  0  0 |
G_6 = |  0  1  0  0 |
      |  0  0  1  0 |
      |  0  0  0  0 |

Precondition: i must be in [0, 6].

static inline SOPHUS_FUNC Transformation hat (Tangent const &a)

hat-operator

It takes in the 7-vector representation and returns the corresponding matrix representation of Lie algebra element.

Formally, the hat()-operator of Sim(3) is defined as

hat(.): R^7 -> R^{4x4}, hat(a) = sum_i a_i * G_i (for i=0,…,6)

with G_i being the ith infinitesimal generator of Sim(3).

The corresponding inverse is the vee()-operator, see below.

static inline SOPHUS_FUNC Tangent lieBracket (Tangent const &a, Tangent const &b)

Lie bracket

It computes the Lie bracket of Sim(3). To be more specific, it computes

[omega_1, omega_2]_sim3 := vee([hat(omega_1), hat(omega_2)])

with [A,B] := AB-BA being the matrix commutator, hat(.) the hat()-operator and vee(.) the vee()-operator of Sim(3).

template<class UniformRandomBitGenerator>
static inline Sim3 sampleUniform(UniformRandomBitGenerator &generator)

Draw uniform sample from Sim(3) manifold.

Translations are drawn component-wise from the range [-1, 1]. The scale factor is drawn uniformly in log2-space from [-1, 1], hence the scale is in [0.5, 2].

static inline SOPHUS_FUNC Tangent vee (Transformation const &Omega)

vee-operator

It takes the 4x4-matrix representation Omega and maps it to the corresponding 7-vector representation of Lie algebra.

This is the inverse of the hat()-operator, see above.

Precondition: Omega must have the following structure:

           |  g -f  e  a |
           |  f  g -d  b |
           | -e  d  g  c |
           |  0  0  0  0 |

Public Static Attributes

static constexpr int DoF = Base::DoF
static constexpr int num_parameters = Base::num_parameters

Protected Attributes

RxSo3Member rxso3_
TranslationMember translation_