18 #ifndef __se3_vector_space_operation_hpp__ 19 #define __se3_vector_space_operation_hpp__ 23 #include "pinocchio/multibody/liegroup/operation-base.hpp" 25 #include <boost/integer/static_min_max.hpp> 31 typedef double Scalar;
38 template<
int Size = Eigen::Dynamic>
48 assert (size_.value() >= 0);
55 assert (size_.value() >= 0);
69 return ConfigVector_t::Zero(size_.value());;
72 std::string
name ()
const 74 std::ostringstream oss; oss <<
"R^" <<
nq();
78 template <
class ConfigL_t,
class ConfigR_t,
class Tangent_t>
79 static void difference_impl(
const Eigen::MatrixBase<ConfigL_t> & q0,
80 const Eigen::MatrixBase<ConfigR_t> & q1,
81 const Eigen::MatrixBase<Tangent_t> & d)
83 const_cast< Eigen::MatrixBase<Tangent_t>&
> (d) = q1 - q0;
86 template <
class ConfigL_t,
class ConfigR_t,
class JacobianLOut_t,
class JacobianROut_t>
87 static void Jdifference_impl(
const Eigen::MatrixBase<ConfigL_t> &,
88 const Eigen::MatrixBase<ConfigR_t> &,
89 const Eigen::MatrixBase<JacobianLOut_t>& J0,
90 const Eigen::MatrixBase<JacobianROut_t>& J1)
92 const_cast< JacobianLOut_t&
> (J0.derived()).setZero();
93 const_cast< JacobianLOut_t&
> (J0.derived()).diagonal().setConstant(-1);
94 const_cast< JacobianROut_t&
> (J1.derived()).setIdentity();
97 template <
class ConfigIn_t,
class Velocity_t,
class ConfigOut_t>
98 static void integrate_impl(
const Eigen::MatrixBase<ConfigIn_t> & q,
99 const Eigen::MatrixBase<Velocity_t> & v,
100 const Eigen::MatrixBase<ConfigOut_t> & qout)
102 const_cast< Eigen::MatrixBase<ConfigOut_t>&
> (qout) = q + v;
105 template <
class Tangent_t,
class JacobianOut_t>
106 static void Jintegrate_impl(
const Eigen::MatrixBase<Tangent_t> &,
107 const Eigen::MatrixBase<JacobianOut_t> & J)
109 const_cast< JacobianOut_t&
> (J.derived()).setIdentity();
112 template <
class Config_t,
class Tangent_t,
class JacobianOut_t>
113 static void dIntegrate_dq_impl(
const Eigen::MatrixBase<Config_t > & ,
114 const Eigen::MatrixBase<Tangent_t> & ,
115 const Eigen::MatrixBase<JacobianOut_t>& J)
117 const_cast< JacobianOut_t&
> (J.derived()).setIdentity();
120 template <
class Config_t,
class Tangent_t,
class JacobianOut_t>
121 static void dIntegrate_dv_impl(
const Eigen::MatrixBase<Config_t > & ,
122 const Eigen::MatrixBase<Tangent_t> & ,
123 const Eigen::MatrixBase<JacobianOut_t>& J)
125 const_cast< JacobianOut_t&
> (J.derived()).setIdentity();
133 template <
class Config_t>
134 static void normalize_impl (
const Eigen::MatrixBase<Config_t>& )
137 template <
class Config_t>
138 void random_impl (
const Eigen::MatrixBase<Config_t>& qout)
const 140 const_cast< Eigen::MatrixBase<Config_t>&
> (qout).setRandom();
143 template <
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
144 void randomConfiguration_impl
145 (
const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
146 const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit,
147 const Eigen::MatrixBase<ConfigOut_t> & qout)
const 149 ConfigOut_t& res =
const_cast< Eigen::MatrixBase<ConfigOut_t>&
> (qout).derived();
150 for (
int i = 0; i <
nq (); ++i)
152 if(lower_pos_limit[i] == -std::numeric_limits<Scalar>::infinity() ||
153 upper_pos_limit[i] == std::numeric_limits<Scalar>::infinity() )
155 std::ostringstream error;
156 error <<
"non bounded limit. Cannot uniformly sample joint at rank " << i;
158 throw std::runtime_error(error.str());
160 res[i] = lower_pos_limit[i] + (( upper_pos_limit[i] - lower_pos_limit[i]) * rand())/RAND_MAX;
164 Eigen::internal::variable_if_dynamic<Index, Size> size_;
169 #endif // ifndef __se3_vector_space_operation_hpp__
VectorSpaceOperation(int size=boost::static_signed_max< 0, Size >::value)
std::string name(const LieGroupVariant &lg)
Visit a LieGroupVariant to get the name of it.
Eigen::VectorXd neutral(const Model &model)
Return the neutral configuration element related to the model configuration space.
int nq(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointNqVisitor to get the dimension of the joint configuration spac...
int nv(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointNvVisitor to get the dimension of the joint tangent space...
VectorSpaceOperation(const VectorSpaceOperation &other)