joint-common-operations.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2019 INRIA
3 //
4 
5 #ifndef __pinocchio_multibody_joint_joint_common_operations_hpp__
6 #define __pinocchio_multibody_joint_joint_common_operations_hpp__
7 
8 #include "pinocchio/macros.hpp"
10 #include "pinocchio/math/fwd.hpp"
11 
12 #include <boost/type_traits.hpp>
13 #include <boost/variant.hpp>
14 
15 namespace pinocchio
16 {
17  namespace internal
18  {
22  template<typename Scalar, bool is_floating_point = pinocchio::is_floating_point<Scalar>::value>
24  {
25  template<typename M1, typename M2>
26  static EIGEN_STRONG_INLINE void
27  run(const Eigen::MatrixBase<M1> & StYS, const Eigen::MatrixBase<M2> & Dinv)
28  {
29  M2 & Dinv_ = PINOCCHIO_EIGEN_CONST_CAST(M2, Dinv);
30  Dinv_.setIdentity();
31  StYS.llt().solveInPlace(Dinv_);
32  }
33  };
34 
35  template<typename Scalar>
37  {
38  template<typename M1, typename M2>
39  static EIGEN_STRONG_INLINE void
40  run(const Eigen::MatrixBase<M1> & StYS, const Eigen::MatrixBase<M2> & Dinv)
41  {
42  M2 & Dinv_ = PINOCCHIO_EIGEN_CONST_CAST(M2, Dinv);
43  inverse(StYS, Dinv_);
44  }
45  };
46  } // namespace internal
47 
53  {
54  template<typename ConfigVectorIn, typename Scalar, typename ConfigVectorOut>
55  static void run(
56  const Eigen::MatrixBase<ConfigVectorIn> & qIn,
57  const Scalar & scaling,
58  const Scalar & offset,
59  const Eigen::MatrixBase<ConfigVectorOut> & qOut)
60  {
61  assert(qIn.size() == qOut.size());
62  PINOCCHIO_EIGEN_CONST_CAST(ConfigVectorOut, qOut).noalias() =
63  scaling * qIn + ConfigVectorOut::Constant(qOut.size(), offset);
64  }
65  };
66 
68  {
69  template<typename ConfigVectorIn, typename Scalar, typename ConfigVectorOut>
70  static void run(
71  const Eigen::MatrixBase<ConfigVectorIn> & qIn,
72  const Scalar & scaling,
73  const Scalar & offset,
74  const Eigen::MatrixBase<ConfigVectorOut> & qOut)
75  {
76  assert(qIn.size() == 2);
77  assert(qOut.size() == 2);
78 
79  const typename ConfigVectorIn::Scalar & ca = qIn(0);
80  const typename ConfigVectorIn::Scalar & sa = qIn(1);
81 
82  const typename ConfigVectorIn::Scalar & theta = math::atan2(sa, ca);
83  const typename ConfigVectorIn::Scalar & theta_transform = scaling * theta + offset;
84 
85  ConfigVectorOut & dest_ = PINOCCHIO_EIGEN_CONST_CAST(ConfigVectorOut, qOut);
86  SINCOS(theta_transform, &dest_.coeffRef(1), &dest_.coeffRef(0));
87  }
88  };
89 
91  {
92  template<typename ConfigVectorIn, typename Scalar, typename ConfigVectorOut>
93  static void run(
94  const Eigen::MatrixBase<ConfigVectorIn> &,
95  const Scalar &,
96  const Scalar &,
97  const Eigen::MatrixBase<ConfigVectorOut> &)
98  {
99  assert(false && "Joint cannot be used with JointMimic.");
100  }
101  };
102 
107  template<typename Joint>
109  {
111  };
112 
113 } // namespace pinocchio
114 
115 #endif // ifndef __pinocchio_multibody_joint_joint_common_operations_hpp__
pinocchio::internal::PerformStYSInversion
Operation called in JointModelBase<JointModel>::calc_aba.
Definition: joint-common-operations.hpp:23
macros.hpp
PINOCCHIO_EIGEN_CONST_CAST
#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ)
Macro for an automatic const_cast.
Definition: eigen-macros.hpp:51
pinocchio::internal::PerformStYSInversion::run
static EIGEN_STRONG_INLINE void run(const Eigen::MatrixBase< M1 > &StYS, const Eigen::MatrixBase< M2 > &Dinv)
Definition: joint-common-operations.hpp:27
pinocchio::internal::PerformStYSInversion< Scalar, false >::run
static EIGEN_STRONG_INLINE void run(const Eigen::MatrixBase< M1 > &StYS, const Eigen::MatrixBase< M2 > &Dinv)
Definition: joint-common-operations.hpp:40
pinocchio::NoAffineTransform
Definition: joint-common-operations.hpp:90
pinocchio::UnboundedRevoluteAffineTransform::run
static void run(const Eigen::MatrixBase< ConfigVectorIn > &qIn, const Scalar &scaling, const Scalar &offset, const Eigen::MatrixBase< ConfigVectorOut > &qOut)
Definition: joint-common-operations.hpp:70
pinocchio::LinearAffineTransform::run
static void run(const Eigen::MatrixBase< ConfigVectorIn > &qIn, const Scalar &scaling, const Scalar &offset, const Eigen::MatrixBase< ConfigVectorOut > &qOut)
Definition: joint-common-operations.hpp:55
pinocchio::SINCOS
void SINCOS(const S1 &a, S2 *sa, S3 *ca)
Computes sin/cos values of a given input scalar.
Definition: sincos.hpp:27
matrix.hpp
pinocchio::LinearAffineTransform
Linear affine transformation of the configuration vector. Valide for most common joints which are evo...
Definition: joint-common-operations.hpp:52
pinocchio::ConfigVectorAffineTransform::Type
NoAffineTransform Type
Definition: joint-common-operations.hpp:110
fwd.hpp
pinocchio::ConfigVectorAffineTransform
Assign the correct configuration vector space affine transformation according to the joint type....
Definition: joint-common-operations.hpp:108
pinocchio::inverse
void inverse(const Eigen::MatrixBase< MatrixIn > &m_in, const Eigen::MatrixBase< MatrixOut > &dest)
Definition: math/matrix.hpp:273
pinocchio::UnboundedRevoluteAffineTransform
Definition: joint-common-operations.hpp:67
pinocchio::NoAffineTransform::run
static void run(const Eigen::MatrixBase< ConfigVectorIn > &, const Scalar &, const Scalar &, const Eigen::MatrixBase< ConfigVectorOut > &)
Definition: joint-common-operations.hpp:93
Scalar
double Scalar
Definition: timings-cppad-jit.cpp:37
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33


pinocchio
Author(s):
autogenerated on Mon Apr 7 2025 02:41:42