18 #ifndef __se3_joint_revolute_unbounded_hpp__    19 #define __se3_joint_revolute_unbounded_hpp__    21 #include "pinocchio/math/fwd.hpp"    22 #include "pinocchio/math/sincos.hpp"    23 #include "pinocchio/spatial/inertia.hpp"    24 #include "pinocchio/multibody/joint/joint-base.hpp"    25 #include "pinocchio/multibody/joint/joint-revolute.hpp"    32   template<
typename _Scalar, 
int _Options, 
int axis>
    39     typedef _Scalar Scalar;
    40     enum { Options = _Options };
    47     typedef Eigen::Matrix<Scalar,6,NV,Options> F_t;
    50     typedef Eigen::Matrix<Scalar,6,NV,Options> U_t;
    51     typedef Eigen::Matrix<Scalar,NV,NV,Options> D_t;
    52     typedef Eigen::Matrix<Scalar,6,NV,Options> UD_t;
    54     typedef Eigen::Matrix<Scalar,NQ,1,Options> ConfigVector_t;
    55     typedef Eigen::Matrix<Scalar,NV,1,Options> TangentVector_t;
    58   template<
typename Scalar, 
int Options, 
int axis>
    62   template<
typename Scalar, 
int Options, 
int axis>
    66   template<
typename _Scalar, 
int _Options, 
int axis>
    70     SE3_JOINT_TYPEDEF_TEMPLATE;
    88   template<
typename _Scalar, 
int _Options, 
int axis>
    92     SE3_JOINT_TYPEDEF_TEMPLATE;
   101     JointDataDerived 
createData()
 const { 
return JointDataDerived(); }
   103     template<
typename ConfigVector>
   104     void calc(JointDataDerived & data,
   105               const typename Eigen::MatrixBase<ConfigVector> & qs)
 const   107       EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(ConfigVector_t,ConfigVector);
   108       typedef typename ConfigVector::Scalar OtherScalar;
   109       typename ConfigVector::template ConstFixedSegmentReturnType<NQ>::Type
   110       & q = qs.template segment<NQ> (
idx_q());
   112       const OtherScalar & ca = q(0);
   113       const OtherScalar & sa = q(1);
   115       JointDerivedBase::cartesianRotation(ca,sa,data.M.rotation());
   118     template<
typename ConfigVector, 
typename TangentVector>
   119     void calc(JointDataDerived & data,
   120               const typename Eigen::MatrixBase<ConfigVector> & qs,
   121               const typename Eigen::MatrixBase<TangentVector> & vs)
 const   123       EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(TangentVector_t,TangentVector);
   124       calc(data,qs.derived());
   126       data.v.w = (Scalar)vs[
idx_v()];;
   129     template<
typename S2, 
int O2>
   130     void calc_aba(JointDataDerived & data, Eigen::Matrix<S2,6,6,O2> & I, 
const bool update_I)
 const   132       data.U = I.col(Inertia::ANGULAR + axis);
   133       data.Dinv[0] = (Scalar)(1)/I(Inertia::ANGULAR + axis,Inertia::ANGULAR + axis);
   134       data.UDinv.noalias() = data.U * data.Dinv[0];
   137         I -= data.UDinv * data.U.transpose();
   143       return 2.*sqrt(sqrt(Eigen::NumTraits<Scalar>::epsilon()));
   146     static std::string classname()
   148       return std::string(
"JointModelRUB") + axisLabel<axis>();
   150     std::string 
shortname()
 const { 
return classname(); }
   168 #endif // ifndef __se3_joint_revolute_unbounded_hpp__ 
JointDataVariant createData(const JointModelVariant &jmodel)
Visit a JointModelVariant through CreateData visitor to create a JointDataVariant. 
void calc_aba(const JointModelVariant &jmodel, JointDataVariant &jdata, Inertia::Matrix6 &I, const bool update_I)
Visit a JointDataVariant and the corresponding JointModelVariant through JointCalcAbaVisitor to...
std::string shortname(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointShortnameVisitor to get the shortname of the derived joint mod...
int idx_q(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointIdxQVisitor to get the index in the full model configuration s...
Eigen::VectorXd finiteDifferenceIncrement(const Model &model)
Computes the finite difference increments for each degree of freedom according to the current joint c...
int idx_v(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointIdxVVisitor to get the index in the full model tangent space c...