5 #ifndef __pinocchio_multibody_liegroup_liegroup_operation_base_hpp__
6 #define __pinocchio_multibody_liegroup_liegroup_operation_base_hpp__
16 #define PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived, TYPENAME) \
17 typedef LieGroupBase<Derived> Base; \
18 typedef TYPENAME Base::Index Index; \
19 typedef TYPENAME traits<Derived>::Scalar Scalar; \
22 Options = traits<Derived>::Options, \
26 typedef TYPENAME Base::ConfigVector_t ConfigVector_t; \
27 typedef TYPENAME Base::TangentVector_t TangentVector_t; \
28 typedef TYPENAME Base::JacobianMatrix_t JacobianMatrix_t
30 #define PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE(Derived) \
31 PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived, PINOCCHIO_MACRO_EMPTY_ARG)
33 #define PINOCCHIO_LIE_GROUP_TPL_PUBLIC_INTERFACE(Derived) \
34 PINOCCHIO_LIE_GROUP_PUBLIC_INTERFACE_GENERIC(Derived, typename)
36 template<
typename Derived>
65 template<
class ConfigIn_t,
class Tangent_t,
class ConfigOut_t>
67 const Eigen::MatrixBase<ConfigIn_t> &
q,
68 const Eigen::MatrixBase<Tangent_t> &
v,
69 const Eigen::MatrixBase<ConfigOut_t> &
qout)
const;
85 template<
class Config_t,
class Jacobian_t>
87 const Eigen::MatrixBase<Config_t> &
q,
const Eigen::MatrixBase<Jacobian_t> &
J)
const;
104 template<ArgumentPosition arg,
class Config_t,
class Tangent_t,
class JacobianOut_t>
106 const Eigen::MatrixBase<Config_t> &
q,
107 const Eigen::MatrixBase<Tangent_t> &
v,
108 const Eigen::MatrixBase<JacobianOut_t> &
J,
131 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
133 const Eigen::MatrixBase<Config_t> &
q,
134 const Eigen::MatrixBase<Tangent_t> &
v,
135 const Eigen::MatrixBase<JacobianOut_t> &
J,
152 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
154 const Eigen::MatrixBase<Config_t> &
q,
155 const Eigen::MatrixBase<Tangent_t> &
v,
156 const Eigen::MatrixBase<JacobianOut_t> &
J,
159 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
161 const Eigen::MatrixBase<Config_t> &
q,
162 const Eigen::MatrixBase<Tangent_t> &
v,
163 const Eigen::MatrixBase<JacobianIn_t> & Jin,
165 const Eigen::MatrixBase<JacobianOut_t> & Jout,
168 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
170 const Eigen::MatrixBase<Config_t> &
q,
171 const Eigen::MatrixBase<Tangent_t> &
v,
173 const Eigen::MatrixBase<JacobianIn_t> & Jin,
174 const Eigen::MatrixBase<JacobianOut_t> & Jout,
190 template<
class Config_t,
class Tangent_t,
class JacobianOut_t>
192 const Eigen::MatrixBase<Config_t> &
q,
193 const Eigen::MatrixBase<Tangent_t> &
v,
194 const Eigen::MatrixBase<JacobianOut_t> &
J,
197 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
199 const Eigen::MatrixBase<Config_t> &
q,
200 const Eigen::MatrixBase<Tangent_t> &
v,
202 const Eigen::MatrixBase<JacobianIn_t> & Jin,
203 const Eigen::MatrixBase<JacobianOut_t> & Jout,
206 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
208 const Eigen::MatrixBase<Config_t> &
q,
209 const Eigen::MatrixBase<Tangent_t> &
v,
210 const Eigen::MatrixBase<JacobianIn_t> & Jin,
212 const Eigen::MatrixBase<JacobianOut_t> & Jout,
240 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
242 const Eigen::MatrixBase<Config_t> &
q,
243 const Eigen::MatrixBase<Tangent_t> &
v,
244 const Eigen::MatrixBase<JacobianIn_t> & Jin,
245 const Eigen::MatrixBase<JacobianOut_t> & Jout,
270 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
272 const Eigen::MatrixBase<Config_t> &
q,
273 const Eigen::MatrixBase<Tangent_t> &
v,
274 const Eigen::MatrixBase<JacobianIn_t> & Jin,
275 const Eigen::MatrixBase<JacobianOut_t> & Jout)
const;
298 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
300 const Eigen::MatrixBase<Config_t> &
q,
301 const Eigen::MatrixBase<Tangent_t> &
v,
302 const Eigen::MatrixBase<JacobianIn_t> & Jin,
303 const Eigen::MatrixBase<JacobianOut_t> & Jout)
const;
327 template<
class Config_t,
class Tangent_t,
class Jacobian_t>
329 const Eigen::MatrixBase<Config_t> &
q,
330 const Eigen::MatrixBase<Tangent_t> &
v,
331 const Eigen::MatrixBase<Jacobian_t> &
J,
355 template<
class Config_t,
class Tangent_t,
class Jacobian_t>
357 const Eigen::MatrixBase<Config_t> &
q,
358 const Eigen::MatrixBase<Tangent_t> &
v,
359 const Eigen::MatrixBase<Jacobian_t> &
J)
const;
381 template<
class Config_t,
class Tangent_t,
class Jacobian_t>
383 const Eigen::MatrixBase<Config_t> &
q,
384 const Eigen::MatrixBase<Tangent_t> &
v,
385 const Eigen::MatrixBase<Jacobian_t> &
J)
const;
396 template<
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
398 const Eigen::MatrixBase<ConfigL_t> &
q0,
399 const Eigen::MatrixBase<ConfigR_t> &
q1,
401 const Eigen::MatrixBase<ConfigOut_t> &
qout)
const;
413 template<
class Config_t>
414 void normalize(
const Eigen::MatrixBase<Config_t> &
qout)
const;
424 template<
class Config_t>
426 const Eigen::MatrixBase<Config_t> &
qin,
427 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const;
437 template<
class Config_t>
438 void random(
const Eigen::MatrixBase<Config_t> &
qout)
const;
449 template<
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
451 const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
452 const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit,
453 const Eigen::MatrixBase<ConfigOut_t> &
qout)
const;
470 template<
class ConfigL_t,
class ConfigR_t,
class Tangent_t>
472 const Eigen::MatrixBase<ConfigL_t> &
q0,
473 const Eigen::MatrixBase<ConfigR_t> &
q1,
474 const Eigen::MatrixBase<Tangent_t> &
v)
const;
497 template<ArgumentPosition arg,
class ConfigL_t,
class ConfigR_t,
class JacobianOut_t>
499 const Eigen::MatrixBase<ConfigL_t> &
q0,
500 const Eigen::MatrixBase<ConfigR_t> &
q1,
501 const Eigen::MatrixBase<JacobianOut_t> &
J)
const;
514 template<
class ConfigL_t,
class ConfigR_t,
class JacobianOut_t>
516 const Eigen::MatrixBase<ConfigL_t> &
q0,
517 const Eigen::MatrixBase<ConfigR_t> &
q1,
518 const Eigen::MatrixBase<JacobianOut_t> &
J,
528 const Eigen::MatrixBase<ConfigL_t> &
q0,
529 const Eigen::MatrixBase<ConfigR_t> &
q1,
530 const Eigen::MatrixBase<JacobianIn_t> & Jin,
532 const Eigen::MatrixBase<JacobianOut_t> & Jout,
542 const Eigen::MatrixBase<ConfigL_t> &
q0,
543 const Eigen::MatrixBase<ConfigR_t> &
q1,
545 const Eigen::MatrixBase<JacobianIn_t> & Jin,
546 const Eigen::MatrixBase<JacobianOut_t> & Jout,
557 template<
class ConfigL_t,
class ConfigR_t>
559 const Eigen::MatrixBase<ConfigL_t> &
q0,
const Eigen::MatrixBase<ConfigR_t> &
q1)
const;
569 template<
class ConfigL_t,
class ConfigR_t>
571 const Eigen::MatrixBase<ConfigL_t> &
q0,
const Eigen::MatrixBase<ConfigR_t> &
q1)
const;
582 template<
class ConfigL_t,
class ConfigR_t>
584 const Eigen::MatrixBase<ConfigL_t> &
q0,
585 const Eigen::MatrixBase<ConfigR_t> &
q1,
586 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const;
602 template<
class Config_t,
class Tangent_t>
604 integrate(
const Eigen::MatrixBase<Config_t> &
q,
const Eigen::MatrixBase<Tangent_t> &
v)
const;
606 template<
class ConfigL_t,
class ConfigR_t>
608 const Eigen::MatrixBase<ConfigL_t> &
q0,
609 const Eigen::MatrixBase<ConfigR_t> &
q1,
614 template<
class ConfigL_t,
class ConfigR_t>
616 const Eigen::MatrixBase<ConfigL_t> & lower_pos_limit,
617 const Eigen::MatrixBase<ConfigR_t> & upper_pos_limit)
const;
619 template<
class ConfigL_t,
class ConfigR_t>
621 const Eigen::MatrixBase<ConfigL_t> &
q0,
const Eigen::MatrixBase<ConfigR_t> &
q1)
const;
627 template<
class Config_t,
class Tangent_t,
class JacobianIn_t,
class JacobianOut_t>
631 const JacobianIn_t & Jin,
632 JacobianOut_t & Jout,
633 bool dIntegrateOnTheLeft,
644 const ConfigL_t &
q0,
645 const ConfigR_t &
q1,
646 const JacobianIn_t & Jin,
647 JacobianOut_t & Jout,
648 bool dDifferenceOnTheLeft,
651 template<
class ConfigL_t,
class ConfigR_t,
class ConfigOut_t>
653 const Eigen::MatrixBase<ConfigL_t> &
q0,
654 const Eigen::MatrixBase<ConfigR_t> &
q1,
656 const Eigen::MatrixBase<ConfigOut_t> &
qout)
const;
658 template<
class Config_t>
661 template<
class Config_t>
663 const Eigen::MatrixBase<Config_t> &
qin,
664 const Scalar & prec = Eigen::NumTraits<Scalar>::dummy_precision())
const;
666 template<
class ConfigL_t,
class ConfigR_t>
668 const Eigen::MatrixBase<ConfigL_t> &
q0,
const Eigen::MatrixBase<ConfigR_t> &
q1)
const;
670 template<
class ConfigL_t,
class ConfigR_t>
672 const Eigen::MatrixBase<ConfigL_t> &
q0,
673 const Eigen::MatrixBase<ConfigR_t> &
q1,
674 const Scalar & prec)
const;
698 std::string
name()
const;
702 return static_cast<Derived &
>(*this);
707 return static_cast<const Derived &
>(*this);
741 #include "pinocchio/multibody/liegroup/liegroup-base.hxx"
743 #endif // ifndef __pinocchio_multibody_liegroup_liegroup_operation_base_hpp__