joint-prismatic-unaligned.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2019 CNRS INRIA
3 // Copyright (c) 2016 Wandercraft, 86 rue de Paris 91400 Orsay, France.
4 //
5 
6 #ifndef __pinocchio_joint_prismatic_unaligned_hpp__
7 #define __pinocchio_joint_prismatic_unaligned_hpp__
8 
9 #include "pinocchio/macros.hpp"
10 #include "pinocchio/multibody/joint/joint-base.hpp"
11 #include "pinocchio/multibody/joint/joint-translation.hpp"
12 #include "pinocchio/multibody/constraint.hpp"
13 #include "pinocchio/spatial/inertia.hpp"
14 #include "pinocchio/math/matrix.hpp"
15 
16 namespace pinocchio
17 {
18 
19  template<typename Scalar, int Options=0> struct MotionPrismaticUnalignedTpl;
21 
22  template<typename Scalar, int Options>
24  {
26  };
27 
28  template<typename Scalar, int Options, typename MotionDerived>
30  {
32  };
33 
34  template<typename _Scalar, int _Options>
35  struct traits< MotionPrismaticUnalignedTpl<_Scalar,_Options> >
36  {
37  typedef _Scalar Scalar;
38  enum { Options = _Options };
39  typedef Eigen::Matrix<Scalar,3,1,Options> Vector3;
40  typedef Eigen::Matrix<Scalar,6,1,Options> Vector6;
41  typedef Eigen::Matrix<Scalar,4,4,Options> Matrix4;
42  typedef Eigen::Matrix<Scalar,6,6,Options> Matrix6;
43  typedef typename PINOCCHIO_EIGEN_REF_CONST_TYPE(Vector6) ToVectorConstReturnType;
44  typedef typename PINOCCHIO_EIGEN_REF_TYPE(Vector6) ToVectorReturnType;
45  typedef Vector3 AngularType;
46  typedef Vector3 LinearType;
47  typedef const Vector3 ConstAngularType;
48  typedef const Vector3 ConstLinearType;
49  typedef Matrix6 ActionMatrixType;
50  typedef Matrix4 HomogeneousMatrixType;
52  typedef MotionPlain PlainReturnType;
53  enum {
54  LINEAR = 0,
55  ANGULAR = 3
56  };
57  }; // traits MotionPrismaticUnalignedTpl
58 
59  template<typename _Scalar, int _Options>
61  : MotionBase < MotionPrismaticUnalignedTpl<_Scalar,_Options> >
62  {
63  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
65 
67 
68  template<typename Vector3Like, typename S2>
69  MotionPrismaticUnalignedTpl(const Eigen::MatrixBase<Vector3Like> & axis,
70  const S2 & v)
71  : m_axis(axis), m_v(v)
72  { EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector3Like,3); }
73 
74  inline PlainReturnType plain() const
75  {
76  return PlainReturnType(m_axis*m_v,
77  PlainReturnType::Vector3::Zero());
78  }
79 
80  template<typename OtherScalar>
81  MotionPrismaticUnalignedTpl __mult__(const OtherScalar & alpha) const
82  {
83  return MotionPrismaticUnalignedTpl(m_axis,alpha*m_v);
84  }
85 
86  template<typename Derived>
87  void addTo(MotionDense<Derived> & other) const
88  {
89  other.linear() += m_axis * m_v;
90  }
91 
92  template<typename Derived>
93  void setTo(MotionDense<Derived> & other) const
94  {
95  other.linear().noalias() = m_axis*m_v;
96  other.angular().setZero();
97  }
98 
99  template<typename S2, int O2, typename D2>
101  {
102  v.linear().noalias() = m_v * (m.rotation() * m_axis); // TODO: check efficiency
103  v.angular().setZero();
104  }
105 
106  template<typename S2, int O2>
107  MotionPlain se3Action_impl(const SE3Tpl<S2,O2> & m) const
108  {
109  MotionPlain res;
110  se3Action_impl(m,res);
111  return res;
112  }
113 
114  template<typename S2, int O2, typename D2>
116  {
117  // Linear
118  v.linear().noalias() = m_v * (m.rotation().transpose() * m_axis);
119 
120  // Angular
121  v.angular().setZero();
122  }
123 
124  template<typename S2, int O2>
125  MotionPlain se3ActionInverse_impl(const SE3Tpl<S2,O2> & m) const
126  {
127  MotionPlain res;
128  se3ActionInverse_impl(m,res);
129  return res;
130  }
131 
132  template<typename M1, typename M2>
133  void motionAction(const MotionDense<M1> & v, MotionDense<M2> & mout) const
134  {
135  // Linear
136  mout.linear().noalias() = v.angular().cross(m_axis);
137  mout.linear() *= m_v;
138 
139  // Angular
140  mout.angular().setZero();
141  }
142 
143  template<typename M1>
144  MotionPlain motionAction(const MotionDense<M1> & v) const
145  {
146  MotionPlain res;
147  motionAction(v,res);
148  return res;
149  }
150 
151  bool isEqual_impl(const MotionPrismaticUnalignedTpl & other) const
152  {
153  return m_axis == other.m_axis && m_v == other.m_v;
154  }
155 
156  const Scalar & linearRate() const { return m_v; }
157  Scalar & linearRate() { return m_v; }
158 
159  const Vector3 & axis() const { return m_axis; }
160  Vector3 & axis() { return m_axis; }
161 
162  protected:
163 
164  Vector3 m_axis;
166  }; // struct MotionPrismaticUnalignedTpl
167 
168  template<typename Scalar, int Options, typename MotionDerived>
169  inline typename MotionDerived::MotionPlain
171  {
172  typedef typename MotionDerived::MotionPlain ReturnType;
173  return ReturnType(m1.linearRate() * m1.axis() + m2.linear(), m2.angular());
174  }
175 
176  template<typename MotionDerived, typename S2, int O2>
177  inline typename MotionDerived::MotionPlain
180  {
181  return m2.motionAction(m1);
182  }
183 
184  template<typename Scalar, int Options> struct ConstraintPrismaticUnalignedTpl;
185 
186  template<typename _Scalar, int _Options>
187  struct traits< ConstraintPrismaticUnalignedTpl<_Scalar,_Options> >
188  {
189  typedef _Scalar Scalar;
190  enum { Options = _Options };
191  enum {
192  LINEAR = 0,
193  ANGULAR = 3
194  };
196  typedef Eigen::Matrix<Scalar,1,1,Options> JointForce;
197  typedef Eigen::Matrix<Scalar,6,1,Options> DenseBase;
198  typedef DenseBase MatrixReturnType;
199  typedef const DenseBase ConstMatrixReturnType;
200 
201  typedef Eigen::Matrix<Scalar,3,1,Options> Vector3;
202  }; // traits ConstraintPrismaticUnalignedTpl
203 
204  template<typename Scalar, int Options>
206  { typedef Eigen::Matrix<Scalar,6,1,Options> ReturnType; };
207 
208  template<typename Scalar, int Options, typename MotionDerived>
210  { typedef Eigen::Matrix<Scalar,6,1,Options> ReturnType; };
211 
212  template<typename Scalar, int Options, typename ForceDerived>
214  {
216  typedef Eigen::Matrix<typename PINOCCHIO_EIGEN_DOT_PRODUCT_RETURN_TYPE(Vector3,typename ForceDense<ForceDerived>::ConstAngularType),1,1,Options> ReturnType;
217  };
218 
219  template<typename Scalar, int Options, typename ForceSet>
221  {
224  typename Eigen::MatrixBase<const ForceSet>::template NRowsBlockXpr<3>::Type
226  };
227 
228  template<typename _Scalar, int _Options>
230  : ConstraintBase< ConstraintPrismaticUnalignedTpl<_Scalar,_Options> >
231  {
232  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
234 
235  enum { NV = 1 };
236 
238 
240 
241  template<typename Vector3Like>
242  ConstraintPrismaticUnalignedTpl(const Eigen::MatrixBase<Vector3Like> & axis)
243  : m_axis(axis)
244  { EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector3Like,3); }
245 
246  template<typename Vector1Like>
247  JointMotion __mult__(const Eigen::MatrixBase<Vector1Like> & v) const
248  {
249  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Vector1Like,1);
250  return JointMotion(m_axis,v[0]);
251  }
252 
253  template<typename S1, int O1>
255  se3Action(const SE3Tpl<S1,O1> & m) const
256  {
258  MotionRef<DenseBase> v(res);
259  v.linear().noalias() = m.rotation()*m_axis;
260  v.angular().setZero();
261  return res;
262  }
263 
264  template<typename S1, int O1>
267  {
269  MotionRef<DenseBase> v(res);
270  v.linear().noalias() = m.rotation().transpose()*m_axis;
271  v.angular().setZero();
272  return res;
273  }
274 
275  int nv_impl() const { return NV; }
276 
278  {
281 
282  template<typename ForceDerived>
285  {
287  ReturnType res;
288  res[0] = ref.axis().dot(f.linear());
289  return res;
290  }
291 
292  /* [CRBA] MatrixBase operator* (Constraint::Transpose S, ForceSet::Block) */
293  template<typename ForceSet>
295  operator*(const Eigen::MatrixBase<ForceSet> & F)
296  {
297  EIGEN_STATIC_ASSERT(ForceSet::RowsAtCompileTime==6,THIS_METHOD_IS_ONLY_FOR_MATRICES_OF_A_SPECIFIC_SIZE)
298  /* Return ax.T * F[1:3,:] */
299  return ref.axis().transpose() * F.template middleRows<3>(LINEAR);
300  }
301 
302  };
303 
304  TransposeConst transpose() const { return TransposeConst(*this); }
305 
306  /* CRBA joint operators
307  * - ForceSet::Block = ForceSet
308  * - ForceSet operator* (Inertia Y,Constraint S)
309  * - MatrixBase operator* (Constraint::Transpose S, ForceSet::Block)
310  * - SE3::act(ForceSet::Block)
311  */
312  DenseBase matrix_impl() const
313  {
314  DenseBase S;
315  S.template segment<3>(LINEAR) = m_axis;
316  S.template segment<3>(ANGULAR).setZero();
317  return S;
318  }
319 
320  template<typename MotionDerived>
321  DenseBase motionAction(const MotionDense<MotionDerived> & v) const
322  {
323  DenseBase res;
324  res.template segment<3>(LINEAR).noalias() = v.angular().cross(m_axis);
325  res.template segment<3>(ANGULAR).setZero();
326 
327  return res;
328  }
329 
330  const Vector3 & axis() const { return m_axis; }
331  Vector3 & axis() { return m_axis; }
332 
333  bool isEqual(const ConstraintPrismaticUnalignedTpl & other) const
334  {
335  return m_axis == other.m_axis;
336  }
337 
338  protected:
339 
340  Vector3 m_axis;
341 
342  }; // struct ConstraintPrismaticUnalignedTpl
343 
344  template<typename S1, int O1,typename S2, int O2>
346  {
347  typedef Eigen::Matrix<S2,6,1,O2> ReturnType;
348  };
349 
350  /* [CRBA] ForceSet operator* (Inertia Y,Constraint S) */
351  namespace impl
352  {
353  template<typename S1, int O1, typename S2, int O2>
355  {
359 
360  static inline ReturnType run(const Inertia & Y,
361  const Constraint & cpu)
362  {
363  ReturnType res;
364  /* YS = [ m -mcx ; mcx I-mcxcx ] [ 0 ; w ] = [ mcxw ; Iw -mcxcxw ] */
365  const S1 & m = Y.mass();
366  const typename Inertia::Vector3 & c = Y.lever();
367 
368  res.template segment<3>(Constraint::LINEAR).noalias() = m*cpu.axis();
369  res.template segment<3>(Constraint::ANGULAR).noalias() = c.cross(res.template segment<3>(Constraint::LINEAR));
370 
371  return res;
372  }
373  };
374  } // namespace impl
375 
376  template<typename M6Like, typename Scalar, int Options>
377  struct MultiplicationOp<Eigen::MatrixBase<M6Like>, ConstraintPrismaticUnalignedTpl<Scalar,Options> >
378  {
379  typedef typename SizeDepType<3>::ColsReturn<M6Like>::ConstType M6LikeCols;
381 
383  typedef typename Constraint::Vector3 Vector3;
385  };
386 
387  /* [ABA] operator* (Inertia Y,Constraint S) */
388  namespace impl
389  {
390  template<typename M6Like, typename Scalar, int Options>
391  struct LhsMultiplicationOp<Eigen::MatrixBase<M6Like>, ConstraintPrismaticUnalignedTpl<Scalar,Options> >
392  {
395  static inline ReturnType run(const Eigen::MatrixBase<M6Like> & Y,
396  const Constraint & cru)
397  {
398  EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(M6Like,6,6);
399  return Y.derived().template middleCols<3>(Constraint::LINEAR) * cru.axis();
400  }
401  };
402  } // namespace impl
403 
404  template<typename Scalar, int Options> struct JointPrismaticUnalignedTpl;
405 
406  template<typename _Scalar, int _Options>
407  struct traits< JointPrismaticUnalignedTpl<_Scalar,_Options> >
408  {
409  enum {
410  NQ = 1,
411  NV = 1
412  };
413  typedef _Scalar Scalar;
414  enum { Options = _Options };
421 
422  // [ABA]
423  typedef Eigen::Matrix<Scalar,6,NV,Options> U_t;
424  typedef Eigen::Matrix<Scalar,NV,NV,Options> D_t;
425  typedef Eigen::Matrix<Scalar,6,NV,Options> UD_t;
426 
428 
429  typedef Eigen::Matrix<Scalar,NQ,1,Options> ConfigVector_t;
430  typedef Eigen::Matrix<Scalar,NV,1,Options> TangentVector_t;
431  };
432 
433  template<typename Scalar, int Options>
436 
437  template<typename _Scalar, int _Options>
439  : public JointDataBase< JointDataPrismaticUnalignedTpl<_Scalar,_Options> >
440  {
441  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
445 
446  Transformation_t M;
447  Constraint_t S;
448  Motion_t v;
449  Bias_t c;
450 
451  // [ABA] specific data
452  U_t U;
453  D_t Dinv;
454  UD_t UDinv;
455 
457  : M(Transformation_t::Vector3::Zero())
458  , S(Constraint_t::Vector3::Zero())
459  , v(Constraint_t::Vector3::Zero(),(Scalar)0)
460  , U(U_t::Zero())
461  , Dinv(D_t::Zero())
462  , UDinv(UD_t::Zero())
463  {}
464 
465  template<typename Vector3Like>
466  JointDataPrismaticUnalignedTpl(const Eigen::MatrixBase<Vector3Like> & axis)
467  : M()
468  , S(axis)
469  , v(axis,(Scalar)NAN)
470  , U(), Dinv(), UDinv()
471  {}
472 
473  static std::string classname() { return std::string("JointDataPrismaticUnaligned"); }
474  std::string shortname() const { return classname(); }
475 
476  }; // struct JointDataPrismaticUnalignedTpl
477 
478  template<typename Scalar, int Options>
481 
483  template<typename _Scalar, int _Options>
485  : public JointModelBase< JointModelPrismaticUnalignedTpl<_Scalar,_Options> >
486  {
487  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
489  PINOCCHIO_JOINT_TYPEDEF_TEMPLATE(JointDerived);
490 
492  using Base::id;
493  using Base::idx_q;
494  using Base::idx_v;
495  using Base::setIndexes;
496 
497  typedef Eigen::Matrix<Scalar,3,1,_Options> Vector3;
498 
501  const Scalar & y,
502  const Scalar & z)
503  : axis(x,y,z)
504  {
505  axis.normalize();
506  assert(isUnitary(axis) && "Translation axis is not unitary");
507  }
508 
509  template<typename Vector3Like>
510  JointModelPrismaticUnalignedTpl(const Eigen::MatrixBase<Vector3Like> & axis)
511  : axis(axis)
512  {
513  EIGEN_STATIC_ASSERT_VECTOR_ONLY(Vector3Like);
514  assert(isUnitary(axis) && "Translation axis is not unitary");
515  }
516 
517  JointDataDerived createData() const { return JointDataDerived(axis); }
518 
519  const std::vector<bool> hasConfigurationLimit() const
520  {
521  return {true};
522  }
523 
524  const std::vector<bool> hasConfigurationLimitInTangent() const
525  {
526  return {true};
527  }
528 
529  using Base::isEqual;
530  bool isEqual(const JointModelPrismaticUnalignedTpl & other) const
531  {
532  return Base::isEqual(other) && axis == other.axis;
533  }
534 
535  template<typename ConfigVector>
536  void calc(JointDataDerived & data,
537  const typename Eigen::MatrixBase<ConfigVector> & qs) const
538  {
539  typedef typename ConfigVector::Scalar Scalar;
540  const Scalar & q = qs[idx_q()];
541 
542  data.M.translation().noalias() = axis * q;
543  }
544 
545  template<typename ConfigVector, typename TangentVector>
546  void calc(JointDataDerived & data,
547  const typename Eigen::MatrixBase<ConfigVector> & qs,
548  const typename Eigen::MatrixBase<TangentVector> & vs) const
549  {
550  calc(data,qs.derived());
551 
552  typedef typename TangentVector::Scalar S2;
553  const S2 & v = vs[idx_v()];
554  data.v.linearRate() = v;
555  }
556 
557  template<typename Matrix6Like>
558  void calc_aba(JointDataDerived & data, const Eigen::MatrixBase<Matrix6Like> & I, const bool update_I) const
559  {
560  data.U.noalias() = I.template block<6,3> (0,Inertia::LINEAR) * axis;
561  data.Dinv[0] = Scalar(1)/axis.dot(data.U.template segment <3> (Inertia::LINEAR));
562  data.UDinv.noalias() = data.U * data.Dinv;
563 
564  if (update_I)
565  PINOCCHIO_EIGEN_CONST_CAST(Matrix6Like,I) -= data.UDinv * data.U.transpose();
566  }
567 
568  static std::string classname() { return std::string("JointModelPrismaticUnaligned"); }
569  std::string shortname() const { return classname(); }
570 
572  template<typename NewScalar>
574  {
576  ReturnType res(axis.template cast<NewScalar>());
577  res.setIndexes(id(),idx_q(),idx_v());
578  return res;
579  }
580 
581  // data
582 
586  Vector3 axis;
587  }; // struct JointModelPrismaticUnalignedTpl
588 
589 } //namespace pinocchio
590 
591 #include <boost/type_traits.hpp>
592 
593 namespace boost
594 {
595  template<typename Scalar, int Options>
596  struct has_nothrow_constructor< ::pinocchio::JointModelPrismaticUnalignedTpl<Scalar,Options> >
597  : public integral_constant<bool,true> {};
598 
599  template<typename Scalar, int Options>
600  struct has_nothrow_copy< ::pinocchio::JointModelPrismaticUnalignedTpl<Scalar,Options> >
601  : public integral_constant<bool,true> {};
602 
603  template<typename Scalar, int Options>
604  struct has_nothrow_constructor< ::pinocchio::JointDataPrismaticUnalignedTpl<Scalar,Options> >
605  : public integral_constant<bool,true> {};
606 
607  template<typename Scalar, int Options>
608  struct has_nothrow_copy< ::pinocchio::JointDataPrismaticUnalignedTpl<Scalar,Options> >
609  : public integral_constant<bool,true> {};
610 }
611 
612 
613 #endif // ifndef __pinocchio_joint_prismatic_unaligned_hpp__
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > const Eigen::MatrixBase< TangentVectorType > & v
void addTo(MotionDense< Derived > &other) const
MotionPrismaticUnalignedTpl __mult__(const OtherScalar &alpha) const
SE3GroupAction< ConstraintPrismaticUnalignedTpl >::ReturnType se3Action(const SE3Tpl< S1, O1 > &m) const
Forward declaration of the multiplication operation return type. Should be overloaded, otherwise it will procude a compilation error.
Definition: binary-op.hpp:15
JointModelPrismaticUnalignedTpl< Scalar, Options > JointModelDerived
int NQ
Definition: dpendulum.py:8
void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs, const typename Eigen::MatrixBase< TangentVector > &vs) const
axis
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointPrismaticUnalignedTpl< _Scalar, _Options > JointDerived
int idx_q(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdxQVisitor to get the index in the full model configuration space...
int idx_v(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdxVVisitor to get the index in the full model tangent space corre...
Return type of the Constraint::Transpose * ForceSet operation.
Return type of the ation of a Motion onto an object of type D.
#define MOTION_TYPEDEF_TPL(Derived)
PINOCCHIO_EIGEN_REF_CONST_TYPE(Matrix6Like) operator*(const Eigen
bool isEqual(const JointModelPrismaticUnalignedTpl &other) const
const std::vector< bool > hasConfigurationLimit() const
SE3GroupAction< ConstraintPrismaticUnalignedTpl >::ReturnType se3ActionInverse(const SE3Tpl< S1, O1 > &m) const
const Vector3 & lever() const
JointIndex id(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointIdVisitor to get the index of the joint in the kinematic chain...
#define PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR
bool isEqual(const ConstraintPrismaticUnalignedTpl &other) const
void motionAction(const MotionDense< M1 > &v, MotionDense< M2 > &mout) const
JointModelBase< JointModelPrismaticUnalignedTpl > Base
Eigen::Matrix< typename PINOCCHIO_EIGEN_DOT_PRODUCT_RETURN_TYPE(Vector3, typename ForceDense< ForceDerived >::ConstAngularType), 1, 1, Options > ReturnType
JointModelPrismaticUnalignedTpl(const Scalar &x, const Scalar &y, const Scalar &z)
Vec3f c
ConstLinearType linear() const
Definition: motion-base.hpp:22
JointCollectionTpl const Eigen::MatrixBase< ConfigVectorType > & q
#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ)
Macro for an automatic const_cast.
bool isUnitary(const Eigen::MatrixBase< MatrixLike > &mat, const typename MatrixLike::RealScalar &prec=Eigen::NumTraits< typename MatrixLike::Scalar >::dummy_precision())
Check whether the input matrix is Unitary within the given precision.
void se3Action_impl(const SE3Tpl< S2, O2 > &m, MotionDense< D2 > &v) const
MotionDerived::MotionPlain operator+(const MotionPlanarTpl< Scalar, Options > &m1, const MotionDense< MotionDerived > &m2)
ConstAngularType angular() const
Definition: motion-base.hpp:21
SE3::Scalar Scalar
Definition: conversions.cpp:13
void calc(JointDataDerived &data, const typename Eigen::MatrixBase< ConfigVector > &qs) const
void se3ActionInverse_impl(const SE3Tpl< S2, O2 > &m, MotionDense< D2 > &v) const
virtual bool isEqual(const CollisionGeometry &other) const=0
#define PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE
JointDataPrismaticUnalignedTpl(const Eigen::MatrixBase< Vector3Like > &axis)
#define PINOCCHIO_JOINT_DATA_TYPEDEF_TEMPLATE(Joint)
void setTo(MotionDense< Derived > &other) const
PINOCCHIO_JOINT_DATA_BASE_ACCESSOR_DEFAULT_RETURN_TYPE typedef Eigen::Matrix< Scalar, NQ, 1, Options > ConfigVector_t
DenseBase motionAction(const MotionDense< MotionDerived > &v) const
JointModelPrismaticUnalignedTpl(const Eigen::MatrixBase< Vector3Like > &axis)
void calc_aba(JointDataDerived &data, const Eigen::MatrixBase< Matrix6Like > &I, const bool update_I) const
PINOCCHIO_JOINT_CAST_TYPE_SPECIALIZATION(JointModelFreeFlyerTpl)
ConstraintForceSetOp< ConstraintPrismaticUnalignedTpl, ForceSet >::ReturnType operator*(const Eigen::MatrixBase< ForceSet > &F)
Eigen::Matrix< Scalar, 3, 1, _Options > Vector3
MotionPlain se3Action_impl(const SE3Tpl< S2, O2 > &m) const
float m
ConstLinearType linear() const
Return the linear part of the force vector.
Definition: force-base.hpp:42
traits< ConstraintPrismaticUnalignedTpl >::Vector3 Vector3
#define PINOCCHIO_EIGEN_REF_TYPE(D)
MotionPrismaticUnalignedTpl(const Eigen::MatrixBase< Vector3Like > &axis, const S2 &v)
PINOCCHIO_JOINT_DATA_BASE_DEFAULT_ACCESSOR Transformation_t M
Main pinocchio namespace.
Definition: timings.cpp:28
JointMotion __mult__(const Eigen::MatrixBase< Vector1Like > &v) const
res
void setIndexes(JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel, JointIndex id, int q, int v)
Visit a JointModelTpl through JointSetIndexesVisitor to set the indexes of the joint in the kinematic...
const std::vector< bool > hasConfigurationLimitInTangent() const
void setZero(std::vector< MatType, Eigen::aligned_allocator< MatType > > &Ms)
Common traits structure to fully define base classes for CRTP.
Definition: src/fwd.hpp:44
#define PINOCCHIO_CONSTRAINT_TYPEDEF_TPL(DERIVED)
Eigen::ProductReturnType< M1, M2 >::Type type
Definition: math/matrix.hpp:69
MatrixMatrixProduct< Eigen::Transpose< const Vector3 >, typename Eigen::MatrixBase< const ForceSet >::template NRowsBlockXpr< 3 >::Type >::type ReturnType
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 forces, represented by a 6xN matrix whose each column represent a spat...
MotionPrismaticUnalignedTpl< double > MotionPrismaticUnaligned
MotionPlain se3ActionInverse_impl(const SE3Tpl< S2, O2 > &m) const
bool isEqual_impl(const MotionPrismaticUnalignedTpl &other) const
NV
Definition: dcrba.py:444
MotionDerived::MotionPlain operator^(const MotionDense< MotionDerived > &m1, const MotionPlanarTpl< S2, O2 > &m2)
MotionPlain motionAction(const MotionDense< M1 > &v) const
ConstraintPrismaticUnalignedTpl(const Eigen::MatrixBase< Vector3Like > &axis)
Return type of the Constraint::Transpose * Force operation.
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef JointPrismaticUnalignedTpl< _Scalar, _Options > JointDerived
ReturnTypeNotDefined ReturnType
MultiplicationOp< InertiaTpl< Scalar, Options >, ConstraintDerived >::ReturnType operator*(const InertiaTpl< Scalar, Options > &Y, const ConstraintBase< ConstraintDerived > &constraint)
 .
JointModelPrismaticUnalignedTpl< NewScalar, Options > cast() const
#define PINOCCHIO_JOINT_TYPEDEF_TEMPLATE(Joint)


pinocchio
Author(s):
autogenerated on Fri Jun 23 2023 02:38:31