pinocchio  2.1.3
motion-base.hpp
1 //
2 // Copyright (c) 2015-2018 CNRS
3 // Copyright (c) 2015-2016 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5 
6 #ifndef __pinocchio_motion_base_hpp__
7 #define __pinocchio_motion_base_hpp__
8 
9 namespace pinocchio
10 {
11 
12  template<class Derived>
13  class MotionBase
14  {
15  public:
16  MOTION_TYPEDEF_TPL(Derived);
17 
18  Derived & derived() { return *static_cast<Derived*>(this); }
19  const Derived & derived() const { return *static_cast<const Derived*>(this); }
20 
21  ConstAngularType angular() const { return derived().angular_impl(); }
22  ConstLinearType linear() const { return derived().linear_impl(); }
23  AngularType angular() { return derived().angular_impl(); }
24  LinearType linear() { return derived().linear_impl(); }
25 
26  template<typename V3Like>
27  void angular(const Eigen::MatrixBase<V3Like> & w)
28  { derived().angular_impl(w.derived()); }
29 
30  template<typename V3Like>
31  void linear(const Eigen::MatrixBase<V3Like> & v)
32  { derived().linear_impl(v.derived()); }
33 
34  ToVectorConstReturnType toVector() const { return derived().toVector_impl(); }
35  ToVectorReturnType toVector() { return derived().toVector_impl(); }
36  operator Vector6() const { return toVector(); }
37 
38  ActionMatrixType toActionMatrix() const { return derived().toActionMatrix_impl(); }
39  ActionMatrixType toDualActionMatrix() const { return derived().toDualActionMatrix_impl(); }
40  operator Matrix6() const { return toActionMatrix(); }
41 
42  void setZero() { derived().setZero(); }
43 
44  template<typename M2>
45  bool operator==(const MotionBase<M2> & other) const
46  { return derived().isEqual_impl(other.derived()); }
47 
48  template<typename M2>
49  bool operator!=(const MotionBase<M2> & other) const
50  { return !(derived() == other.derived()); }
51 
52  Derived operator-() const { return derived().__opposite__(); }
53  Derived operator+(const MotionBase<Derived> & v) const { return derived().__plus__(v.derived()); }
54  Derived operator-(const MotionBase<Derived> & v) const { return derived().__minus__(v.derived()); }
55  Derived & operator+=(const MotionBase<Derived> & v) { return derived().__pequ__(v.derived()); }
56  Derived & operator-=(const MotionBase<Derived> & v) { return derived().__mequ__(v.derived()); }
57 
58  template<typename OtherScalar>
59  MotionPlain operator*(const OtherScalar & alpha) const
60  { return derived().__mult__(alpha); }
61  template<typename OtherScalar>
62  MotionPlain operator/(const OtherScalar & alpha) const
63  { return derived().__div__(alpha); }
64 
65  template<typename OtherSpatialType>
66  typename internal::MotionAlgebraAction<OtherSpatialType,Derived>::ReturnType
67  cross(const OtherSpatialType & d) const
68  {
69  return derived().cross_impl(d);
70  }
71 
72  bool isApprox(const Derived & other, const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision()) const
73  { return derived().isApprox_impl(other, prec);}
74 
75  template<typename S2, int O2>
76  typename internal::SE3GroupAction<Derived>::ReturnType
77  se3Action(const SE3Tpl<S2,O2> & m) const
78  { return derived().se3Action_impl(m); }
79 
80  template<typename S2, int O2>
81  typename internal::SE3GroupAction<Derived>::ReturnType
82  se3ActionInverse(const SE3Tpl<S2,O2> & m) const
83  { return derived().se3ActionInverse_impl(m); }
84 
85  template<typename ForceDerived>
86  Scalar dot(const ForceDense<ForceDerived> & f) const { return derived().dot(f.derived()); }
87 
88  void disp(std::ostream & os) const { derived().disp_impl(os); }
89  friend std::ostream & operator << (std::ostream & os, const MotionBase<Derived> & v)
90  {
91  v.disp(os);
92  return os;
93  }
94 
95  }; // class MotionBase
96 
97 } // namespace pinocchio
98 
99 #endif // ifndef __pinocchio_motion_base_hpp__
Main pinocchio namespace.
Definition: treeview.dox:24