spatial-axis.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2017-2019 CNRS INRIA
3 //
4 
5 #ifndef __pinocchio_spatial_axis_hpp__
6 #define __pinocchio_spatial_axis_hpp__
7 
12 
13 namespace pinocchio
14 {
15  template<int axis> struct SpatialAxis;
16 
17  template<int axis, typename MotionDerived>
18  struct MotionAlgebraAction<SpatialAxis<axis>, MotionDerived>
19  { typedef typename MotionDerived::MotionPlain ReturnType; };
20 
21  template<int _axis>
22  struct SpatialAxis //: MotionBase< SpatialAxis<_axis> >
23  {
24  enum { axis = _axis, dim = 6 };
26 
27  enum { LINEAR = 0, ANGULAR = 3 };
28 
29  template<typename Derived1, typename Derived2>
30  inline static void cross(const MotionDense<Derived1> & min,
31  const MotionDense<Derived2> & mout);
32 
33  template<typename Derived>
35  {
37  cross(min,res);
38  return res;
39  }
40 
41  template<typename Derived1, typename Derived2>
42  inline static void cross(const ForceDense<Derived1> & fin,
43  const ForceDense<Derived2> & fout);
44 
45  template<typename Derived>
47  {
48  typename ForceDense<Derived>::ForcePlain fout;
49  cross(fin,fout);
50  return fout;
51  }
52 
53  template<typename Scalar>
55  {
56  typedef MotionTpl<Scalar> ReturnType;
57  ReturnType res;
58  for(Eigen::DenseIndex i = 0; i < dim; ++i)
59  res.toVector()[i] = i == axis ? s : Scalar(0);
60 
61  return res;
62  }
63 
64  template<typename Scalar>
65  friend inline MotionTpl<Scalar>
66  operator*(const Scalar & s, const SpatialAxis &)
67  {
68  return SpatialAxis() * s;
69  }
70 
71  template<typename Derived>
72  friend Derived & operator<<(MotionDense<Derived> & min,
73  const SpatialAxis &)
74  {
75  typedef typename traits<Derived>::Scalar Scalar;
76  min.setZero();
77  min.toVector()[axis] = Scalar(1);
78  return min.derived();
79  }
80 
81  template<typename MotionDerived>
82  typename MotionDerived::MotionPlain
84  {
85  typename MotionDerived::MotionPlain res;
86  if((LINEAR == 0 && axis<3) || (LINEAR == 3 && axis >= 3))
87  {
88  res.angular().setZero();
89  CartesianAxis3::cross(-m.angular(),res.linear());
90  }
91  else
92  {
93  CartesianAxis3::cross(-m.linear(),res.linear());
94  CartesianAxis3::cross(-m.angular(),res.angular());
95  }
96 
97  return res;
98  }
99 
100  }; // struct SpatialAxis
101 
102  template<int axis>
103  template<typename Derived1, typename Derived2>
105  const MotionDense<Derived2> & mout)
106  {
107  Derived2 & mout_ = PINOCCHIO_EIGEN_CONST_CAST(Derived2,mout);
108 
109  if((LINEAR == 0 && axis<3) || (LINEAR == 3 && axis >= 3))
110  {
111  mout_.angular().setZero();
112  CartesianAxis3::cross(min.angular(),mout_.linear());
113  }
114  else
115  {
116  CartesianAxis3::cross(min.linear(),mout_.linear());
117  CartesianAxis3::cross(min.angular(),mout_.angular());
118  }
119  }
120 
121  template<int axis>
122  template<typename Derived1, typename Derived2>
124  const ForceDense<Derived2> & fout)
125  {
126  Derived2 & fout_ = PINOCCHIO_EIGEN_CONST_CAST(Derived2,fout);
127 
128  if((LINEAR == 0 && axis<3) || (LINEAR == 3 && axis >= 3))
129  {
130  fout_.linear().setZero();
131  CartesianAxis3::cross(fin.linear(),fout_.angular());
132  }
133  else
134  {
135  CartesianAxis3::cross(fin.linear(),fout_.linear());
136  CartesianAxis3::cross(fin.angular(),fout_.angular());
137  }
138  }
139 
143 
147 }
148 
149 #endif // __pinocchio_spatial_axis_hpp__
m
float m
pinocchio::ForceDense::linear
ConstLinearType linear() const
Return the linear part of the force vector.
Definition: force-base.hpp:42
fwd.hpp
pinocchio::CartesianAxis::cross
static void cross(const Eigen::MatrixBase< V3_in > &vin, const Eigen::MatrixBase< V3_out > &vout)
pinocchio::AxisWY
SpatialAxis< 4 > AxisWY
Definition: spatial-axis.hpp:145
pinocchio::AxisVX
SpatialAxis< 0 > AxisVX
Definition: spatial-axis.hpp:140
PINOCCHIO_EIGEN_CONST_CAST
#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ)
Macro for an automatic const_cast.
Definition: eigen-macros.hpp:43
pinocchio::SpatialAxis::cross
static traits< Derived >::ForcePlain cross(const ForceDense< Derived > &fin)
Definition: spatial-axis.hpp:46
inverse-kinematics.i
int i
Definition: inverse-kinematics.py:20
pinocchio::MotionDense
Definition: spatial/fwd.hpp:41
pinocchio::AxisVY
SpatialAxis< 1 > AxisVY
Definition: spatial-axis.hpp:141
pinocchio::MotionAlgebraAction
Return type of the ation of a Motion onto an object of type D.
Definition: spatial/motion.hpp:46
motion.hpp
pinocchio::AxisWZ
SpatialAxis< 5 > AxisWZ
Definition: spatial-axis.hpp:146
res
res
meshcat-viewer-dae.s
s
Definition: meshcat-viewer-dae.py:26
pinocchio::python::Scalar
SE3::Scalar Scalar
Definition: conversions.cpp:15
pinocchio::SpatialAxis::operator*
friend MotionTpl< Scalar > operator*(const Scalar &s, const SpatialAxis &)
Definition: spatial-axis.hpp:66
cartesian-axis.hpp
pinocchio::SpatialAxis::operator<<
friend Derived & operator<<(MotionDense< Derived > &min, const SpatialAxis &)
Definition: spatial-axis.hpp:72
axis
axis
pinocchio::SpatialAxis::cross
static void cross(const MotionDense< Derived1 > &min, const MotionDense< Derived2 > &mout)
Definition: spatial-axis.hpp:104
pinocchio::SpatialAxis::CartesianAxis3
CartesianAxis< _axis%3 > CartesianAxis3
Definition: spatial-axis.hpp:25
pinocchio::cholesky::min
JointCollectionTpl const DataTpl< Scalar, Options, JointCollectionTpl > const Eigen::MatrixBase< Mat > & min
Definition: cholesky.hpp:73
pinocchio::MotionAlgebraAction< SpatialAxis< axis >, MotionDerived >::ReturnType
MotionDerived::MotionPlain ReturnType
Definition: spatial-axis.hpp:19
pinocchio::SpatialAxis::operator*
MotionTpl< Scalar > operator*(const Scalar &s) const
Definition: spatial-axis.hpp:54
pinocchio::SpatialAxis::ANGULAR
@ ANGULAR
Definition: spatial-axis.hpp:27
pinocchio::ForceDense
Definition: force-dense.hpp:24
pinocchio::SpatialAxis::cross
static traits< Derived >::MotionPlain cross(const MotionDense< Derived > &min)
Definition: spatial-axis.hpp:34
pinocchio::SpatialAxis::dim
@ dim
Definition: spatial-axis.hpp:24
pinocchio::AxisWX
SpatialAxis< 3 > AxisWX
Definition: spatial-axis.hpp:144
pinocchio::traits
Common traits structure to fully define base classes for CRTP.
Definition: fwd.hpp:44
pinocchio::SpatialAxis::LINEAR
@ LINEAR
Definition: spatial-axis.hpp:27
pinocchio::MotionTpl
Definition: spatial/fwd.hpp:43
pinocchio.utils.cross
def cross(a, b)
Definition: bindings/python/pinocchio/utils.py:43
pinocchio::AxisVZ
SpatialAxis< 2 > AxisVZ
Definition: spatial-axis.hpp:142
force.hpp
pinocchio::SpatialAxis
Definition: spatial-axis.hpp:15
pinocchio::SpatialAxis::motionAction
MotionDerived::MotionPlain motionAction(const MotionDense< MotionDerived > &m) const
Definition: spatial-axis.hpp:83
pinocchio::ForceDense::angular
ConstAngularType angular() const
Return the angular part of the force vector.
Definition: force-base.hpp:35
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:28
pinocchio::SpatialAxis::axis
@ axis
Definition: spatial-axis.hpp:24
pinocchio::CartesianAxis
Definition: cartesian-axis.hpp:14


pinocchio
Author(s):
autogenerated on Tue Feb 13 2024 03:44:00