14 #include <boost/fusion/container/vector.hpp>
16 #include "pinocchio/macros.hpp"
17 #include "pinocchio/eigen-common.hpp"
19 #include "pinocchio/math.hpp"
21 #include "pinocchio/spatial.hpp"
23 #include "pinocchio/multibody.hpp"
24 #include "pinocchio/multibody/joint.hpp"
25 #include "pinocchio/multibody/visitor.hpp"
27 #include "pinocchio/algorithm/check.hpp"
28 #include "pinocchio/algorithm/kinematics-derivatives.hpp"
57 template<
typename,
int>
class JointCollectionTpl,
58 typename Matrix6xOut1,
59 typename Matrix6xOut2>
61 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
62 const DataTpl<Scalar, Options, JointCollectionTpl> & data,
63 const JointIndex joint_id,
64 const SE3Tpl<Scalar, Options> & placement,
65 const ReferenceFrame rf,
66 const Eigen::MatrixBase<Matrix6xOut1> & v_partial_dq,
67 const Eigen::MatrixBase<Matrix6xOut2> & v_partial_dv);
91 template<
typename,
int>
class JointCollectionTpl,
92 typename Matrix6xOut1,
93 typename Matrix6xOut2>
95 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
96 DataTpl<Scalar, Options, JointCollectionTpl> & data,
97 const FrameIndex frame_id,
98 const ReferenceFrame rf,
99 const Eigen::MatrixBase<Matrix6xOut1> & v_partial_dq,
100 const Eigen::MatrixBase<Matrix6xOut2> & v_partial_dv)
102 PINOCCHIO_CHECK_INPUT_ARGUMENT((
int)frame_id < model.nframes,
"The frame_id is not valid.");
103 typedef ModelTpl<Scalar, Options, JointCollectionTpl> Model;
104 typedef DataTpl<Scalar, Options, JointCollectionTpl> Data;
105 typedef typename Model::Frame Frame;
107 const Frame & frame = model.frames[frame_id];
108 typename Data::SE3 & oMframe = data.oMf[frame_id];
109 oMframe = data.oMi[frame.parentJoint] * frame.placement;
111 model, data, frame.parentJoint, frame.placement, rf,
112 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut1, v_partial_dq),
113 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut1, v_partial_dv));
150 template<
typename,
int>
class JointCollectionTpl,
151 typename Matrix6xOut1,
152 typename Matrix6xOut2,
153 typename Matrix6xOut3,
154 typename Matrix6xOut4>
156 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
157 DataTpl<Scalar, Options, JointCollectionTpl> & data,
158 const JointIndex joint_id,
159 const SE3Tpl<Scalar, Options> & placement,
160 const ReferenceFrame rf,
161 const Eigen::MatrixBase<Matrix6xOut1> & v_partial_dq,
162 const Eigen::MatrixBase<Matrix6xOut2> & a_partial_dq,
163 const Eigen::MatrixBase<Matrix6xOut3> & a_partial_dv,
164 const Eigen::MatrixBase<Matrix6xOut4> & a_partial_da);
196 template<
typename,
int>
class JointCollectionTpl,
197 typename Matrix6xOut1,
198 typename Matrix6xOut2,
199 typename Matrix6xOut3,
200 typename Matrix6xOut4>
202 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
203 DataTpl<Scalar, Options, JointCollectionTpl> & data,
204 const FrameIndex frame_id,
205 const ReferenceFrame rf,
206 const Eigen::MatrixBase<Matrix6xOut1> & v_partial_dq,
207 const Eigen::MatrixBase<Matrix6xOut2> & a_partial_dq,
208 const Eigen::MatrixBase<Matrix6xOut3> & a_partial_dv,
209 const Eigen::MatrixBase<Matrix6xOut4> & a_partial_da)
211 PINOCCHIO_CHECK_INPUT_ARGUMENT((
int)frame_id < model.nframes,
"The frame_id is not valid.");
212 typedef ModelTpl<Scalar, Options, JointCollectionTpl> Model;
213 typedef DataTpl<Scalar, Options, JointCollectionTpl> Data;
214 typedef typename Model::Frame Frame;
216 const Frame & frame = model.frames[frame_id];
217 typename Data::SE3 & oMframe = data.oMf[frame_id];
218 oMframe = data.oMi[frame.parentJoint] * frame.placement;
220 model, data, frame.parentJoint, frame.placement, rf,
221 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut1, v_partial_dq),
222 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut2, a_partial_dq),
223 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut3, a_partial_dv),
224 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut4, a_partial_da));
263 template<
typename,
int>
class JointCollectionTpl,
264 typename Matrix6xOut1,
265 typename Matrix6xOut2,
266 typename Matrix6xOut3,
267 typename Matrix6xOut4,
268 typename Matrix6xOut5>
270 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
271 DataTpl<Scalar, Options, JointCollectionTpl> & data,
272 const JointIndex joint_id,
273 const SE3Tpl<Scalar, Options> & placement,
274 const ReferenceFrame rf,
275 const Eigen::MatrixBase<Matrix6xOut1> & v_partial_dq,
276 const Eigen::MatrixBase<Matrix6xOut2> & v_partial_dv,
277 const Eigen::MatrixBase<Matrix6xOut3> & a_partial_dq,
278 const Eigen::MatrixBase<Matrix6xOut4> & a_partial_dv,
279 const Eigen::MatrixBase<Matrix6xOut5> & a_partial_da)
282 model, data, joint_id, placement, rf, PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut1, v_partial_dq),
283 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut3, a_partial_dq),
284 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut4, a_partial_dv),
285 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut5, a_partial_da));
287 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut2, v_partial_dv) = a_partial_da;
323 template<
typename,
int>
class JointCollectionTpl,
324 typename Matrix6xOut1,
325 typename Matrix6xOut2,
326 typename Matrix6xOut3,
327 typename Matrix6xOut4,
328 typename Matrix6xOut5>
330 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
331 DataTpl<Scalar, Options, JointCollectionTpl> & data,
332 const FrameIndex frame_id,
333 const ReferenceFrame rf,
334 const Eigen::MatrixBase<Matrix6xOut1> & v_partial_dq,
335 const Eigen::MatrixBase<Matrix6xOut2> & v_partial_dv,
336 const Eigen::MatrixBase<Matrix6xOut3> & a_partial_dq,
337 const Eigen::MatrixBase<Matrix6xOut4> & a_partial_dv,
338 const Eigen::MatrixBase<Matrix6xOut5> & a_partial_da)
340 PINOCCHIO_CHECK_INPUT_ARGUMENT((
int)frame_id < model.nframes,
"The frame_id is not valid.");
341 typedef ModelTpl<Scalar, Options, JointCollectionTpl> Model;
342 typedef DataTpl<Scalar, Options, JointCollectionTpl> Data;
343 typedef typename Model::Frame Frame;
345 const Frame & frame = model.frames[frame_id];
346 typename Data::SE3 & oMframe = data.oMf[frame_id];
347 oMframe = data.oMi[frame.parentJoint] * frame.placement;
349 model, data, frame.parentJoint, frame.placement, rf,
350 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut1, v_partial_dq),
351 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut2, v_partial_dv),
352 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut3, a_partial_dq),
353 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut4, a_partial_dv),
354 PINOCCHIO_EIGEN_CONST_CAST(Matrix6xOut5, a_partial_da));
359 #include "pinocchio/src/algorithm/frames-derivatives.hxx"
Main pinocchio namespace.
void getFrameAccelerationDerivatives(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, DataTpl< Scalar, Options, JointCollectionTpl > &data, const JointIndex joint_id, const SE3Tpl< Scalar, Options > &placement, const ReferenceFrame rf, const Eigen::MatrixBase< Matrix6xOut1 > &v_partial_dq, const Eigen::MatrixBase< Matrix6xOut2 > &a_partial_dq, const Eigen::MatrixBase< Matrix6xOut3 > &a_partial_dv, const Eigen::MatrixBase< Matrix6xOut4 > &a_partial_da)
Computes the partial derivatives of the spatial acceleration of a frame given by its relative placeme...
void getFrameVelocityDerivatives(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const JointIndex joint_id, const SE3Tpl< Scalar, Options > &placement, const ReferenceFrame rf, const Eigen::MatrixBase< Matrix6xOut1 > &v_partial_dq, const Eigen::MatrixBase< Matrix6xOut2 > &v_partial_dv)
Computes the partial derivatives of the spatial velocity of a frame given by its relative placement,...