5 #ifndef __pinocchio_multibody_joint_joint_common_operations_hpp__
6 #define __pinocchio_multibody_joint_joint_common_operations_hpp__
8 #include "pinocchio/macros.hpp"
9 #include "pinocchio/math/matrix.hpp"
10 #include "pinocchio/math/fwd.hpp"
12 #include <boost/type_traits.hpp>
13 #include <boost/variant.hpp>
22 template<typename Scalar, bool is_floating_point = pinocchio::is_floating_point<Scalar>::value>
23 struct PerformStYSInversion
25 template<
typename M1,
typename M2>
26 static EIGEN_STRONG_INLINE
void
27 run(
const Eigen::MatrixBase<M1> & StYS,
const Eigen::MatrixBase<M2> & Dinv)
29 M2 & Dinv_ = PINOCCHIO_EIGEN_CONST_CAST(M2, Dinv);
31 StYS.llt().solveInPlace(Dinv_);
35 template<
typename Scalar>
36 struct PerformStYSInversion<Scalar, false>
38 template<
typename M1,
typename M2>
39 static EIGEN_STRONG_INLINE
void
40 run(
const Eigen::MatrixBase<M1> & StYS,
const Eigen::MatrixBase<M2> & Dinv)
42 M2 & Dinv_ = PINOCCHIO_EIGEN_CONST_CAST(M2, Dinv);
54 template<
typename ConfigVectorIn,
typename Scalar,
typename ConfigVectorOut>
56 const Eigen::MatrixBase<ConfigVectorIn> & qIn,
57 const Scalar & scaling,
58 const Scalar & offset,
59 const Eigen::MatrixBase<ConfigVectorOut> & qOut)
61 assert(qIn.size() == qOut.size());
62 PINOCCHIO_EIGEN_CONST_CAST(ConfigVectorOut, qOut).noalias() =
63 scaling * qIn + ConfigVectorOut::Constant(qOut.size(), offset);
69 template<
typename ConfigVectorIn,
typename Scalar,
typename ConfigVectorOut>
71 const Eigen::MatrixBase<ConfigVectorIn> & qIn,
72 const Scalar & scaling,
73 const Scalar & offset,
74 const Eigen::MatrixBase<ConfigVectorOut> & qOut)
76 assert(qIn.size() == 2);
77 assert(qOut.size() == 2);
79 const typename ConfigVectorIn::Scalar & ca = qIn(0);
80 const typename ConfigVectorIn::Scalar & sa = qIn(1);
82 const typename ConfigVectorIn::Scalar & theta = math::atan2(sa, ca);
83 const typename ConfigVectorIn::Scalar & theta_transform = scaling * theta + offset;
85 ConfigVectorOut & dest_ = PINOCCHIO_EIGEN_CONST_CAST(ConfigVectorOut, qOut);
86 SINCOS(theta_transform, &dest_.coeffRef(1), &dest_.coeffRef(0));
92 template<
typename ConfigVectorIn,
typename Scalar,
typename ConfigVectorOut>
94 const Eigen::MatrixBase<ConfigVectorIn> &,
97 const Eigen::MatrixBase<ConfigVectorOut> &)
99 assert(
false &&
"Joint cannot be used with JointMimic.");
107 template<
typename Jo
int>
Main pinocchio namespace.
void SINCOS(const S1 &a, S2 *sa, S3 *ca)
Computes sin/cos values of a given input scalar.