5 #ifndef __pinocchio_vector_space_operation_hpp__ 6 #define __pinocchio_vector_space_operation_hpp__ 10 #include "pinocchio/multibody/liegroup/liegroup-base.hpp" 12 #include <boost/integer/static_min_max.hpp> 18 template<
int Dim,
typename _Scalar,
int _Options>
21 typedef _Scalar Scalar;
29 template<
int Dim,
typename _Scalar,
int _Options>
31 :
public LieGroupBase< VectorSpaceOperationTpl<Dim,_Scalar,_Options> >
41 assert(size_.value() >= 0);
47 : Base(), size_(other.size_.value())
49 assert(size_.value() >= 0);
63 return ConfigVector_t::Zero(size_.value());
66 std::string
name ()
const 68 std::ostringstream oss; oss <<
"R^" <<
nq();
72 template <
class ConfigL_t,
class ConfigR_t,
class Tangent_t>
73 static void difference_impl(
const Eigen::MatrixBase<ConfigL_t> & q0,
74 const Eigen::MatrixBase<ConfigR_t> & q1,
75 const Eigen::MatrixBase<Tangent_t> & d)
77 PINOCCHIO_EIGEN_CONST_CAST(Tangent_t,d) = q1 - q0;
80 template <ArgumentPosition arg,
class ConfigL_t,
class ConfigR_t,
class JacobianOut_t>
81 void dDifference_impl (
const Eigen::MatrixBase<ConfigL_t> &,
82 const Eigen::MatrixBase<ConfigR_t> &,
83 const Eigen::MatrixBase<JacobianOut_t>& J)
const 86 PINOCCHIO_EIGEN_CONST_CAST(JacobianOut_t,J).noalias() = - JacobianMatrix_t::Identity();
88 PINOCCHIO_EIGEN_CONST_CAST(JacobianOut_t,J).setIdentity();
91 template <
class ConfigIn_t,
class Velocity_t,
class ConfigOut_t>
92 static void integrate_impl(
const Eigen::MatrixBase<ConfigIn_t> & q,
93 const Eigen::MatrixBase<Velocity_t> & v,
94 const Eigen::MatrixBase<ConfigOut_t> & qout)
96 PINOCCHIO_EIGEN_CONST_CAST(ConfigOut_t,qout) = q + v;
99 template <
class Config_t,
class Jacobian_t>
100 static void integrateCoeffWiseJacobian_impl(
const Eigen::MatrixBase<Config_t> &,
101 const Eigen::MatrixBase<Jacobian_t> & J)
103 PINOCCHIO_EIGEN_CONST_CAST(Jacobian_t,J).setIdentity();
106 template <
class Config_t,
class Tangent_t,
class JacobianOut_t>
107 static void dIntegrate_dq_impl(
const Eigen::MatrixBase<Config_t > & ,
108 const Eigen::MatrixBase<Tangent_t> & ,
109 const Eigen::MatrixBase<JacobianOut_t>& J)
111 PINOCCHIO_EIGEN_CONST_CAST(JacobianOut_t,J).setIdentity();
114 template <
class Config_t,
class Tangent_t,
class JacobianOut_t>
115 static void dIntegrate_dv_impl(
const Eigen::MatrixBase<Config_t > & ,
116 const Eigen::MatrixBase<Tangent_t> & ,
117 const Eigen::MatrixBase<JacobianOut_t>& J)
119 PINOCCHIO_EIGEN_CONST_CAST(JacobianOut_t,J).setIdentity();
127 template <
class Config_t>
128 static void normalize_impl (
const Eigen::MatrixBase<Config_t>& )
131 template <
class Config_t>
132 void random_impl (
const Eigen::MatrixBase<Config_t>& qout)
const 134 PINOCCHIO_EIGEN_CONST_CAST(Config_t,qout).setRandom();
137 template <
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
138 void randomConfiguration_impl
139 (
const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
140 const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit,
141 const Eigen::MatrixBase<ConfigOut_t> & qout)
const 143 ConfigOut_t & res = PINOCCHIO_EIGEN_CONST_CAST(ConfigOut_t,qout).derived();
144 for (
int i = 0; i <
nq (); ++i)
146 if(lower_pos_limit[i] == -std::numeric_limits<typename ConfigL_t::Scalar>::infinity() ||
147 upper_pos_limit[i] == std::numeric_limits<typename ConfigR_t::Scalar>::infinity() )
149 std::ostringstream error;
150 error <<
"non bounded limit. Cannot uniformly sample joint at rank " << i;
152 throw std::range_error(error.str());
154 res[i] = lower_pos_limit[i] + (( upper_pos_limit[i] - lower_pos_limit[i]) * rand())/RAND_MAX;
160 Eigen::internal::variable_if_dynamic<Index, Dim> size_;
165 #endif // ifndef __pinocchio_vector_space_operation_hpp__ int nv(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointNvVisitor to get the dimension of the joint tangent space...
int nq(const JointModelTpl< Scalar, Options, JointCollectionTpl > &jmodel)
Visit a JointModelTpl through JointNqVisitor to get the dimension of the joint configuration space...
VectorSpaceOperationTpl(int size=boost::static_signed_max< 0, Dim >::value)
std::string name(const LieGroupGenericTpl< LieGroupCollection > &lg)
Visit a LieGroupVariant to get the name of it.
VectorSpaceOperationTpl(const VectorSpaceOperationTpl &other)
Main pinocchio namespace.
void neutral(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const Eigen::MatrixBase< ReturnType > &qout)
Return the neutral configuration element related to the model configuration space.
Common traits structure to fully define base classes for CRTP.