18 #ifndef __se3_joint_basic_visitors_hxx__ 19 #define __se3_joint_basic_visitors_hxx__ 21 #include "pinocchio/assert.hpp" 22 #include "pinocchio/multibody/joint/joint-basic-visitors.hpp" 23 #include "pinocchio/multibody/joint/joint-composite.hpp" 24 #include "pinocchio/multibody/visitor.hpp" 38 {
return JointDataVariant(jmodel.createData()); }
40 static JointDataVariant run(
const JointModelVariant & jmodel)
43 inline JointDataVariant
createData(
const JointModelVariant & jmodel)
45 return CreateJointData::run(jmodel);
54 typedef boost::fusion::vector< const Eigen::VectorXd & > ArgsType;
58 template<
typename Jo
intModel>
61 const Eigen::VectorXd & q
64 jmodel.calc(jdata.derived(),q);
68 inline void calc_zero_order(
const JointModelVariant & jmodel, JointDataVariant & jdata,
const Eigen::VectorXd & q)
70 JointCalcZeroOrderVisitor::run( jmodel, jdata, JointCalcZeroOrderVisitor::ArgsType(q) );
79 typedef boost::fusion::vector<
const Eigen::VectorXd &,
80 const Eigen::VectorXd & > ArgsType;
84 template<
typename Jo
intModel>
87 const Eigen::VectorXd & q,
88 const Eigen::VectorXd & v
91 jmodel.calc(jdata.derived(),q,v);
95 inline void calc_first_order(
const JointModelVariant & jmodel, JointDataVariant & jdata,
const Eigen::VectorXd & q,
const Eigen::VectorXd & v)
97 JointCalcFirstOrderVisitor::run( jmodel, jdata, JointCalcFirstOrderVisitor::ArgsType(q,v) );
107 typedef boost::fusion::vector< Inertia::Matrix6 &,
108 const bool > ArgsType;
112 template<
typename Jo
intModel>
115 Inertia::Matrix6 & I,
119 jmodel.calc_aba(jdata.derived(),I,update_I);
123 inline void calc_aba(
const JointModelVariant & jmodel, JointDataVariant & jdata, Inertia::Matrix6 & I,
const bool update_I)
125 JointCalcAbaVisitor::run( jmodel, jdata, JointCalcAbaVisitor::ArgsType(I, update_I) );
136 static double run(
const JointModelVariant & jmodel)
141 {
return JointEpsVisitor::run(jmodel); }
151 {
return jmodel.nv(); }
153 static int run(
const JointModelVariant & jmodel)
156 inline int nv(
const JointModelVariant & jmodel) {
return JointNvVisitor::run(jmodel); }
167 {
return jmodel.nq(); }
169 static int run(
const JointModelVariant & jmodel)
172 inline int nq(
const JointModelVariant & jmodel) {
return JointNqVisitor::run(jmodel); }
182 {
return jmodel.idx_q(); }
184 static int run(
const JointModelVariant & jmodel)
187 inline int idx_q(
const JointModelVariant & jmodel) {
return JointIdxQVisitor::run(jmodel); }
197 {
return jmodel.idx_v(); }
199 static int run(
const JointModelVariant & jmodel)
202 inline int idx_v(
const JointModelVariant & jmodel) {
return JointIdxVVisitor::run(jmodel); }
212 {
return jmodel.id(); }
214 static JointIndex run(
const JointModelVariant & jmodel)
217 inline JointIndex
id(
const JointModelVariant & jmodel) {
return JointIdVisitor::run(jmodel); }
234 { jmodel.setIndexes(
id, q, v); }
236 static void run(JointModelVariant & jmodel, JointIndex
id,
int q,
int v)
239 inline void setIndexes(JointModelVariant & jmodel, JointIndex
id,
int q,
int v) {
return JointSetIndexesVisitor::run(jmodel,
id, q, v); }
251 {
return jmodel.shortname(); }
253 static std::string run(
const JointModelVariant & jmodel)
256 inline std::string
shortname(
const JointModelVariant & jmodel) {
return JointShortnameVisitor::run(jmodel);}
268 template <
typename D>
273 static ConstraintXd run(
const JointDataVariant & jdata)
284 template <
typename D>
286 {
return SE3(jdata.M()); }
288 static SE3 run(
const JointDataVariant & jdata)
291 inline SE3 joint_transform(
const JointDataVariant & jdata) {
return JointTransformVisitor::run(jdata); }
299 template <
typename D>
301 {
return Motion(jdata.v()); }
303 static Motion run(
const JointDataVariant & jdata)
306 inline Motion motion(
const JointDataVariant & jdata) {
return JointMotionVisitor::run(jdata); }
314 template <
typename D>
316 {
return Motion(jdata.c()); }
318 static Motion run(
const JointDataVariant & jdata)
321 inline Motion bias(
const JointDataVariant & jdata) {
return JointBiasVisitor::run(jdata); }
333 template <
typename D>
334 Eigen::Matrix<double,6,Eigen::Dynamic> operator()(
const JointDataBase<D> & jdata)
const 335 {
return Eigen::Matrix<double,6,Eigen::Dynamic>(jdata.U()); }
337 static Eigen::Matrix<double,6,Eigen::Dynamic> run(
const JointDataVariant & jdata)
340 inline Eigen::Matrix<double,6,Eigen::Dynamic>
u_inertia(
const JointDataVariant & jdata) {
return JointUInertiaVisitor::run(jdata); }
348 template <
typename D>
349 Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> operator()(
const JointDataBase<D> & jdata)
const 350 {
return Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic>(jdata.Dinv()); }
352 static Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> run(
const JointDataVariant & jdata)
355 inline Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic>
dinv_inertia(
const JointDataVariant & jdata) {
return JointDInvInertiaVisitor::run(jdata); }
364 template <
typename D>
365 Eigen::Matrix<double,6,Eigen::Dynamic> operator()(
const JointDataBase<D> & jdata)
const 366 {
return Eigen::Matrix<double,6,Eigen::Dynamic>(jdata.UDinv()); }
368 static Eigen::Matrix<double,6,Eigen::Dynamic> run(
const JointDataVariant & jdata)
371 inline Eigen::Matrix<double,6,Eigen::Dynamic>
udinv_inertia(
const JointDataVariant & jdata) {
return JointUDInvInertiaVisitor::run(jdata); }
377 #endif // ifndef __se3_joint_basic_visitors_hxx__ ConstraintXd constraint_xd(const JointDataVariant &jdata)
Visit a JointDataVariant through JointConstraintVisitor to get the joint constraint as a dense constr...
JointCalcFirstOrderVisitor fusion visitor.
JointDataVariant createData(const JointModelVariant &jmodel)
Visit a JointModelVariant through CreateData visitor to create a JointDataVariant.
Motion motion(const JointDataVariant &jdata)
Visit a JointDataVariant through JointMotionVisitor to get the joint internal motion as a dense motio...
Eigen::Matrix< double, 6, Eigen::Dynamic > u_inertia(const JointDataVariant &jdata)
Visit a JointDataVariant through JointUInertiaVisitor to get the U matrix of the inertia matrix decom...
JointMotionVisitor visitor.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > dinv_inertia(const JointDataVariant &jdata)
Visit a JointDataVariant through JointDInvInertiaVisitor to get the D^{-1} matrix of the inertia matr...
SE3 joint_transform(const JointDataVariant &jdata)
Visit a JointDataVariant through JointTransformVisitor to get the joint internal transform (transform...
JointBiasVisitor visitor.
Eigen::Matrix< double, 6, Eigen::Dynamic > udinv_inertia(const JointDataVariant &jdata)
Visit a JointDataVariant through JointUDInvInertiaVisitor to get U*D^{-1} matrix of the inertia matri...
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...
JointDInvInertiaVisitor visitor.
int nq(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointNqVisitor to get the dimension of the joint configuration spac...
ConfigVector_t::Scalar finiteDifferenceIncrement() const
Return the resolution of the finite differerence increment according to the Scalar type...
Motion bias(const JointDataVariant &jdata)
Visit a JointDataVariant through JointBiasVisitor to get the joint bias as a dense motion...
void calc_zero_order(const JointModelVariant &jmodel, JointDataVariant &jdata, const Eigen::VectorXd &q)
Visit a JointDataVariant and the corresponding JointModelVariant through JointCalcZeroOrderVisitor to...
void setIndexes(JointModelVariant &jmodel, JointIndex id, int q, int v)
Visit a JointModelVariant through JointSetIndexesVisitor to set the indexes of the joint in the kinem...
JointSetIndexesVisitor visitor.
JointUDInvInertiaVisitor visitor.
std::string shortname(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointShortnameVisitor to get the shortname of the derived joint mod...
int nv(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointNvVisitor to get the dimension of the joint tangent space...
int idx_q(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointIdxQVisitor to get the index in the full model configuration s...
JointIdxVVisitor visitor.
JointCalcAbaVisitor fusion visitor.
Eigen::VectorXd finiteDifferenceIncrement(const Model &model)
Computes the finite difference increments for each degree of freedom according to the current joint c...
JointUInertiaVisitor visitor.
JointIndex id(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointIdVisitor to get the index of the joint in the kinematic chain...
int idx_v(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointIdxVVisitor to get the index in the full model tangent space c...
void calc_first_order(const JointModelVariant &jmodel, JointDataVariant &jdata, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
Visit a JointDataVariant and the corresponding JointModelVariant through JointCalcFirstOrderVisitor t...
JointShortnameVisitor visitor.
JointIdxQVisitor visitor.
JointConstraintVisitor visitor.
JointCalcZeroOrderVisitor fusion visitor.