18 #ifndef __se3_joint_composite_hxx__ 19 #define __se3_joint_composite_hxx__ 21 #include "pinocchio/multibody/visitor.hpp" 30 const Eigen::VectorXd &
35 template<
typename Jo
intModel>
38 const se3::JointModelComposite & model,
39 se3::JointDataComposite & data,
40 const Eigen::VectorXd & q)
42 const JointIndex & i = jmodel.id();
43 const JointIndex succ = i+1;
45 jmodel.calc(jdata.derived(), q);
49 if ( succ == model.
joints.size() )
59 data.S.matrix().middleCols(idx_v,model.
m_nvs[i]) = data.
iMlast[succ].inverse().act(jdata.S());
66 inline void JointModelComposite::calc(
JointData & data,
const Eigen::VectorXd & qs)
const 68 assert(joints.size() > 0);
69 assert(data.joints.size() == joints.size());
71 for (
int i=(
int)(joints.size()-1); i >= 0; --i)
73 JointCompositeCalcZeroOrderStep::run(joints[(
size_t)i], data.joints[(
size_t)i],
74 JointCompositeCalcZeroOrderStep::ArgsType (*
this,data,qs)
77 data.M = data.iMlast.front();
84 const Eigen::VectorXd &,
85 const Eigen::VectorXd &
90 template<
typename Jo
intModel>
93 const se3::JointModelComposite & model,
94 se3::JointDataComposite & data,
95 const Eigen::VectorXd & q,
96 const Eigen::VectorXd & v)
98 const JointIndex & i = jmodel.id();
99 const JointIndex succ = i+1;
101 jmodel.calc(jdata.derived(), q, v);
105 if ( succ == model.
joints.size() )
117 data.S.matrix().middleCols(idx_v,model.
m_nvs[i]) = data.
iMlast[succ].inverse().act(jdata.S());
123 data.c -= data.v.cross(v_tmp);
124 data.c += data.
iMlast[succ].actInv(
bias(jdata.derived()));
131 inline void JointModelComposite::calc(
JointData & data,
const Eigen::VectorXd & qs,
const Eigen::VectorXd & vs)
const 133 assert(joints.size() > 0);
134 assert(data.joints.size() == joints.size());
136 for (
int i=(
int)(joints.size()-1); i >= 0; --i)
138 JointCompositeCalcFirstOrderStep::run(joints[(
size_t)i], data.joints[(
size_t)i],
139 JointCompositeCalcFirstOrderStep::ArgsType (*
this,data,qs,vs)
142 data.M = data.iMlast.front();
147 #endif // ifndef __se3_joint_composite_hxx__ ConstraintXd constraint_xd(const JointDataVariant &jdata)
Visit a JointDataVariant through JointConstraintVisitor to get the joint constraint as a dense constr...
container::aligned_vector< Transformation_t > iMlast
Transforms from previous joint to last joint.
Motion motion(const JointDataVariant &jdata)
Visit a JointDataVariant through JointMotionVisitor to get the joint internal motion as a dense motio...
container::aligned_vector< SE3 > jointPlacements
Vector of joint placements. Those placements correspond to the origin of the joint relatively to thei...
std::vector< int > m_nvs
Dimension of the segment in the tangent vector.
container::aligned_vector< Transformation_t > pjMi
Transforms from previous joint to joint i.
Motion bias(const JointDataVariant &jdata)
Visit a JointDataVariant through JointBiasVisitor to get the joint bias as a dense motion...
std::vector< int > m_idx_v
Index in the tangent vector.
JointModelVector joints
Vector of joints contained in the joint composite.
int idx_v(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointIdxVVisitor to get the index in the full model tangent space c...