sim3.hpp
Go to the documentation of this file.
1 
4 #ifndef SOPHUS_SIM3_HPP
5 #define SOPHUS_SIM3_HPP
6 
7 #include "rxso3.hpp"
8 #include "sim_details.hpp"
9 
10 namespace Sophus {
11 template <class Scalar_, int Options = 0>
12 class Sim3;
15 } // namespace Sophus
16 
17 namespace Eigen {
18 namespace internal {
19 
20 template <class Scalar_, int Options>
21 struct traits<Sophus::Sim3<Scalar_, Options>> {
22  using Scalar = Scalar_;
25 };
26 
27 template <class Scalar_, int Options>
28 struct traits<Map<Sophus::Sim3<Scalar_>, Options>>
29  : traits<Sophus::Sim3<Scalar_, Options>> {
30  using Scalar = Scalar_;
31  using TranslationType = Map<Sophus::Vector3<Scalar>, Options>;
32  using RxSO3Type = Map<Sophus::RxSO3<Scalar>, Options>;
33 };
34 
35 template <class Scalar_, int Options>
36 struct traits<Map<Sophus::Sim3<Scalar_> const, Options>>
37  : traits<Sophus::Sim3<Scalar_, Options> const> {
38  using Scalar = Scalar_;
39  using TranslationType = Map<Sophus::Vector3<Scalar> const, Options>;
40  using RxSO3Type = Map<Sophus::RxSO3<Scalar> const, Options>;
41 };
42 } // namespace internal
43 } // namespace Eigen
44 
45 namespace Sophus {
46 
58 template <class Derived>
59 class Sim3Base {
60  public:
61  using Scalar = typename Eigen::internal::traits<Derived>::Scalar;
62  using TranslationType =
63  typename Eigen::internal::traits<Derived>::TranslationType;
64  using RxSO3Type = typename Eigen::internal::traits<Derived>::RxSO3Type;
65  using QuaternionType = typename RxSO3Type::QuaternionType;
66 
69  static int constexpr DoF = 7;
72  static int constexpr num_parameters = 7;
74  static int constexpr N = 4;
81 
86  template <typename OtherDerived>
87  using ReturnScalar = typename Eigen::ScalarBinaryOpTraits<
88  Scalar, typename OtherDerived::Scalar>::ReturnType;
89 
90  template <typename OtherDerived>
92 
93  template <typename PointDerived>
95 
96  template <typename HPointDerived>
98 
106  Matrix3<Scalar> const R = rxso3().rotationMatrix();
107  Adjoint res;
108  res.setZero();
109  res.template block<3, 3>(0, 0) = rxso3().matrix();
110  res.template block<3, 3>(0, 3) = SO3<Scalar>::hat(translation()) * R;
111  res.template block<3, 1>(0, 6) = -translation();
112 
113  res.template block<3, 3>(3, 3) = R;
114 
115  res(6, 6) = Scalar(1);
116  return res;
117  }
118 
121  template <class NewScalarType>
123  return Sim3<NewScalarType>(rxso3().template cast<NewScalarType>(),
124  translation().template cast<NewScalarType>());
125  }
126 
130  RxSO3<Scalar> invR = rxso3().inverse();
131  return Sim3<Scalar>(invR, invR * (translation() * Scalar(-1)));
132  }
133 
145  // The derivation of the closed-form Sim(3) logarithm for is done
146  // analogously to the closed-form solution of the SE(3) logarithm, see
147  // J. Gallier, D. Xu, "Computing exponentials of skew symmetric matrices
148  // and logarithms of orthogonal matrices", IJRA 2002.
149  // https:///pdfs.semanticscholar.org/cfe3/e4b39de63c8cabd89bf3feff7f5449fc981d.pdf
150  // (Sec. 6., pp. 8)
151  Tangent res;
152  auto omega_sigma_and_theta = rxso3().logAndTheta();
153  Vector3<Scalar> const omega =
154  omega_sigma_and_theta.tangent.template head<3>();
155  Scalar sigma = omega_sigma_and_theta.tangent[3];
156  Matrix3<Scalar> const Omega = SO3<Scalar>::hat(omega);
157  Matrix3<Scalar> const W_inv = details::calcWInv<Scalar, 3>(
158  Omega, omega_sigma_and_theta.theta, sigma, scale());
159 
160  res.segment(0, 3) = W_inv * translation();
161  res.segment(3, 3) = omega;
162  res[6] = sigma;
163  return res;
164  }
165 
177  Transformation homogenious_matrix;
178  homogenious_matrix.template topLeftCorner<3, 4>() = matrix3x4();
179  homogenious_matrix.row(3) =
181  return homogenious_matrix;
182  }
183 
188  matrix.template topLeftCorner<3, 3>() = rxso3().matrix();
189  matrix.col(3) = translation();
190  return matrix;
191  }
192 
195  SOPHUS_FUNC Sim3Base& operator=(Sim3Base const& other) = default;
196 
199  template <class OtherDerived>
201  Sim3Base<OtherDerived> const& other) {
202  rxso3() = other.rxso3();
203  translation() = other.translation();
204  return *this;
205  }
206 
212  template <typename OtherDerived>
214  Sim3Base<OtherDerived> const& other) const {
216  rxso3() * other.rxso3(), translation() + rxso3() * other.translation());
217  }
218 
227  template <typename PointDerived,
228  typename = typename std::enable_if<
231  Eigen::MatrixBase<PointDerived> const& p) const {
232  return rxso3() * p + translation();
233  }
234 
237  template <typename HPointDerived,
238  typename = typename std::enable_if<
241  Eigen::MatrixBase<HPointDerived> const& p) const {
242  const PointProduct<HPointDerived> tp =
243  rxso3() * p.template head<3>() + p(3) * translation();
244  return HomogeneousPointProduct<HPointDerived>(tp(0), tp(1), tp(2), p(3));
245  }
246 
255  SOPHUS_FUNC Line operator*(Line const& l) const {
256  Line rotatedLine = rxso3() * l;
257  return Line(rotatedLine.origin() + translation(), rotatedLine.direction());
258  }
259 
263  template <typename OtherDerived,
264  typename = typename std::enable_if<
265  std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type>
267  Sim3Base<OtherDerived> const& other) {
268  *static_cast<Derived*>(this) = *this * other;
269  return *this;
270  }
271 
279  p << rxso3().params(), translation();
280  return p;
281  }
282 
287  SOPHUS_FUNC void setQuaternion(Eigen::Quaternion<Scalar> const& quat) {
288  rxso3().setQuaternion(quat);
289  }
290 
294  return rxso3().quaternion();
295  }
296 
300  return rxso3().rotationMatrix();
301  }
302 
306  return static_cast<Derived*>(this)->rxso3();
307  }
308 
311  SOPHUS_FUNC RxSO3Type const& rxso3() const {
312  return static_cast<Derived const*>(this)->rxso3();
313  }
314 
317  SOPHUS_FUNC Scalar scale() const { return rxso3().scale(); }
318 
322  rxso3().setRotationMatrix(R);
323  }
324 
330  SOPHUS_FUNC void setScale(Scalar const& scale) { rxso3().setScale(scale); }
331 
338  rxso3().setScaledRotationMatrix(sR);
339  }
340 
344  return static_cast<Derived*>(this)->translation();
345  }
346 
350  return static_cast<Derived const*>(this)->translation();
351  }
352 };
353 
355 template <class Scalar_, int Options>
356 class Sim3 : public Sim3Base<Sim3<Scalar_, Options>> {
357  public:
359  using Scalar = Scalar_;
361  using Point = typename Base::Point;
363  using Tangent = typename Base::Tangent;
364  using Adjoint = typename Base::Adjoint;
367 
368  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
369 
372  SOPHUS_FUNC Sim3();
373 
376  SOPHUS_FUNC Sim3(Sim3 const& other) = default;
377 
380  template <class OtherDerived>
382  : rxso3_(other.rxso3()), translation_(other.translation()) {
383  static_assert(std::is_same<typename OtherDerived::Scalar, Scalar>::value,
384  "must be same Scalar type");
385  }
386 
389  template <class OtherDerived, class D>
391  Eigen::MatrixBase<D> const& translation)
393  static_assert(std::is_same<typename OtherDerived::Scalar, Scalar>::value,
394  "must be same Scalar type");
395  static_assert(std::is_same<typename D::Scalar, Scalar>::value,
396  "must be same Scalar type");
397  }
398 
403  template <class D1, class D2>
404  SOPHUS_FUNC Sim3(Eigen::QuaternionBase<D1> const& quaternion,
405  Eigen::MatrixBase<D2> const& translation)
406  : rxso3_(quaternion), translation_(translation) {
407  static_assert(std::is_same<typename D1::Scalar, Scalar>::value,
408  "must be same Scalar type");
409  static_assert(std::is_same<typename D2::Scalar, Scalar>::value,
410  "must be same Scalar type");
411  }
412 
419  : rxso3_(T.template topLeftCorner<3, 3>()),
420  translation_(T.template block<3, 1>(0, 3)) {}
421 
428  // rxso3_ and translation_ are laid out sequentially with no padding
429  return rxso3_.data();
430  }
431 
434  SOPHUS_FUNC Scalar const* data() const {
435  // rxso3_ and translation_ are laid out sequentially with no padding
436  return rxso3_.data();
437  }
438 
442 
445  SOPHUS_FUNC RxSo3Member const& rxso3() const { return rxso3_; }
446 
450 
454  return translation_;
455  }
456 
460  return generator(i);
461  }
462 
476  SOPHUS_FUNC static Sim3<Scalar> exp(Tangent const& a) {
477  // For the derivation of the exponential map of Sim(3) see
478  // H. Strasdat, "Local Accuracy and Global Consistency for Efficient Visual
479  // SLAM", PhD thesis, 2012.
480  // http:///hauke.strasdat.net/files/strasdat_thesis_2012.pdf (A.5, pp. 186)
481  Vector3<Scalar> const upsilon = a.segment(0, 3);
482  Vector3<Scalar> const omega = a.segment(3, 3);
483  Scalar const sigma = a[6];
484  Scalar theta;
486  RxSO3<Scalar>::expAndTheta(a.template tail<4>(), &theta);
487  Matrix3<Scalar> const Omega = SO3<Scalar>::hat(omega);
488 
489  Matrix3<Scalar> const W = details::calcW<Scalar, 3>(Omega, theta, sigma);
490  return Sim3<Scalar>(rxso3, W * upsilon);
491  }
492 
537  SOPHUS_ENSURE(i >= 0 || i <= 6, "i should be in range [0,6].");
538  Tangent e;
539  e.setZero();
540  e[i] = Scalar(1);
541  return hat(e);
542  }
543 
558  Transformation Omega;
559  Omega.template topLeftCorner<3, 3>() =
560  RxSO3<Scalar>::hat(a.template tail<4>());
561  Omega.col(3).template head<3>() = a.template head<3>();
562  Omega.row(3).setZero();
563  return Omega;
564  }
565 
575  SOPHUS_FUNC static Tangent lieBracket(Tangent const& a, Tangent const& b) {
576  Vector3<Scalar> const upsilon1 = a.template head<3>();
577  Vector3<Scalar> const upsilon2 = b.template head<3>();
578  Vector3<Scalar> const omega1 = a.template segment<3>(3);
579  Vector3<Scalar> const omega2 = b.template segment<3>(3);
580  Scalar sigma1 = a[6];
581  Scalar sigma2 = b[6];
582 
583  Tangent res;
584  res.template head<3>() = SO3<Scalar>::hat(omega1) * upsilon2 +
585  SO3<Scalar>::hat(upsilon1) * omega2 +
586  sigma1 * upsilon2 - sigma2 * upsilon1;
587  res.template segment<3>(3) = omega1.cross(omega2);
588  res[6] = Scalar(0);
589 
590  return res;
591  }
592 
599  template <class UniformRandomBitGenerator>
600  static Sim3 sampleUniform(UniformRandomBitGenerator& generator) {
601  std::uniform_real_distribution<Scalar> uniform(Scalar(-1), Scalar(1));
603  Vector3<Scalar>(uniform(generator), uniform(generator),
604  uniform(generator)));
605  }
606 
621  SOPHUS_FUNC static Tangent vee(Transformation const& Omega) {
622  Tangent upsilon_omega_sigma;
623  upsilon_omega_sigma.template head<3>() = Omega.col(3).template head<3>();
624  upsilon_omega_sigma.template tail<4>() =
625  RxSO3<Scalar>::vee(Omega.template topLeftCorner<3, 3>());
626  return upsilon_omega_sigma;
627  }
628 
629  protected:
632 };
633 
634 template <class Scalar, int Options>
636  static_assert(std::is_standard_layout<Sim3>::value,
637  "Assume standard layout for the use of offsetof check below.");
638  static_assert(
639  offsetof(Sim3, rxso3_) + sizeof(Scalar) * RxSO3<Scalar>::num_parameters ==
640  offsetof(Sim3, translation_),
641  "This class assumes packed storage and hence will only work "
642  "correctly depending on the compiler (options) - in "
643  "particular when using [this->data(), this-data() + "
644  "num_parameters] to access the raw data in a contiguous fashion.");
645 }
646 
647 } // namespace Sophus
648 
649 namespace Eigen {
650 
654 template <class Scalar_, int Options>
655 class Map<Sophus::Sim3<Scalar_>, Options>
656  : public Sophus::Sim3Base<Map<Sophus::Sim3<Scalar_>, Options>> {
657  public:
659  using Scalar = Scalar_;
661  using Point = typename Base::Point;
663  using Tangent = typename Base::Tangent;
664  using Adjoint = typename Base::Adjoint;
665 
666  // LCOV_EXCL_START
667  EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Map);
668  // LCOV_EXCL_STOP
669 
670  using Base::operator*=;
671  using Base::operator*;
672 
674  : rxso3_(coeffs),
675  translation_(coeffs + Sophus::RxSO3<Scalar>::num_parameters) {}
676 
679  SOPHUS_FUNC Map<Sophus::RxSO3<Scalar>, Options>& rxso3() { return rxso3_; }
680 
683  SOPHUS_FUNC Map<Sophus::RxSO3<Scalar>, Options> const& rxso3() const {
684  return rxso3_;
685  }
686 
689  SOPHUS_FUNC Map<Sophus::Vector3<Scalar>, Options>& translation() {
690  return translation_;
691  }
692 
694  SOPHUS_FUNC Map<Sophus::Vector3<Scalar>, Options> const& translation() const {
695  return translation_;
696  }
697 
698  protected:
699  Map<Sophus::RxSO3<Scalar>, Options> rxso3_;
700  Map<Sophus::Vector3<Scalar>, Options> translation_;
701 };
702 
706 template <class Scalar_, int Options>
707 class Map<Sophus::Sim3<Scalar_> const, Options>
708  : public Sophus::Sim3Base<Map<Sophus::Sim3<Scalar_> const, Options>> {
710 
711  public:
712  using Scalar = Scalar_;
714  using Point = typename Base::Point;
716  using Tangent = typename Base::Tangent;
717  using Adjoint = typename Base::Adjoint;
718 
719  using Base::operator*=;
720  using Base::operator*;
721 
722  SOPHUS_FUNC Map(Scalar const* coeffs)
723  : rxso3_(coeffs),
724  translation_(coeffs + Sophus::RxSO3<Scalar>::num_parameters) {}
725 
728  SOPHUS_FUNC Map<Sophus::RxSO3<Scalar> const, Options> const& rxso3() const {
729  return rxso3_;
730  }
731 
734  SOPHUS_FUNC Map<Sophus::Vector3<Scalar> const, Options> const& translation()
735  const {
736  return translation_;
737  }
738 
739  protected:
740  Map<Sophus::RxSO3<Scalar> const, Options> const rxso3_;
741  Map<Sophus::Vector3<Scalar> const, Options> const translation_;
742 };
743 } // namespace Eigen
744 
745 #endif
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::HomogeneousPoint
Vector4< Scalar > HomogeneousPoint
Definition: sim3.hpp:77
Sophus::Sim3Base::translation
SOPHUS_FUNC TranslationType & translation()
Definition: sim3.hpp:343
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::RxSO3Type
typename Eigen::internal::traits< Map< Sophus::Sim3< Scalar_ > const, Options > >::RxSO3Type RxSO3Type
Definition: sim3.hpp:64
Sophus::Sim3::lieBracket
static SOPHUS_FUNC Tangent lieBracket(Tangent const &a, Tangent const &b)
Definition: sim3.hpp:575
Eigen
Definition: rxso2.hpp:16
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::Adjoint
typename Base::Adjoint Adjoint
Definition: sim3.hpp:717
Sophus::Sim3::data
SOPHUS_FUNC Scalar const * data() const
Definition: sim3.hpp:434
Sophus::Sim3::hat
static SOPHUS_FUNC Transformation hat(Tangent const &a)
Definition: sim3.hpp:557
Eigen::internal::traits< Map< Sophus::Sim3< Scalar_ > const, Options > >::TranslationType
Map< Sophus::Vector3< Scalar > const, Options > TranslationType
Definition: sim3.hpp:39
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::Scalar
typename Eigen::internal::traits< Map< Sophus::Sim3< Scalar_ > const, Options > >::Scalar Scalar
Definition: sim3.hpp:61
Sophus::Sim3::Sim3
SOPHUS_FUNC Sim3(Matrix< Scalar, 4, 4 > const &T)
Definition: sim3.hpp:418
Eigen::internal::traits< Map< Sophus::Sim3< Scalar_ > const, Options > >::Scalar
Scalar_ Scalar
Definition: sim3.hpp:38
Sophus::Sim3Base::operator=
SOPHUS_FUNC Sim3Base< Derived > & operator=(Sim3Base< OtherDerived > const &other)
Definition: sim3.hpp:200
Sophus::Sim3::Scalar
Scalar_ Scalar
Definition: sim3.hpp:359
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::Scalar
Scalar_ Scalar
Definition: sim3.hpp:712
Sophus::Sim3Base::matrix3x4
SOPHUS_FUNC Matrix< Scalar, 3, 4 > matrix3x4() const
Definition: sim3.hpp:186
Sophus::Sim3::translation
SOPHUS_FUNC TranslationMember const & translation() const
Definition: sim3.hpp:453
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::HomogeneousPoint
typename Base::HomogeneousPoint HomogeneousPoint
Definition: sim3.hpp:715
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::Transformation
typename Base::Transformation Transformation
Definition: sim3.hpp:713
Sophus::Sim3Base::inverse
SOPHUS_FUNC Sim3< Scalar > inverse() const
Definition: sim3.hpp:129
Sophus::Sim3Base::operator*
SOPHUS_FUNC Sim3Product< OtherDerived > operator*(Sim3Base< OtherDerived > const &other) const
Definition: sim3.hpp:213
Sophus::Sim3Base
Definition: sim3.hpp:59
Sophus::Vector3
Vector< Scalar, 3, Options > Vector3
Definition: types.hpp:21
Sophus::Sim3Base::setQuaternion
SOPHUS_FUNC void setQuaternion(Eigen::Quaternion< Scalar > const &quat)
Definition: sim3.hpp:287
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::Point
typename Base::Point Point
Definition: sim3.hpp:714
Sophus::Sim3Base::num_parameters
static constexpr int num_parameters
Definition: sim3.hpp:72
Sophus::Sim3::generator
static SOPHUS_FUNC Transformation generator(int i)
Definition: sim3.hpp:536
SOPHUS_ENSURE
#define SOPHUS_ENSURE(expr,...)
Definition: common.hpp:137
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::translation_
const Map< Sophus::Vector3< Scalar > const, Options > translation_
Definition: sim3.hpp:741
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::Map
SOPHUS_FUNC Map(Scalar *coeffs)
Definition: sim3.hpp:673
Sophus::Sim3Base::quaternion
SOPHUS_FUNC QuaternionType const & quaternion() const
Definition: sim3.hpp:293
rxso3.hpp
Sophus::Sim3::sampleUniform
static Sim3 sampleUniform(UniformRandomBitGenerator &generator)
Definition: sim3.hpp:600
Sophus::Sim3Base::DoF
static constexpr int DoF
Definition: sim3.hpp:69
Sophus::Sim3::Point
typename Base::Point Point
Definition: sim3.hpp:361
Sophus::Sim3::rxso3
SOPHUS_FUNC RxSo3Member const & rxso3() const
Definition: sim3.hpp:445
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::Transformation
Matrix< Scalar, N, N > Transformation
Definition: sim3.hpp:75
Sophus::ParametrizedLine3
ParametrizedLine< Scalar, 3, Options > ParametrizedLine3
Definition: types.hpp:72
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::Map
SOPHUS_FUNC Map(Scalar const *coeffs)
Definition: sim3.hpp:722
Sophus::Sim3Base::cast
SOPHUS_FUNC Sim3< NewScalarType > cast() const
Definition: sim3.hpp:122
Sophus::Sim3Base::log
SOPHUS_FUNC Tangent log() const
Definition: sim3.hpp:144
Sophus::Sim3::rxso3_
RxSo3Member rxso3_
Definition: sim3.hpp:630
Sophus::Sim3Base::operator*
SOPHUS_FUNC PointProduct< PointDerived > operator*(Eigen::MatrixBase< PointDerived > const &p) const
Definition: sim3.hpp:230
Eigen::internal::traits< Map< Sophus::Sim3< Scalar_ > const, Options > >::RxSO3Type
Map< Sophus::RxSO3< Scalar > const, Options > RxSO3Type
Definition: sim3.hpp:40
Sophus::Sim3::data
SOPHUS_FUNC Scalar * data()
Definition: sim3.hpp:427
Sophus::RxSO3::expAndTheta
static SOPHUS_FUNC RxSO3< Scalar > expAndTheta(Tangent const &a, Scalar *theta)
Definition: rxso3.hpp:518
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::rxso3_
Map< Sophus::RxSO3< Scalar >, Options > rxso3_
Definition: sim3.hpp:699
Sophus::Sim3Base::operator*=
SOPHUS_FUNC Sim3Base< Derived > & operator*=(Sim3Base< OtherDerived > const &other)
Definition: sim3.hpp:266
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::PointProduct
Vector3< ReturnScalar< PointDerived > > PointProduct
Definition: sim3.hpp:94
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::rxso3
SOPHUS_FUNC Map< Sophus::RxSO3< Scalar >, Options > & rxso3()
Definition: sim3.hpp:679
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::translation
SOPHUS_FUNC Map< Sophus::Vector3< Scalar >, Options > const & translation() const
Accessor of translation vector.
Definition: sim3.hpp:694
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::Tangent
Vector< Scalar, DoF > Tangent
Definition: sim3.hpp:79
Sophus::Sim3Base::setScaledRotationMatrix
SOPHUS_FUNC void setScaledRotationMatrix(Matrix3< Scalar > const &sR)
Definition: sim3.hpp:337
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::translation
SOPHUS_FUNC Map< Sophus::Vector3< Scalar >, Options > & translation()
Definition: sim3.hpp:689
Sophus::Matrix
Eigen::Matrix< Scalar, M, N > Matrix
Definition: types.hpp:41
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::ReturnScalar
typename Eigen::ScalarBinaryOpTraits< Scalar, typename OtherDerived::Scalar >::ReturnType ReturnScalar
Definition: sim3.hpp:88
Sophus
Definition: average.hpp:17
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::rxso3
SOPHUS_FUNC Map< Sophus::RxSO3< Scalar > const, Options > const & rxso3() const
Definition: sim3.hpp:728
Sophus::SO3::hat
static SOPHUS_FUNC Transformation hat(Tangent const &omega)
Definition: so3.hpp:668
SOPHUS_FUNC
#define SOPHUS_FUNC
Definition: common.hpp:37
Sophus::Sim3Base::setScale
SOPHUS_FUNC void setScale(Scalar const &scale)
Definition: sim3.hpp:330
Sophus::Sim3Base::params
SOPHUS_FUNC Sophus::Vector< Scalar, num_parameters > params() const
Definition: sim3.hpp:277
Sophus::Sim3Base::rxso3
SOPHUS_FUNC RxSO3Type const & rxso3() const
Definition: sim3.hpp:311
Sophus::RxSO3::hat
static SOPHUS_FUNC Transformation hat(Tangent const &a)
Definition: rxso3.hpp:579
Sophus::Sim3::translation_
TranslationMember translation_
Definition: sim3.hpp:631
Sophus::Sim3::HomogeneousPoint
typename Base::HomogeneousPoint HomogeneousPoint
Definition: sim3.hpp:362
Sophus::Sim3Base::matrix
SOPHUS_FUNC Transformation matrix() const
Definition: sim3.hpp:176
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::Transformation
typename Base::Transformation Transformation
Definition: sim3.hpp:660
Sophus::Sim3::Dxi_exp_x_matrix_at_0
static SOPHUS_FUNC Transformation Dxi_exp_x_matrix_at_0(int i)
Definition: sim3.hpp:459
Sophus::Sim3::Tangent
typename Base::Tangent Tangent
Definition: sim3.hpp:363
Eigen::internal::traits< Sophus::Sim3< Scalar_, Options > >::TranslationType
Sophus::Vector3< Scalar, Options > TranslationType
Definition: sim3.hpp:23
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::HomogeneousPointProduct
Vector4< ReturnScalar< HPointDerived > > HomogeneousPointProduct
Definition: sim3.hpp:97
Sophus::RxSO3Base
Definition: rxso3.hpp:67
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::TranslationType
typename Eigen::internal::traits< Map< Sophus::Sim3< Scalar_ > const, Options > >::TranslationType TranslationType
Definition: sim3.hpp:63
Sophus::Sim3Base::operator=
SOPHUS_FUNC Sim3Base & operator=(Sim3Base const &other)=default
Sophus::Sim3::Transformation
typename Base::Transformation Transformation
Definition: sim3.hpp:360
Sophus::Sim3Base::rotationMatrix
SOPHUS_FUNC Matrix3< Scalar > rotationMatrix() const
Definition: sim3.hpp:299
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::Line
ParametrizedLine3< Scalar > Line
Definition: sim3.hpp:78
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::rxso3
SOPHUS_FUNC Map< Sophus::RxSO3< Scalar >, Options > const & rxso3() const
Definition: sim3.hpp:683
Sophus::Sim3Base::operator*
SOPHUS_FUNC HomogeneousPointProduct< HPointDerived > operator*(Eigen::MatrixBase< HPointDerived > const &p) const
Definition: sim3.hpp:240
Sophus::IsFixedSizeVector
Definition: types.hpp:225
Sophus::Sim3Base::scale
SOPHUS_FUNC Scalar scale() const
Definition: sim3.hpp:317
Sophus::Sim3Base::setRotationMatrix
SOPHUS_FUNC void setRotationMatrix(Matrix3< Scalar > &R)
Definition: sim3.hpp:321
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::rxso3_
const Map< Sophus::RxSO3< Scalar > const, Options > rxso3_
Definition: sim3.hpp:740
Sophus::Matrix3
Matrix< Scalar, 3, 3 > Matrix3
Definition: types.hpp:49
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::translation_
Map< Sophus::Vector3< Scalar >, Options > translation_
Definition: sim3.hpp:700
Eigen::internal::traits< Sophus::Sim3< Scalar_, Options > >::Scalar
Scalar_ Scalar
Definition: sim3.hpp:22
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::Tangent
typename Base::Tangent Tangent
Definition: sim3.hpp:716
Sophus::Vector4
Vector< Scalar, 4 > Vector4
Definition: types.hpp:26
Sophus::Sim3Base::Adj
SOPHUS_FUNC Adjoint Adj() const
Definition: sim3.hpp:105
Sophus::Sim3
Sim3 using default storage; derived from Sim3Base.
Definition: sim3.hpp:12
Sophus::Sim3Base::N
static constexpr int N
Group transformations are 4x4 matrices.
Definition: sim3.hpp:74
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::Tangent
typename Base::Tangent Tangent
Definition: sim3.hpp:663
Sophus::RxSO3::vee
static SOPHUS_FUNC Tangent vee(Transformation const &Omega)
Definition: rxso3.hpp:633
Sophus::Vector
Eigen::Matrix< Scalar, M, 1, Options > Vector
Definition: types.hpp:13
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::Adjoint
Matrix< Scalar, DoF, DoF > Adjoint
Definition: sim3.hpp:80
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::Scalar
Scalar_ Scalar
Definition: sim3.hpp:659
Sophus::Sim3::exp
static SOPHUS_FUNC Sim3< Scalar > exp(Tangent const &a)
Definition: sim3.hpp:476
Sophus::Sim3Base::rxso3
SOPHUS_FUNC RxSO3Type & rxso3()
Definition: sim3.hpp:305
sim_details.hpp
Sophus::Sim3::translation
SOPHUS_FUNC TranslationMember & translation()
Definition: sim3.hpp:449
Sophus::Sim3::Sim3
SOPHUS_FUNC Sim3(RxSO3Base< OtherDerived > const &rxso3, Eigen::MatrixBase< D > const &translation)
Definition: sim3.hpp:390
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::Adjoint
typename Base::Adjoint Adjoint
Definition: sim3.hpp:664
Sophus::Sim3Base::operator*
SOPHUS_FUNC Line operator*(Line const &l) const
Definition: sim3.hpp:255
Sophus::Sim3::Sim3
EIGEN_MAKE_ALIGNED_OPERATOR_NEW SOPHUS_FUNC Sim3()
Definition: sim3.hpp:635
Sophus::Sim3::Sim3
SOPHUS_FUNC Sim3(Eigen::QuaternionBase< D1 > const &quaternion, Eigen::MatrixBase< D2 > const &translation)
Definition: sim3.hpp:404
Sophus::Sim3::vee
static SOPHUS_FUNC Tangent vee(Transformation const &Omega)
Definition: sim3.hpp:621
Eigen::Map< Sophus::Sim3< Scalar_ > const, Options >::translation
SOPHUS_FUNC Map< Sophus::Vector3< Scalar > const, Options > const & translation() const
Definition: sim3.hpp:734
Sophus::Sim3::TranslationMember
Vector3< Scalar, Options > TranslationMember
Definition: sim3.hpp:366
Sophus::RxSO3< Scalar, Options >
Sophus::Sim3::Sim3
SOPHUS_FUNC Sim3(Sim3Base< OtherDerived > const &other)
Definition: sim3.hpp:381
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::Point
typename Base::Point Point
Definition: sim3.hpp:661
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::QuaternionType
typename RxSO3Type::QuaternionType QuaternionType
Definition: sim3.hpp:65
Sophus::Sim3::Adjoint
typename Base::Adjoint Adjoint
Definition: sim3.hpp:364
Eigen::Map< Sophus::Sim3< Scalar_ >, Options >::HomogeneousPoint
typename Base::HomogeneousPoint HomogeneousPoint
Definition: sim3.hpp:662
Sophus::Sim3Base::translation
SOPHUS_FUNC TranslationType const & translation() const
Definition: sim3.hpp:349
Sophus::Sim3::rxso3
SOPHUS_FUNC RxSo3Member & rxso3()
Definition: sim3.hpp:441
Sophus::Sim3Base< Map< Sophus::Sim3< Scalar_ > const, Options > >::Point
Vector3< Scalar > Point
Definition: sim3.hpp:76


sophus
Author(s): Hauke Strasdat
autogenerated on Wed Mar 2 2022 01:01:48