joint-motion-subspace-generic.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2020 CNRS INRIA
3 // Copyright (c) 2016 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5 
6 #ifndef __pinocchio_multibody_constraint_generic_hpp__
7 #define __pinocchio_multibody_constraint_generic_hpp__
8 
9 namespace pinocchio
10 {
11 
12  template<int _Dim, typename _Scalar, int _Options, int _MaxDim>
13  struct traits<JointMotionSubspaceTpl<_Dim, _Scalar, _Options, _MaxDim>>
14  {
15  typedef _Scalar Scalar;
16  enum
17  {
18  LINEAR = 0,
19  ANGULAR = 3,
20  Options = _Options,
21  Dim = _Dim
22  };
23 
25  typedef Eigen::Matrix<Scalar, Dim, 1, Options, _MaxDim, 1> JointForce;
26  typedef Eigen::Matrix<Scalar, 6, Dim, Options, 6, _MaxDim> DenseBase;
27  typedef Eigen::Matrix<Scalar, Dim, Dim, Options, _MaxDim, _MaxDim> ReducedSquaredMatrix;
28 
29  typedef typename PINOCCHIO_EIGEN_REF_CONST_TYPE(DenseBase) ConstMatrixReturnType;
30  typedef typename PINOCCHIO_EIGEN_REF_TYPE(DenseBase) MatrixReturnType;
31 
33  }; // traits JointMotionSubspaceTpl
34 
35  template<int Dim, typename Scalar, int Options, int _MaxDim>
37  {
38  typedef Eigen::Matrix<Scalar, 6, Dim, Options, 6, _MaxDim> ReturnType;
39  };
40 
41  template<int Dim, typename Scalar, int Options, int MaxDim, typename MotionDerived>
42  struct MotionAlgebraAction<JointMotionSubspaceTpl<Dim, Scalar, Options, MaxDim>, MotionDerived>
43  {
44  typedef Eigen::Matrix<Scalar, 6, Dim, Options, 6, MaxDim> ReturnType;
45  };
46 
47  template<int Dim, typename Scalar, int Options, int MaxDim, typename ForceDerived>
48  struct ConstraintForceOp<JointMotionSubspaceTpl<Dim, Scalar, Options, MaxDim>, ForceDerived>
49  {
50  typedef
52  typedef Eigen::Matrix<Scalar, Dim, Dim, Options, MaxDim, MaxDim> ReturnType;
53  };
54 
55  template<int Dim, typename Scalar, int Options, int MaxDim, typename ForceSet>
57  {
58  typedef
60  typedef
62  };
63 
64  template<int _Dim, typename _Scalar, int _Options, int _MaxDim>
66  : public JointMotionSubspaceBase<JointMotionSubspaceTpl<_Dim, _Scalar, _Options, _MaxDim>>
67  {
68  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
69 
71 
74 
75  enum
76  {
77  NV = _Dim
78  };
79 
80  constexpr static int MaxNV = NV < 0 ? _MaxDim : NV;
81 
82  using Base::nv;
83 
84  template<typename D>
85  explicit JointMotionSubspaceTpl(const Eigen::MatrixBase<D> & _S)
86  : S(_S)
87  {
88  // There is currently a bug in Eigen/Core/util/StaticAssert.h in the use of the full namespace
89  // path
90  // TODO
91  EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(DenseBase, D);
92  }
93 
95  : S()
96  {
97  EIGEN_STATIC_ASSERT(
98  _Dim != Eigen::Dynamic, YOU_CALLED_A_DYNAMIC_SIZE_METHOD_ON_A_FIXED_SIZE_MATRIX_OR_VECTOR)
99  }
100 
101  // It is only valid for dynamics size
102  explicit JointMotionSubspaceTpl(const int dim)
103  : S(6, dim)
104  {
105  EIGEN_STATIC_ASSERT(
106  _Dim == Eigen::Dynamic, YOU_CALLED_A_FIXED_SIZE_METHOD_ON_A_DYNAMIC_SIZE_MATRIX_OR_VECTOR);
107  assert(_MaxDim < 0 || dim <= _MaxDim);
108  }
109 
110  // It is only valid for dynamics size
111  template<int D, int MD>
113  : S(subspace.matrix())
114  {
115  EIGEN_STATIC_ASSERT(
116  _Dim == Eigen::Dynamic, YOU_CALLED_A_FIXED_SIZE_METHOD_ON_A_DYNAMIC_SIZE_MATRIX_OR_VECTOR);
117  assert(_MaxDim < 0 || subspace.matrix().cols() <= _MaxDim);
118  }
119 
120  static JointMotionSubspaceTpl Zero(const int dim)
121  {
122  return JointMotionSubspaceTpl(dim);
123  }
124 
125  template<typename VectorLike>
126  JointMotion __mult__(const Eigen::MatrixBase<VectorLike> & vj) const
127  {
128  return JointMotion(S * vj);
129  }
130 
131  struct Transpose : JointMotionSubspaceTransposeBase<JointMotionSubspaceTpl>
132  {
135  : ref(ref)
136  {
137  }
138 
139  template<typename ForceDerived>
142  {
143  return (ref.S.transpose() * f.toVector()).eval();
144  }
145 
146  template<typename ForceSet>
148  operator*(const Eigen::MatrixBase<ForceSet> & F)
149  {
150  return ref.S.transpose() * F.derived();
151  }
152  };
153 
155  {
156  return Transpose(*this);
157  }
158 
159  MatrixReturnType matrix_impl()
160  {
161  return S;
162  }
163  ConstMatrixReturnType matrix_impl() const
164  {
165  return S;
166  }
167 
168  int nv_impl() const
169  {
170  return (int)S.cols();
171  }
172 
173  template<typename S2, int O2>
176  {
177  typedef typename JointMotionSubspaceTpl::DenseBase ReturnType;
178  ReturnType res(6, S.nv());
180  return res;
181  }
182 
183  template<typename S2, int O2>
184  friend Eigen::Matrix<_Scalar, 6, _Dim, _Options, 6, _MaxDim>
185  operator*(const Eigen::Matrix<S2, 6, 6, O2> & Ymatrix, const JointMotionSubspaceTpl & S)
186  {
187  typedef Eigen::Matrix<_Scalar, 6, _Dim, _Options, 6, _MaxDim> ReturnType;
188  return ReturnType(Ymatrix * S.matrix());
189  }
190 
191  DenseBase se3Action(const SE3Tpl<Scalar, Options> & m) const
192  {
193  DenseBase res(6, nv());
195  return res;
196  }
197 
198  DenseBase se3ActionInverse(const SE3Tpl<Scalar, Options> & m) const
199  {
200  DenseBase res(6, nv());
202  return res;
203  }
204 
205  template<typename MotionDerived>
206  DenseBase motionAction(const MotionDense<MotionDerived> & v) const
207  {
208  DenseBase res(6, nv());
210  return res;
211  }
212 
213  void disp_impl(std::ostream & os) const
214  {
215  os << "S =\n" << S << std::endl;
216  }
217 
218  bool isEqual(const JointMotionSubspaceTpl & other) const
219  {
220  return S == other.S;
221  }
222 
223  protected:
224  DenseBase S;
225  }; // class JointMotionSubspaceTpl
226 
227  namespace details
228  {
229  template<int Dim, typename Scalar, int Options, int MaxDim>
231  {
234 
236  {
237  return constraint.matrix().transpose() * constraint.matrix();
238  }
239  };
240  } // namespace details
241 
242 } // namespace pinocchio
243 
244 #endif // ifndef __pinocchio_multibody_constraint_generic_hpp__
pinocchio::JointMotionSubspaceTpl::motionAction
DenseBase motionAction(const MotionDense< MotionDerived > &v) const
Definition: joint-motion-subspace-generic.hpp:206
pinocchio::InertiaTpl
Definition: context/generic.hpp:33
pinocchio::MatrixMatrixProduct
Definition: math/matrix.hpp:68
common_symbols.type
type
Definition: common_symbols.py:34
pinocchio::JointMotionSubspaceBase< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::nv
int nv() const
Definition: joint-motion-subspace-base.hpp:91
test-cpp2pybind11.m
m
Definition: test-cpp2pybind11.py:25
pinocchio::JointMotionSubspaceTpl::NV
@ NV
Definition: joint-motion-subspace-generic.hpp:77
pinocchio::JointMotionSubspaceTpl::se3Action
DenseBase se3Action(const SE3Tpl< Scalar, Options > &m) const
Definition: joint-motion-subspace-generic.hpp:191
pinocchio::motionSet::inertiaAction
static void inertiaAction(const InertiaTpl< Scalar, Options > &I, const Eigen::MatrixBase< Mat > &iF, Eigen::MatrixBase< MatRet > const &jF)
Action of an Inertia matrix on a set of motions, represented by a 6xN matrix whose columns represent ...
pinocchio::ConstraintForceSetOp< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim >, ForceSet >::ReturnType
MatrixMatrixProduct< Eigen::Transpose< const DenseBase >, ForceSet >::type ReturnType
Definition: joint-motion-subspace-generic.hpp:61
pinocchio::ConstraintForceOp
Return type of the Constraint::Transpose * Force operation.
Definition: joint-motion-subspace-base.hpp:46
pinocchio::Options
Options
Definition: joint-configuration.hpp:1082
pinocchio::motionSet::motionAction
static void motionAction(const MotionDense< MotionDerived > &v, const Eigen::MatrixBase< Mat > &iF, Eigen::MatrixBase< MatRet > const &jF)
Action of a motion on a set of motions, represented by a 6xN matrix whose columns represent a spatial...
pinocchio::JointMotionSubspaceBase
Definition: joint-motion-subspace-base.hpp:59
pinocchio::ConstraintForceOp< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim >, ForceDerived >::DenseBase
traits< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim > >::DenseBase DenseBase
Definition: joint-motion-subspace-generic.hpp:51
pinocchio::SE3Tpl< Scalar, Options >
pinocchio::JointMotionSubspaceTpl::__mult__
JointMotion __mult__(const Eigen::MatrixBase< VectorLike > &vj) const
Definition: joint-motion-subspace-generic.hpp:126
pinocchio::traits< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::StDiagonalMatrixSOperationReturnType
ReducedSquaredMatrix StDiagonalMatrixSOperationReturnType
Definition: joint-motion-subspace-generic.hpp:32
pinocchio::details::StDiagonalMatrixSOperation< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim > >::run
static ReturnType run(const JointMotionSubspaceBase< Constraint > &constraint)
Definition: joint-motion-subspace-generic.hpp:235
pinocchio::PINOCCHIO_EIGEN_REF_CONST_TYPE
PINOCCHIO_EIGEN_REF_CONST_TYPE(Matrix6Like) operator*(const Eigen
Definition: joint-free-flyer.hpp:144
pinocchio::traits< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::Scalar
_Scalar Scalar
Definition: joint-motion-subspace-generic.hpp:15
pinocchio::JointMotionSubspaceTpl::nv_impl
int nv_impl() const
Definition: joint-motion-subspace-generic.hpp:168
pinocchio::MotionDense
Definition: context/casadi.hpp:37
pinocchio::ConstraintForceOp::ReturnType
ReturnTypeNotDefined ReturnType
Definition: joint-motion-subspace-base.hpp:48
pinocchio::JointMotionSubspaceTpl::Transpose::operator*
ConstraintForceOp< JointMotionSubspaceTpl, ForceDerived >::ReturnType operator*(const ForceDense< ForceDerived > &f) const
Definition: joint-motion-subspace-generic.hpp:141
pinocchio::res
ReturnType res
Definition: spatial/classic-acceleration.hpp:57
pinocchio::JointMotionSubspaceTpl::Transpose
Definition: joint-motion-subspace-generic.hpp:131
pinocchio::MotionAlgebraAction
Return type of the ation of a Motion onto an object of type D.
Definition: spatial/motion.hpp:45
autodiff-rnea.f
f
Definition: autodiff-rnea.py:24
pinocchio::details::StDiagonalMatrixSOperation< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim > >::Constraint
JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim > Constraint
Definition: joint-motion-subspace-generic.hpp:232
pinocchio::ConstraintForceOp< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim >, ForceDerived >::ReturnType
Eigen::Matrix< Scalar, Dim, Dim, Options, MaxDim, MaxDim > ReturnType
Definition: joint-motion-subspace-generic.hpp:52
pinocchio::motionSet::se3ActionInverse
static void se3ActionInverse(const SE3Tpl< Scalar, Options > &m, const Eigen::MatrixBase< Mat > &iV, Eigen::MatrixBase< MatRet > const &jV)
Inverse SE3 action on a set of motions, represented by a 6xN matrix whose column represent a spatial ...
pinocchio::JointMotionSubspaceTpl::JointMotionSubspaceTpl
JointMotionSubspaceTpl(const Eigen::MatrixBase< D > &_S)
Definition: joint-motion-subspace-generic.hpp:85
pinocchio::SE3GroupAction
Definition: spatial/se3.hpp:39
pinocchio::traits< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::DenseBase
Eigen::Matrix< Scalar, 6, Dim, Options, 6, _MaxDim > DenseBase
Definition: joint-motion-subspace-generic.hpp:26
pinocchio::JointMotionSubspaceTpl::se3ActionInverse
DenseBase se3ActionInverse(const SE3Tpl< Scalar, Options > &m) const
Definition: joint-motion-subspace-generic.hpp:198
pinocchio::JointMotionSubspaceBase< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::matrix
MatrixReturnType matrix()
Definition: joint-motion-subspace-base.hpp:82
pinocchio::ConstraintForceSetOp::ReturnType
ReturnTypeNotDefined ReturnType
Definition: joint-motion-subspace-base.hpp:55
pinocchio::JointMotionSubspaceTpl::Transpose::operator*
ConstraintForceSetOp< JointMotionSubspaceTpl, ForceSet >::ReturnType operator*(const Eigen::MatrixBase< ForceSet > &F)
Definition: joint-motion-subspace-generic.hpp:148
pinocchio::traits< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::JointForce
Eigen::Matrix< Scalar, Dim, 1, Options, _MaxDim, 1 > JointForce
Definition: joint-motion-subspace-generic.hpp:25
details
pinocchio::JointMotionSubspaceTpl::Transpose::Transpose
Transpose(const JointMotionSubspaceTpl &ref)
Definition: joint-motion-subspace-generic.hpp:134
pinocchio::JointMotionSubspaceTpl::transpose
Transpose transpose() const
Definition: joint-motion-subspace-generic.hpp:154
pinocchio::Dynamic
const int Dynamic
Definition: fwd.hpp:140
pinocchio::JointMotionSubspaceTpl::Base
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointMotionSubspaceBase< JointMotionSubspaceTpl > Base
Definition: joint-motion-subspace-generic.hpp:70
D
D
pinocchio::JointMotionSubspaceTpl::matrix_impl
MatrixReturnType matrix_impl()
Definition: joint-motion-subspace-generic.hpp:159
pinocchio::JointMotionSubspaceTpl::S
DenseBase S
Definition: joint-motion-subspace-generic.hpp:224
pinocchio::JointMotionSubspaceTpl::matrix_impl
ConstMatrixReturnType matrix_impl() const
Definition: joint-motion-subspace-generic.hpp:163
pinocchio::JointMotionSubspaceTpl::Transpose::ref
const JointMotionSubspaceTpl & ref
Definition: joint-motion-subspace-generic.hpp:133
pinocchio::traits< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::JointMotion
MotionTpl< Scalar, Options > JointMotion
Definition: joint-motion-subspace-generic.hpp:24
pinocchio::JointMotionSubspaceTpl::isEqual
bool isEqual(const JointMotionSubspaceTpl &other) const
Definition: joint-motion-subspace-generic.hpp:218
pinocchio::ForceSetTpl
Definition: force-set.hpp:14
pinocchio::v
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > const Eigen::MatrixBase< TangentVectorType > & v
Definition: joint-configuration.hpp:1084
pinocchio::JointMotionSubspaceTpl::JointMotionSubspaceTpl
JointMotionSubspaceTpl(const JointMotionSubspaceTpl< D, _Scalar, _Options, MD > subspace)
Definition: joint-motion-subspace-generic.hpp:112
pinocchio::JointMotionSubspaceTpl::MaxNV
constexpr static int MaxNV
Definition: joint-motion-subspace-generic.hpp:80
pinocchio::ConstraintForceSetOp
Return type of the Constraint::Transpose * ForceSet operation.
Definition: joint-motion-subspace-base.hpp:53
pinocchio::traits< JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim > >::ReducedSquaredMatrix
Eigen::Matrix< Scalar, Dim, Dim, Options, _MaxDim, _MaxDim > ReducedSquaredMatrix
Definition: joint-motion-subspace-generic.hpp:27
pinocchio::JointMotionSubspaceTpl::disp_impl
void disp_impl(std::ostream &os) const
Definition: joint-motion-subspace-generic.hpp:213
pinocchio::ForceDense
Definition: context/casadi.hpp:35
pinocchio::MotionAlgebraAction< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim >, MotionDerived >::ReturnType
Eigen::Matrix< Scalar, 6, Dim, Options, 6, MaxDim > ReturnType
Definition: joint-motion-subspace-generic.hpp:44
pinocchio::details::StDiagonalMatrixSOperation< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim > >::ReturnType
traits< Constraint >::StDiagonalMatrixSOperationReturnType ReturnType
Definition: joint-motion-subspace-generic.hpp:233
pinocchio::SE3GroupAction< JointMotionSubspaceTpl< Dim, Scalar, Options, _MaxDim > >::ReturnType
Eigen::Matrix< Scalar, 6, Dim, Options, 6, _MaxDim > ReturnType
Definition: joint-motion-subspace-generic.hpp:38
pinocchio::details::StDiagonalMatrixSOperation
Definition: joint-motion-subspace-base.hpp:172
pinocchio::ConstraintForceSetOp< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim >, ForceSet >::DenseBase
traits< JointMotionSubspaceTpl< Dim, Scalar, Options, MaxDim > >::DenseBase DenseBase
Definition: joint-motion-subspace-generic.hpp:59
PINOCCHIO_CONSTRAINT_TYPEDEF_TPL
#define PINOCCHIO_CONSTRAINT_TYPEDEF_TPL(DERIVED)
Definition: joint-motion-subspace-base.hpp:36
Y
Y
pinocchio::JointMotionSubspaceTpl::JointMotionSubspaceTpl
JointMotionSubspaceTpl(const int dim)
Definition: joint-motion-subspace-generic.hpp:102
codegen-rnea.nv
nv
Definition: codegen-rnea.py:19
pinocchio::JointMotionSubspaceTpl::JointMotionSubspaceTpl
JointMotionSubspaceTpl()
Definition: joint-motion-subspace-generic.hpp:94
pinocchio::traits
Common traits structure to fully define base classes for CRTP.
Definition: fwd.hpp:71
PINOCCHIO_EIGEN_REF_TYPE
#define PINOCCHIO_EIGEN_REF_TYPE(D)
Definition: eigen-macros.hpp:32
dim
int dim
pinocchio::JointMotionSubspaceTpl::operator*
friend JointMotionSubspaceTpl< _Dim, _Scalar, _Options, _MaxDim >::DenseBase operator*(const InertiaTpl< S2, O2 > &Y, const JointMotionSubspaceTpl &S)
Definition: joint-motion-subspace-generic.hpp:175
pinocchio::motionSet::se3Action
static void se3Action(const SE3Tpl< Scalar, Options > &m, const Eigen::MatrixBase< Mat > &iV, Eigen::MatrixBase< MatRet > const &jV)
SE3 action on a set of motions, represented by a 6xN matrix whose column represent a spatial motion.
pinocchio::JointMotionSubspaceTpl::operator*
friend Eigen::Matrix< _Scalar, 6, _Dim, _Options, 6, _MaxDim > operator*(const Eigen::Matrix< S2, 6, 6, O2 > &Ymatrix, const JointMotionSubspaceTpl &S)
Definition: joint-motion-subspace-generic.hpp:185
pinocchio::JointMotionSubspaceTransposeBase
Definition: joint-motion-subspace-base.hpp:185
pinocchio::MotionTpl< Scalar, Options >
Scalar
double Scalar
Definition: timings-cppad-jit.cpp:37
pinocchio::JointMotionSubspaceTpl
Definition: joint-motion-subspace-generic.hpp:65
pinocchio::JointMotionSubspaceTpl::Zero
static JointMotionSubspaceTpl Zero(const int dim)
Definition: joint-motion-subspace-generic.hpp:120
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33


pinocchio
Author(s):
autogenerated on Thu Apr 10 2025 02:42:19