18 #ifndef __se3_lie_group_variant_visitor_hxx__    19 #define __se3_lie_group_variant_visitor_hxx__    21 #include "pinocchio/multibody/liegroup/operation-base.hpp"    22 #include "pinocchio/multibody/visitor.hpp"    26 #define LIE_GROUP_VISITOR(VISITOR) \    27 VISITOR(ArgsType & args) : args(args) {} \    37     template<
typename Visitor>
    43         bf::invoke(&Visitor::template algo<D>,
    44                    bf::append(boost::ref(lg),
    45                               static_cast<const Visitor*>(
this)->args));
    48       template<
typename ArgsTmp>
    49       static void run(
const LieGroupVariant & lg,
    52         return boost::apply_visitor(Visitor(args),lg);
    65     static int run(
const LieGroupVariant & lg)
    68   inline int nq(
const LieGroupVariant & lg) { 
return LieGroupNqVisitor::run(lg); }
    79     static int run(
const LieGroupVariant & lg)
    82   inline int nv(
const LieGroupVariant & lg) { 
return LieGroupNvVisitor::run(lg); }
    93     static std::string run(
const LieGroupVariant & lg)
    96   inline std::string 
name(
const LieGroupVariant & lg) { 
return LieGroupNameVisitor::run(lg); }
   101   template<
typename Vector>
   108     static Vector run(
const LieGroupVariant & lg)
   112   inline Eigen::VectorXd 
neutral(
const LieGroupVariant & lg)
   118   template <
class ConfigIn_t, 
class Tangent_t, 
class ConfigOut_t>
   121     typedef boost::fusion::vector<
const ConfigIn_t &,
   123                                   ConfigOut_t &> ArgsType;
   127     template<
typename LieGroupDerived>
   129                      const Eigen::MatrixBase<ConfigIn_t> & q,
   130                      const Eigen::MatrixBase<Tangent_t>  & v,
   131                      const Eigen::MatrixBase<ConfigOut_t>& qout)
   133       ConfigOut_t & qout_ = 
const_cast< ConfigOut_t& 
>(qout.derived());
   134       lg.
integrate(Eigen::Ref<const typename LieGroupDerived::ConfigVector_t>(q),
   135                    Eigen::Ref<const typename LieGroupDerived::TangentVector_t>(v),
   136                    Eigen::Ref<typename LieGroupDerived::ConfigVector_t>(qout_));
   140   template <
class ConfigIn_t, 
class Tangent_t, 
class ConfigOut_t>
   142                         const Eigen::MatrixBase<ConfigIn_t> & q,
   143                         const Eigen::MatrixBase<Tangent_t>  & v,
   144                         const Eigen::MatrixBase<ConfigOut_t>& qout)
   146     EIGEN_STATIC_ASSERT_VECTOR_ONLY(ConfigIn_t)
   147     EIGEN_STATIC_ASSERT_VECTOR_ONLY(Tangent_t)
   148     EIGEN_STATIC_ASSERT_VECTOR_ONLY(ConfigOut_t)
   151     assert(q.size() == 
nq(lg));
   152     assert(v.size() == 
nv(lg));
   153     assert(qout.size() == 
nq(lg));
   155     ConfigOut_t & qout_ = 
const_cast< ConfigOut_t& 
>(qout.derived());
   156     Operation::run(lg,
typename Operation::ArgsType(q.derived(),v.derived(),qout_.derived()));
   160 #endif // ifndef __se3_lie_group_variant_visitor_hxx__ 
std::string name(const LieGroupVariant &lg)
Visit a LieGroupVariant to get the name of it. 
 
void integrate(const Eigen::MatrixBase< ConfigIn_t > &q, const Eigen::MatrixBase< Tangent_t > &v, const Eigen::MatrixBase< ConfigOut_t > &qout) const 
Integrate a joint's configuration with a tangent vector during one unit time duration. 
 
std::string name() const 
Get name of instance. 
 
Visitor of the Lie Group neutral element. 
 
Eigen::VectorXd neutral(const Model &model)
Return the neutral configuration element related to the model configuration space. 
 
Lie Group visitor of the dimension of the configuration space nq. 
 
Lie Group visitor of the dimension of the tangent space nv. 
 
int nq(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointNqVisitor to get the dimension of the joint configuration spac...
 
Eigen::VectorXd integrate(const Model &model, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
Integrate a configuration for the specified model for a tangent vector during one unit time...
 
int nv(const JointModelVariant &jmodel)
Visit a JointModelVariant through JointNvVisitor to get the dimension of the joint tangent space...
 
Index nv() const 
Get dimension of Lie Group tangent space. 
 
ConfigVector_t neutral() const 
Get neutral element as a vector. 
 
Visitor of the Lie Group name. 
 
Visitor of the Lie Group integrate method.