so2.hpp
Go to the documentation of this file.
1 
4 #ifndef SOPHUS_SO2_HPP
5 #define SOPHUS_SO2_HPP
6 
7 #include <complex>
8 #include <type_traits>
9 
10 // Include only the selective set of Eigen headers that we need.
11 // This helps when using Sophus with unusual compilers, like nvcc.
12 #include <Eigen/LU>
13 
14 #include "rotation_matrix.hpp"
15 #include "types.hpp"
16 
17 namespace Sophus {
18 template <class Scalar_, int Options = 0>
19 class SO2;
20 using SO2d = SO2<double>;
21 using SO2f = SO2<float>;
22 } // namespace Sophus
23 
24 namespace Eigen {
25 namespace internal {
26 
27 template <class Scalar_, int Options>
28 struct traits<Sophus::SO2<Scalar_, Options>> {
29  using Scalar = Scalar_;
31 };
32 
33 template <class Scalar_, int Options>
34 struct traits<Map<Sophus::SO2<Scalar_>, Options>>
35  : traits<Sophus::SO2<Scalar_, Options>> {
36  using Scalar = Scalar_;
37  using ComplexType = Map<Sophus::Vector2<Scalar>, Options>;
38 };
39 
40 template <class Scalar_, int Options>
41 struct traits<Map<Sophus::SO2<Scalar_> const, Options>>
42  : traits<Sophus::SO2<Scalar_, Options> const> {
43  using Scalar = Scalar_;
44  using ComplexType = Map<Sophus::Vector2<Scalar> const, Options>;
45 };
46 } // namespace internal
47 } // namespace Eigen
48 
49 namespace Sophus {
50 
76 template <class Derived>
77 class SO2Base {
78  public:
79  using Scalar = typename Eigen::internal::traits<Derived>::Scalar;
80  using ComplexT = typename Eigen::internal::traits<Derived>::ComplexType;
81 
84  static int constexpr DoF = 1;
86  static int constexpr num_parameters = 2;
88  static int constexpr N = 2;
93  using Tangent = Scalar;
94  using Adjoint = Scalar;
95 
100  template <typename OtherDerived>
101  using ReturnScalar = typename Eigen::ScalarBinaryOpTraits<
102  Scalar, typename OtherDerived::Scalar>::ReturnType;
103 
104  template <typename OtherDerived>
106 
107  template <typename PointDerived>
109 
110  template <typename HPointDerived>
112 
121  SOPHUS_FUNC Adjoint Adj() const { return Scalar(1); }
122 
125  template <class NewScalarType>
127  return SO2<NewScalarType>(unit_complex().template cast<NewScalarType>());
128  }
129 
136 
139  SOPHUS_FUNC Scalar const* data() const { return unit_complex().data(); }
140 
144  return SO2<Scalar>(unit_complex().x(), -unit_complex().y());
145  }
146 
158  using std::atan2;
159  return atan2(unit_complex().y(), unit_complex().x());
160  }
161 
168  using std::sqrt;
169  Scalar length = sqrt(unit_complex().x() * unit_complex().x() +
170  unit_complex().y() * unit_complex().y());
172  "Complex number should not be close to zero!");
173  unit_complex_nonconst().x() /= length;
174  unit_complex_nonconst().y() /= length;
175  }
176 
183  Scalar const& real = unit_complex().x();
184  Scalar const& imag = unit_complex().y();
185  Transformation R;
186  // clang-format off
187  R <<
188  real, -imag,
189  imag, real;
190  // clang-format on
191  return R;
192  }
193 
196  SOPHUS_FUNC SO2Base& operator=(SO2Base const& other) = default;
197 
200  template <class OtherDerived>
203  return *this;
204  }
205 
208  template <typename OtherDerived>
210  SO2Base<OtherDerived> const& other) const {
211  using ResultT = ReturnScalar<OtherDerived>;
212  Scalar const lhs_real = unit_complex().x();
213  Scalar const lhs_imag = unit_complex().y();
214  typename OtherDerived::Scalar const& rhs_real = other.unit_complex().x();
215  typename OtherDerived::Scalar const& rhs_imag = other.unit_complex().y();
216  // complex multiplication
217  ResultT const result_real = lhs_real * rhs_real - lhs_imag * rhs_imag;
218  ResultT const result_imag = lhs_real * rhs_imag + lhs_imag * rhs_real;
219 
220  ResultT const squared_norm =
221  result_real * result_real + result_imag * result_imag;
222  // We can assume that the squared-norm is close to 1 since we deal with a
223  // unit complex number. Due to numerical precision issues, there might
224  // be a small drift after pose concatenation. Hence, we need to renormalizes
225  // the complex number here.
226  // Since squared-norm is close to 1, we do not need to calculate the costly
227  // square-root, but can use an approximation around 1 (see
228  // http://stackoverflow.com/a/12934750 for details).
229  if (squared_norm != ResultT(1.0)) {
230  ResultT const scale = ResultT(2.0) / (ResultT(1.0) + squared_norm);
231  return SO2Product<OtherDerived>(result_real * scale, result_imag * scale);
232  }
233  return SO2Product<OtherDerived>(result_real, result_imag);
234  }
235 
241  template <typename PointDerived,
242  typename = typename std::enable_if<
245  Eigen::MatrixBase<PointDerived> const& p) const {
246  Scalar const& real = unit_complex().x();
247  Scalar const& imag = unit_complex().y();
248  return PointProduct<PointDerived>(real * p[0] - imag * p[1],
249  imag * p[0] + real * p[1]);
250  }
251 
257  template <typename HPointDerived,
258  typename = typename std::enable_if<
261  Eigen::MatrixBase<HPointDerived> const& p) const {
262  Scalar const& real = unit_complex().x();
263  Scalar const& imag = unit_complex().y();
265  real * p[0] - imag * p[1], imag * p[0] + real * p[1], p[2]);
266  }
267 
275  SOPHUS_FUNC Line operator*(Line const& l) const {
276  return Line((*this) * l.origin(), (*this) * l.direction());
277  }
278 
282  template <typename OtherDerived,
283  typename = typename std::enable_if<
284  std::is_same<Scalar, ReturnScalar<OtherDerived>>::value>::type>
286  *static_cast<Derived*>(this) = *this * other;
287  return *this;
288  }
289 
293  const {
295  unit_complex()[0]);
296  }
297 
303  return unit_complex();
304  }
305 
310  SOPHUS_FUNC void setComplex(Point const& complex) {
311  unit_complex_nonconst() = complex;
312  normalize();
313  }
314 
318  ComplexT const& unit_complex() const {
319  return static_cast<Derived const*>(this)->unit_complex();
320  }
321 
322  private:
328  return static_cast<Derived*>(this)->unit_complex_nonconst();
329  }
330 };
331 
333 template <class Scalar_, int Options>
334 class SO2 : public SO2Base<SO2<Scalar_, Options>> {
335  public:
337  static int constexpr DoF = Base::DoF;
338  static int constexpr num_parameters = Base::num_parameters;
339 
340  using Scalar = Scalar_;
342  using Point = typename Base::Point;
344  using Tangent = typename Base::Tangent;
345  using Adjoint = typename Base::Adjoint;
347 
349  friend class SO2Base<SO2<Scalar, Options>>;
350 
351  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
352 
356 
359  SOPHUS_FUNC SO2(SO2 const& other) = default;
360 
363  template <class OtherDerived>
365  : unit_complex_(other.unit_complex()) {}
366 
371  SOPHUS_FUNC explicit SO2(Transformation const& R)
372  : unit_complex_(Scalar(0.5) * (R(0, 0) + R(1, 1)),
373  Scalar(0.5) * (R(1, 0) - R(0, 1))) {
374  SOPHUS_ENSURE(isOrthogonal(R), "R is not orthogonal:\n %", R);
375  SOPHUS_ENSURE(R.determinant() > Scalar(0), "det(R) is not positive: %",
376  R.determinant());
377  }
378 
383  SOPHUS_FUNC SO2(Scalar const& real, Scalar const& imag)
384  : unit_complex_(real, imag) {
385  Base::normalize();
386  }
387 
392  template <class D>
393  SOPHUS_FUNC explicit SO2(Eigen::MatrixBase<D> const& complex)
394  : unit_complex_(complex) {
395  static_assert(std::is_same<typename D::Scalar, Scalar>::value,
396  "must be same Scalar type");
397  Base::normalize();
398  }
399 
402  SOPHUS_FUNC explicit SO2(Scalar theta) {
403  unit_complex_nonconst() = SO2<Scalar>::exp(theta).unit_complex();
404  }
405 
409  return unit_complex_;
410  }
411 
421  SOPHUS_FUNC static SO2<Scalar> exp(Tangent const& theta) {
422  using std::cos;
423  using std::sin;
424  return SO2<Scalar>(cos(theta), sin(theta));
425  }
426 
430  Tangent const& theta) {
431  using std::cos;
432  using std::sin;
433  return Sophus::Matrix<Scalar, num_parameters, DoF>(-sin(theta), cos(theta));
434  }
435 
441  }
442 
446  return generator();
447  }
448 
456  SOPHUS_FUNC static Transformation generator() { return hat(Scalar(1)); }
457 
471  SOPHUS_FUNC static Transformation hat(Tangent const& theta) {
472  Transformation Omega;
473  // clang-format off
474  Omega <<
475  Scalar(0), -theta,
476  theta, Scalar(0);
477  // clang-format on
478  return Omega;
479  }
480 
483  template <class S = Scalar>
486  return SO2(makeRotationMatrix(R));
487  }
488 
494  SOPHUS_FUNC static Tangent lieBracket(Tangent const&, Tangent const&) {
495  return Scalar(0);
496  }
497 
500  template <class UniformRandomBitGenerator>
501  static SO2 sampleUniform(UniformRandomBitGenerator& generator) {
503  "generator must meet the UniformRandomBitGenerator concept");
504  std::uniform_real_distribution<Scalar> uniform(-Constants<Scalar>::pi(),
506  return SO2(uniform(generator));
507  }
508 
521  SOPHUS_FUNC static Tangent vee(Transformation const& Omega) {
522  using std::abs;
523  return Omega(1, 0);
524  }
525 
526  protected:
530 
532 };
533 
534 } // namespace Sophus
535 
536 namespace Eigen {
537 
542 template <class Scalar_, int Options>
543 class Map<Sophus::SO2<Scalar_>, Options>
544  : public Sophus::SO2Base<Map<Sophus::SO2<Scalar_>, Options>> {
545  public:
547  using Scalar = Scalar_;
548 
550  using Point = typename Base::Point;
552  using Tangent = typename Base::Tangent;
553  using Adjoint = typename Base::Adjoint;
554 
556  friend class Sophus::SO2Base<Map<Sophus::SO2<Scalar_>, Options>>;
557 
558  // LCOV_EXCL_START
559  EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Map);
560  // LCOV_EXCL_STOP
561 
562  using Base::operator*=;
563  using Base::operator*;
564 
566  Map(Scalar* coeffs) : unit_complex_(coeffs) {}
567 
571  Map<Sophus::Vector2<Scalar>, Options> const& unit_complex() const {
572  return unit_complex_;
573  }
574 
575  protected:
579  Map<Sophus::Vector2<Scalar>, Options>& unit_complex_nonconst() {
580  return unit_complex_;
581  }
582 
583  Map<Matrix<Scalar, 2, 1>, Options> unit_complex_;
584 };
585 
590 template <class Scalar_, int Options>
591 class Map<Sophus::SO2<Scalar_> const, Options>
592  : public Sophus::SO2Base<Map<Sophus::SO2<Scalar_> const, Options>> {
593  public:
595  using Scalar = Scalar_;
597  using Point = typename Base::Point;
599  using Tangent = typename Base::Tangent;
600  using Adjoint = typename Base::Adjoint;
601 
602  using Base::operator*=;
603  using Base::operator*;
604 
605  SOPHUS_FUNC Map(Scalar const* coeffs) : unit_complex_(coeffs) {}
606 
609  SOPHUS_FUNC Map<Sophus::Vector2<Scalar> const, Options> const& unit_complex()
610  const {
611  return unit_complex_;
612  }
613 
614  protected:
617  Map<Matrix<Scalar, 2, 1> const, Options> const unit_complex_;
618 };
619 } // namespace Eigen
620 
621 #endif // SOPHUS_SO2_HPP
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::Point
Vector2< Scalar > Point
Definition: so2.hpp:90
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::Transformation
typename Base::Transformation Transformation
Definition: so2.hpp:549
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::HomogeneousPoint
typename Base::HomogeneousPoint HomogeneousPoint
Definition: so2.hpp:598
Sophus::SO2Base::data
SOPHUS_FUNC Scalar const * data() const
Definition: so2.hpp:139
Sophus::SO2< Scalar, Options >::Transformation
typename Base::Transformation Transformation
Definition: so2.hpp:341
Sophus::SO2
SO2 using default storage; derived from SO2Base.
Definition: so2.hpp:19
Eigen
Definition: rxso2.hpp:16
Sophus::SO2Base::data
SOPHUS_FUNC Scalar * data()
Definition: so2.hpp:135
Sophus::SO2Base::operator*
SOPHUS_FUNC Line operator*(Line const &l) const
Definition: so2.hpp:275
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::Scalar
Scalar_ Scalar
Definition: so2.hpp:595
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::Tangent
typename Base::Tangent Tangent
Definition: so2.hpp:552
Sophus::SO2Base::DoF
static constexpr int DoF
Definition: so2.hpp:84
types.hpp
Sophus::Vector3
Vector< Scalar, 3, Options > Vector3
Definition: types.hpp:21
Sophus::SO2::unit_complex_nonconst
SOPHUS_FUNC ComplexMember & unit_complex_nonconst()
Definition: so2.hpp:529
Sophus::SO2::Dxi_exp_x_matrix_at_0
static SOPHUS_FUNC Transformation Dxi_exp_x_matrix_at_0(int)
Definition: so2.hpp:445
Sophus::SO2::exp
static SOPHUS_FUNC SO2< Scalar > exp(Tangent const &theta)
Definition: so2.hpp:421
Sophus::SO2Base::Adj
SOPHUS_FUNC Adjoint Adj() const
Definition: so2.hpp:121
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::Tangent
typename Base::Tangent Tangent
Definition: so2.hpp:599
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::unit_complex_
const Map< Matrix< Scalar, 2, 1 > const, Options > unit_complex_
Definition: so2.hpp:617
Sophus::enable_if_t
typename std::enable_if< B, T >::type enable_if_t
Definition: common.hpp:221
SOPHUS_ENSURE
#define SOPHUS_ENSURE(expr,...)
Definition: common.hpp:137
Sophus::SO2Base::cast
SOPHUS_FUNC SO2< NewScalarType > cast() const
Definition: so2.hpp:126
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::unit_complex
SOPHUS_FUNC Map< Sophus::Vector2< Scalar > const, Options > const & unit_complex() const
Definition: so2.hpp:609
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::Transformation
Matrix< Scalar, N, N > Transformation
Definition: so2.hpp:89
Sophus::SO2< Scalar, Options >::Scalar
Scalar Scalar
Definition: so2.hpp:340
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::unit_complex_nonconst
SOPHUS_FUNC Map< Sophus::Vector2< Scalar >, Options > & unit_complex_nonconst()
Definition: so2.hpp:579
Sophus::SO2::SO2
SOPHUS_FUNC SO2(Scalar const &real, Scalar const &imag)
Definition: so2.hpp:383
Sophus::SO2::SO2
SOPHUS_FUNC SO2(Eigen::MatrixBase< D > const &complex)
Definition: so2.hpp:393
Sophus::SO2::DoF
static constexpr int DoF
Definition: so2.hpp:337
Sophus::Vector2
Vector< Scalar, 2, Options > Vector2
Definition: types.hpp:16
Sophus::SO2Base::matrix
SOPHUS_FUNC Transformation matrix() const
Definition: so2.hpp:182
Sophus::SO2Base::unit_complex_nonconst
SOPHUS_FUNC ComplexT & unit_complex_nonconst()
Definition: so2.hpp:327
Sophus::SO2Base
Definition: so2.hpp:77
Sophus::SO2::num_parameters
static constexpr int num_parameters
Definition: so2.hpp:338
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::HomogeneousPoint
typename Base::HomogeneousPoint HomogeneousPoint
Definition: so2.hpp:551
Sophus::SO2Base::operator*
SOPHUS_FUNC SO2Product< OtherDerived > operator*(SO2Base< OtherDerived > const &other) const
Definition: so2.hpp:209
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::ReturnScalar
typename Eigen::ScalarBinaryOpTraits< Scalar, typename OtherDerived::Scalar >::ReturnType ReturnScalar
Definition: so2.hpp:102
Sophus::SO2::SO2
SOPHUS_FUNC SO2(Transformation const &R)
Definition: so2.hpp:371
Sophus::SO2Base::inverse
SOPHUS_FUNC SO2< Scalar > inverse() const
Definition: so2.hpp:143
Eigen::internal::traits< Map< Sophus::SO2< Scalar_ > const, Options > >::Scalar
Scalar_ Scalar
Definition: so2.hpp:43
Sophus::SO2Base::unit_complex
SOPHUS_FUNC ComplexT const & unit_complex() const
Definition: so2.hpp:318
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::Line
ParametrizedLine2< Scalar > Line
Definition: so2.hpp:92
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::Scalar
Scalar_ Scalar
Definition: so2.hpp:547
Sophus::Matrix
Eigen::Matrix< Scalar, M, N > Matrix
Definition: types.hpp:41
Sophus
Definition: average.hpp:17
Sophus::SO2Base::num_parameters
static constexpr int num_parameters
Number of internal parameters used (complex numbers are a tuples).
Definition: so2.hpp:86
SOPHUS_FUNC
#define SOPHUS_FUNC
Definition: common.hpp:37
Sophus::SO2::lieBracket
static SOPHUS_FUNC Tangent lieBracket(Tangent const &, Tangent const &)
Definition: so2.hpp:494
Sophus::SO2Base::Dx_this_mul_exp_x_at_0
SOPHUS_FUNC Matrix< Scalar, num_parameters, DoF > Dx_this_mul_exp_x_at_0() const
Definition: so2.hpp:292
Sophus::SO2Base::operator*
SOPHUS_FUNC HomogeneousPointProduct< HPointDerived > operator*(Eigen::MatrixBase< HPointDerived > const &p) const
Definition: so2.hpp:260
rotation_matrix.hpp
Sophus::isOrthogonal
SOPHUS_FUNC bool isOrthogonal(Eigen::MatrixBase< D > const &R)
Definition: rotation_matrix.hpp:17
Sophus::SO2::unit_complex_
ComplexMember unit_complex_
Definition: so2.hpp:531
Sophus::SO2< Scalar, Options >::ComplexMember
Vector2< Scalar, Options > ComplexMember
Definition: so2.hpp:346
Sophus::SO2Base::operator*=
SOPHUS_FUNC SO2Base< Derived > operator*=(SO2Base< OtherDerived > const &other)
Definition: so2.hpp:285
sophus.matrix.squared_norm
def squared_norm(m)
Definition: matrix.py:18
Sophus::SO2Base::params
SOPHUS_FUNC Sophus::Vector< Scalar, num_parameters > params() const
Definition: so2.hpp:302
Eigen::internal::traits< Sophus::SO2< Scalar_, Options > >::Scalar
Scalar_ Scalar
Definition: so2.hpp:29
Sophus::SO2Base::setComplex
SOPHUS_FUNC void setComplex(Point const &complex)
Definition: so2.hpp:310
Sophus::SO2::Dx_exp_x_at_0
static SOPHUS_FUNC Sophus::Matrix< Scalar, num_parameters, DoF > Dx_exp_x_at_0()
Definition: so2.hpp:439
Sophus::SO2::fitToSO2
static SOPHUS_FUNC enable_if_t< std::is_floating_point< S >::value, SO2 > fitToSO2(Transformation const &R)
Definition: so2.hpp:485
Sophus::SO2Base::N
static constexpr int N
Group transformations are 2x2 matrices.
Definition: so2.hpp:88
Sophus::makeRotationMatrix
SOPHUS_FUNC enable_if_t< std::is_floating_point< typename D::Scalar >::value, Matrix< typename D::Scalar, D::RowsAtCompileTime, D::RowsAtCompileTime > > makeRotationMatrix(Eigen::MatrixBase< D > const &R)
Definition: rotation_matrix.hpp:62
Sophus::SO2::SO2
EIGEN_MAKE_ALIGNED_OPERATOR_NEW SOPHUS_FUNC SO2()
Definition: so2.hpp:355
Sophus::SO2Base::log
SOPHUS_FUNC Scalar log() const
Definition: so2.hpp:157
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::PointProduct
Vector2< ReturnScalar< PointDerived > > PointProduct
Definition: so2.hpp:108
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::ComplexT
typename Eigen::internal::traits< Map< Sophus::SO2< Scalar_ > const, Options > >::ComplexType ComplexT
Definition: so2.hpp:80
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::Scalar
typename Eigen::internal::traits< Map< Sophus::SO2< Scalar_ > const, Options > >::Scalar Scalar
Definition: so2.hpp:79
Sophus::SO2::SO2
SOPHUS_FUNC SO2(SO2Base< OtherDerived > const &other)
Definition: so2.hpp:364
Sophus::SO2::generator
static SOPHUS_FUNC Transformation generator()
Definition: so2.hpp:456
Sophus::SO2::hat
static SOPHUS_FUNC Transformation hat(Tangent const &theta)
Definition: so2.hpp:471
Eigen::internal::traits< Map< Sophus::SO2< Scalar_ > const, Options > >::ComplexType
Map< Sophus::Vector2< Scalar > const, Options > ComplexType
Definition: so2.hpp:44
Sophus::SO2< Scalar, Options >::Adjoint
typename Base::Adjoint Adjoint
Definition: so2.hpp:345
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::HomogeneousPoint
Vector3< Scalar > HomogeneousPoint
Definition: so2.hpp:91
Sophus::SO2Base::operator=
SOPHUS_FUNC SO2Base< Derived > & operator=(SO2Base< OtherDerived > const &other)
Definition: so2.hpp:201
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::Adjoint
typename Base::Adjoint Adjoint
Definition: so2.hpp:553
Sophus::SO2Base::normalize
SOPHUS_FUNC void normalize()
Definition: so2.hpp:167
Sophus::IsFixedSizeVector
Definition: types.hpp:225
Sophus::Constants
Definition: common.hpp:146
Sophus::SO2::SO2
SOPHUS_FUNC SO2(Scalar theta)
Definition: so2.hpp:402
Sophus::SO2< Scalar, Options >::Tangent
typename Base::Tangent Tangent
Definition: so2.hpp:344
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::unit_complex_
Map< Matrix< Scalar, 2, 1 >, Options > unit_complex_
Definition: so2.hpp:583
Sophus::SO2Base::operator*
SOPHUS_FUNC PointProduct< PointDerived > operator*(Eigen::MatrixBase< PointDerived > const &p) const
Definition: so2.hpp:244
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::Adjoint
typename Base::Adjoint Adjoint
Definition: so2.hpp:600
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::Tangent
Scalar Tangent
Definition: so2.hpp:93
Sophus::SO2::sampleUniform
static SO2 sampleUniform(UniformRandomBitGenerator &generator)
Definition: so2.hpp:501
Sophus::Vector
Eigen::Matrix< Scalar, M, 1, Options > Vector
Definition: types.hpp:13
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::HomogeneousPointProduct
Vector3< ReturnScalar< HPointDerived > > HomogeneousPointProduct
Definition: so2.hpp:111
Sophus::SO2< Scalar, Options >::HomogeneousPoint
typename Base::HomogeneousPoint HomogeneousPoint
Definition: so2.hpp:343
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::Point
typename Base::Point Point
Definition: so2.hpp:597
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::unit_complex
SOPHUS_FUNC Map< Sophus::Vector2< Scalar >, Options > const & unit_complex() const
Definition: so2.hpp:571
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::Transformation
typename Base::Transformation Transformation
Definition: so2.hpp:596
Sophus::IsUniformRandomBitGenerator
Definition: common.hpp:224
Sophus::ParametrizedLine2
ParametrizedLine< Scalar, 2, Options > ParametrizedLine2
Definition: types.hpp:77
Eigen::internal::traits< Sophus::SO2< Scalar_, Options > >::ComplexType
Sophus::Vector2< Scalar, Options > ComplexType
Definition: so2.hpp:30
Sophus::SO2::Dx_exp_x
static SOPHUS_FUNC Sophus::Matrix< Scalar, num_parameters, DoF > Dx_exp_x(Tangent const &theta)
Definition: so2.hpp:429
Sophus::SO2Base::operator=
SOPHUS_FUNC SO2Base & operator=(SO2Base const &other)=default
Eigen::Map< Sophus::SO2< Scalar_ > const, Options >::Map
SOPHUS_FUNC Map(Scalar const *coeffs)
Definition: so2.hpp:605
Sophus::SO2< Scalar, Options >::Point
typename Base::Point Point
Definition: so2.hpp:342
Sophus::SO2::vee
static SOPHUS_FUNC Tangent vee(Transformation const &Omega)
Definition: so2.hpp:521
Eigen::Map< Sophus::SO2< Scalar_ >, Options >::Point
typename Base::Point Point
Definition: so2.hpp:550
Sophus::SO2Base< Map< Sophus::SO2< Scalar_ > const, Options > >::Adjoint
Scalar Adjoint
Definition: so2.hpp:94
Sophus::SO2::unit_complex
SOPHUS_FUNC ComplexMember const & unit_complex() const
Definition: so2.hpp:408


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