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.