pinocchio  2.1.3
se3-base.hpp
1 //
2 // Copyright (c) 2015-2018 CNRS
3 // Copyright (c) 2016 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5 
6 #ifndef __pinocchio_se3_base_hpp__
7 #define __pinocchio_se3_base_hpp__
8 
9 namespace pinocchio
10 {
23  template<class Derived>
24  struct SE3Base
25  {
26  PINOCCHIO_SE3_TYPEDEF_TPL(Derived);
27 
28  Derived & derived() { return *static_cast<Derived*>(this); }
29  const Derived& derived() const { return *static_cast<const Derived*>(this); }
30 
31  ConstAngularRef rotation() const { return derived().rotation_impl(); }
32  ConstLinearRef translation() const { return derived().translation_impl(); }
33  AngularRef rotation() { return derived().rotation_impl(); }
34  LinearRef translation() { return derived().translation_impl(); }
35  void rotation(const AngularType & R) { derived().rotation_impl(R); }
36  void translation(const LinearType & t) { derived().translation_impl(t); }
37 
38  HomogeneousMatrixType toHomogeneousMatrix() const
39  {
40  return derived().toHomogeneousMatrix_impl();
41  }
42  operator HomogeneousMatrixType() const { return toHomogeneousMatrix(); }
43 
44  ActionMatrixType toActionMatrix() const
45  {
46  return derived().toActionMatrix_impl();
47  }
48  operator ActionMatrixType() const { return toActionMatrix(); }
49 
50  ActionMatrixType toDualActionMatrix() const
51  { return derived().toDualActionMatrix_impl(); }
52 
53  void disp(std::ostream & os) const
54  {
55  static_cast<const Derived*>(this)->disp_impl(os);
56  }
57 
59  operator*(const Derived & m2) const
60  { return derived().__mult__(m2); }
61 
63  template<typename D>
65  act(const D & d) const
66  {
67  return derived().act_impl(d);
68  }
69 
71  template<typename D> typename internal::SE3GroupAction<D>::ReturnType
72  actInv(const D & d) const
73  {
74  return derived().actInv_impl(d);
75  }
76 
77  bool operator==(const Derived & other) const
78  { return derived().__equal__(other); }
79 
80  bool operator!=(const Derived & other) const
81  { return !(*this == other); }
82 
83  bool isApprox(const Derived & other, const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision()) const
84  {
85  return derived().isApprox_impl(other, prec);
86  }
87 
88  friend std::ostream & operator <<(std::ostream & os,const SE3Base<Derived> & X)
89  {
90  X.disp(os);
91  return os;
92  }
93 
97  bool isIdentity(const typename traits<Derived>::Scalar & prec = Eigen::NumTraits<typename traits<Derived>::Scalar>::dummy_precision()) const
98  {
99  return derived().isIdentity(prec);
100  }
101 
102  }; // struct SE3Base
103 
104 } // namespace pinocchio
105 
106 #endif // ifndef __pinocchio_se3_base_hpp__
internal::SE3GroupAction< D >::ReturnType act(const D &d) const
ay = aXb.act(by)
Definition: se3-base.hpp:65
internal::SE3GroupAction< D >::ReturnType actInv(const D &d) const
by = aXb.actInv(ay)
Definition: se3-base.hpp:72
Main pinocchio namespace.
Definition: treeview.dox:24
Common traits structure to fully define base classes for CRTP.
Definition: spatial/fwd.hpp:29
bool isIdentity(const typename traits< Derived >::Scalar &prec=Eigen::NumTraits< typename traits< Derived >::Scalar >::dummy_precision()) const
Definition: se3-base.hpp:97