18 #ifndef __se3_kinematics_hxx__ 19 #define __se3_kinematics_hxx__ 21 #include "pinocchio/multibody/visitor.hpp" 22 #include "pinocchio/algorithm/check.hpp" 29 typedef boost::fusion::vector<
const se3::Model &,
35 template<
typename Jo
intModel>
48 assert(model.
check(data) &&
"data is not consistent with model.");
50 for (Model::JointIndex i=1; i < (Model::JointIndex) model.
njoints; ++i)
52 emptyForwardStep::run(model.
joints[i],
54 emptyForwardStep::ArgsType (model,data)
61 assert(model.
check(data) &&
"data is not consistent with model.");
63 for (Model::JointIndex i=1; i < (Model::JointIndex) model.
njoints; ++i)
65 const Model::JointIndex & parent = model.
parents[i];
76 typedef boost::fusion::vector<
const se3::Model &,
78 const Eigen::VectorXd &
83 template<
typename Jo
intModel>
86 const se3::Model & model,
88 const Eigen::VectorXd & q)
90 const Model::JointIndex & i = jmodel.id();
91 const Model::JointIndex & parent = model.
parents[i];
93 jmodel.calc (jdata.derived (), q);
108 const Eigen::VectorXd & q)
110 assert(q.size() == model.
nq &&
"The configuration vector is not of right size");
111 assert(model.
check(data) &&
"data is not consistent with model.");
113 for (Model::JointIndex i=1; i < (Model::JointIndex) model.
njoints; ++i)
115 ForwardKinematicZeroStep::run(model.
joints[i], data.
joints[i],
116 ForwardKinematicZeroStep::ArgsType (model,data,q)
123 typedef boost::fusion::vector<
const se3::Model &,
125 const Eigen::VectorXd &,
126 const Eigen::VectorXd &
131 template<
typename Jo
intModel>
134 const se3::Model & model,
136 const Eigen::VectorXd & q,
137 const Eigen::VectorXd & v)
139 const Model::JointIndex & i = jmodel.id();
140 const Model::JointIndex & parent = model.
parents[i];
142 jmodel.calc(jdata.derived(),q,v);
144 data.
v[i] = jdata.v();
150 data.
v[i] += data.
liMi[i].actInv(data.
v[parent]);
160 const Eigen::VectorXd & q,
161 const Eigen::VectorXd & v)
163 assert(q.size() == model.
nq &&
"The configuration vector is not of right size");
164 assert(v.size() == model.
nv &&
"The velocity vector is not of right size");
165 assert(model.
check(data) &&
"data is not consistent with model.");
169 for( Model::JointIndex i=1; i<(Model::JointIndex) model.
njoints; ++i )
171 ForwardKinematicFirstStep::run(model.
joints[i],data.
joints[i],
172 ForwardKinematicFirstStep::ArgsType(model,data,q,v));
178 typedef boost::fusion::vector<
const se3::Model &,
180 const Eigen::VectorXd &,
181 const Eigen::VectorXd &,
182 const Eigen::VectorXd &
187 template<
typename Jo
intModel>
190 const se3::Model & model,
192 const Eigen::VectorXd & q,
193 const Eigen::VectorXd & v,
194 const Eigen::VectorXd & a)
196 const Model::JointIndex & i = jmodel.id();
197 const Model::JointIndex & parent = model.
parents[i];
199 jmodel.calc(jdata.derived(),q,v);
201 data.
v[i] = jdata.v();
206 data.
oMi[i] = data.
oMi[parent] * data.
liMi[i];
207 data.
v[i] += data.
liMi[i].actInv(data.
v[parent]);
212 data.
a[i] = jdata.S() * jmodel.jointVelocitySelector(a) + jdata.c() + (data.
v[i] ^ jdata.v()) ;
213 data.
a[i] += data.
liMi[i].actInv(data.
a[parent]);
219 const Eigen::VectorXd & q,
220 const Eigen::VectorXd & v,
221 const Eigen::VectorXd & a)
223 assert(q.size() == model.
nq &&
"The configuration vector is not of right size");
224 assert(v.size() == model.
nv &&
"The velocity vector is not of right size");
225 assert(a.size() == model.
nv &&
"The acceleration vector is not of right size");
226 assert(model.
check(data) &&
"data is not consistent with model.");
231 for( Model::JointIndex i=1; i < (Model::JointIndex) model.
njoints; ++i )
233 ForwardKinematicSecondStep::run(model.
joints[i],data.
joints[i],
234 ForwardKinematicSecondStep::ArgsType(model,data,q,v,a));
239 #endif // ifndef __se3_kinematics_hxx__ container::aligned_vector< Motion > a
Vector of joint accelerations expressed at the centers of the joints.
int nq
Dimension of the configuration vector representation.
int nv
Dimension of the velocity vector space.
container::aligned_vector< SE3 > jointPlacements
Placement (SE3) of the input of joint i regarding to the parent joint output li.
JointModelVector joints
Model of joint i, encapsulated in a JointModelAccessor.
std::vector< JointIndex > parents
Joint parent of joint i, denoted li (li==parents[i]).
JointDataVector joints
Vector of se3::JointData associated to the se3::JointModel stored in model, encapsulated in JointData...
void forwardKinematics(const Model &model, Data &data, const Eigen::VectorXd &q)
Update the joint placements according to the current joint configuration.
container::aligned_vector< SE3 > liMi
Vector of relative joint placements (wrt the body parent).
container::aligned_vector< SE3 > oMi
Vector of absolute joint placements (wrt the world).
bool check(const AlgorithmCheckerBase< D > &checker=AlgorithmCheckerBase< D >()) const
void updateGlobalPlacements(const Model &model, Data &data)
Update the global placement of the joints oMi according to the relative placements of the joints...
void emptyForwardPass(const Model &model, Data &data)
Browse through the kinematic structure with a void step.
container::aligned_vector< Motion > v
Vector of joint velocities expressed at the centers of the joints.
int njoints
Number of joints.