18 #ifndef __se3_joint_configuration_hxx__    19 #define __se3_joint_configuration_hxx__    21 #include "pinocchio/multibody/visitor.hpp"    22 #include "pinocchio/multibody/model.hpp"    23 #include "pinocchio/multibody/data.hpp"    25 #include "pinocchio/multibody/liegroup/liegroup.hpp"    26 #include "pinocchio/multibody/liegroup/liegroup-algo.hpp"    33   inline Eigen::VectorXd
    35             const Eigen::VectorXd & q,
    36             const Eigen::VectorXd & v)
    38     return integrate<LieGroupMap>(model, q, v);
    41   template<
typename LieGroup_t>
    42   inline Eigen::VectorXd
    44             const Eigen::VectorXd & q,
    45             const Eigen::VectorXd & v)
    47     Eigen::VectorXd integ(model.
nq);
    48     typename IntegrateStep<LieGroup_t>::ArgsType args(q, v, integ);
    49     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
    56   inline Eigen::VectorXd
    58                const Eigen::VectorXd & q0,
    59                const Eigen::VectorXd & q1,
    62     return interpolate<LieGroupMap>(model, q0, q1, u);
    65   template<
typename LieGroup_t>
    66   inline Eigen::VectorXd
    68                const Eigen::VectorXd & q0,
    69                const Eigen::VectorXd & q1,
    72     Eigen::VectorXd interp(model.
nq);
    73     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
    76         (model.
joints[i], 
typename InterpolateStep<LieGroup_t>::ArgsType (q0, q1, u, interp));
    81   template<
typename LieGroup_t>
    82   inline Eigen::VectorXd
    84                      const Eigen::VectorXd & q0,
    85                      const Eigen::VectorXd & q1)
    87     Eigen::VectorXd diff(model.
nv);
    88     typename DifferenceStep<LieGroup_t>::ArgsType args(q0, q1, diff);
    89     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
    96   inline Eigen::VectorXd
    98                      const Eigen::VectorXd & q0,
    99                      const Eigen::VectorXd & q1)
   101     return difference<LieGroupMap>(model, q0, q1);
   104   template<
typename LieGroup_t>
   105   inline Eigen::VectorXd
   107                   const Eigen::VectorXd & q0,
   108                   const Eigen::VectorXd & q1)
   110     Eigen::VectorXd distances(Eigen::VectorXd::Zero(model.
njoints-1));
   111     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
   113       typename SquaredDistanceStep<LieGroup_t>::ArgsType args(i-1, q0, q1, distances);
   119   inline Eigen::VectorXd
   121                   const Eigen::VectorXd & q0,
   122                   const Eigen::VectorXd & q1)
   124     return squaredDistance<LieGroupMap>(model, q0, q1);
   127   template<
typename LieGroup_t>
   130            const Eigen::VectorXd & q0,
   131            const Eigen::VectorXd & q1)
   133     return std::sqrt(squaredDistance<LieGroup_t>(model, q0, q1).sum());
   138            const Eigen::VectorXd & q0,
   139            const Eigen::VectorXd & q1)
   141     return std::sqrt(squaredDistance<LieGroupMap>(model, q0, q1).sum());
   144   template<
typename LieGroup_t>
   145   inline Eigen::VectorXd
   148     Eigen::VectorXd q(model.
nq);
   149     typename RandomConfigurationStep<LieGroup_t>::ArgsType args(q, lowerLimits, upperLimits);
   150     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
   157   inline Eigen::VectorXd
   160     return randomConfiguration<LieGroupMap>(model, lowerLimits, upperLimits);
   163   template<
typename LieGroup_t>
   164   inline Eigen::VectorXd
   167     return randomConfiguration<LieGroup_t>(model, model.
lowerPositionLimit, model.upperPositionLimit);
   170   inline Eigen::VectorXd
   173     return randomConfiguration<LieGroupMap>(model);
   176   template<
typename LieGroup_t>
   179     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i)
   182                                      typename NormalizeStep<LieGroup_t>::ArgsType(qout));
   186   inline void normalize(
const Model & model, Eigen::VectorXd & qout)
   188     return normalize<LieGroupMap>(model,qout);
   191   template<
typename LieGroup_t>
   194                       const Eigen::VectorXd & q1,
   195                       const Eigen::VectorXd & q2,
   199     typename IsSameConfigurationStep<LieGroup_t>::ArgsType args (result, q1, q2, prec);
   200     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
   211                       const Eigen::VectorXd & q1,
   212                       const Eigen::VectorXd & q2,
   213                       const double& prec = Eigen::NumTraits<double>::dummy_precision())
   215     return isSameConfiguration<LieGroupMap>(model, q1, q2, prec);
   220   template<
typename LieGroup_t>
   223     Eigen::VectorXd neutral_elt(model.
nq);
   224     typename NeutralStep<LieGroup_t>::ArgsType args(neutral_elt);
   225     for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
   235     return neutral<LieGroupMap>(model);
   241 #endif // ifndef __se3_joint_configuration_hxx__ 
bool isSameConfiguration(const Model &model, const Eigen::VectorXd &q1, const Eigen::VectorXd &q2, const double &prec=Eigen::NumTraits< double >::dummy_precision())
Return true if the given configurations are equivalents. 
 
Eigen::VectorXd lowerPositionLimit
Lower joint configuration limit. 
 
int nq
Dimension of the configuration vector representation. 
 
int nv
Dimension of the velocity vector space. 
 
Eigen::VectorXd squaredDistance(const Model &model, const Eigen::VectorXd &q0, const Eigen::VectorXd &q1)
Squared distance between two configuration vectors. 
 
JointModelVector joints
Model of joint i, encapsulated in a JointModelAccessor. 
 
Eigen::VectorXd difference(const Model &model, const Eigen::VectorXd &q0, const Eigen::VectorXd &q1)
Compute the tangent vector that must be integrated during one unit time to go from q0 to q1...
 
Eigen::VectorXd neutral(const Model &model)
Return the neutral configuration element related to the model configuration space. 
 
double distance(const Model &model, const Eigen::VectorXd &q0, const Eigen::VectorXd &q1)
Distance between two configuration vectors. 
 
Eigen::VectorXd interpolate(const Model &model, const Eigen::VectorXd &q0, const Eigen::VectorXd &q1, const double u)
Interpolate the model between two configurations. 
 
Eigen::VectorXd integrate(const Model &model, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
Integrate a configuration for the specified model for a tangent vector during one unit time...
 
Eigen::VectorXd randomConfiguration(const Model &model, const Eigen::VectorXd &lowerLimits, const Eigen::VectorXd &upperLimits)
Generate a configuration vector uniformly sampled among provided limits. 
 
void normalize(const Model &model, Eigen::VectorXd &q)
Normalize a configuration. 
 
int njoints
Number of joints.