5#ifndef __pinocchio_algorithm_constraints_constraint_model_visitor_hpp__ 6#define __pinocchio_algorithm_constraints_constraint_model_visitor_hpp__ 8#include "pinocchio/algorithm/constraints/fwd.hpp" 11#include "pinocchio/multibody/visitor/fusion.hpp" 24 template<
typename Constra
intModelVisitorDerived,
typename ReturnType =
void>
39 InternalVisitorModelAndData<Scalar, Options, ConstraintCollectionTpl, ArgsTmp> visitor(
41 return boost::apply_visitor(visitor, cmodel);
53 InternalVisitorModel<Scalar, Options, ConstraintCollectionTpl, ArgsTmp> visitor(args);
54 return boost::apply_visitor(visitor, cdata);
63 struct InternalVisitorModel :
public boost::static_visitor<ReturnType>
68 InternalVisitorModel(ArgsTmp args)
73 template<
typename Constra
intModelDerived>
77 &ConstraintModelVisitorDerived::template algo<ConstraintModelDerived>,
78 bf::append(boost::ref(cmodel.derived()), args));
81 template<
typename Constra
intDataDerived>
85 &ConstraintModelVisitorDerived::template algo<ConstraintDataDerived>,
86 bf::append(boost::ref(cdata.derived()), args));
97 struct InternalVisitorModelAndData :
public boost::static_visitor<ReturnType>
108 template<
typename Constra
intModelDerived>
112 &ConstraintModelVisitorDerived::template algo<ConstraintModelDerived>,
114 boost::ref(cmodel.derived()),
116 boost::get<
typename ConstraintModelBase<ConstraintModelDerived>::ConstraintData>(
130 template<
typename Scalar,
int Options,
template<
typename,
int>
class JointCollectionTpl>
131 struct ConstraintModelCalcVisitor
133 ConstraintModelCalcVisitor<Scalar, Options, JointCollectionTpl>>
137 typedef boost::fusion::vector<const Model &, const Data &> ArgsType;
139 template<
typename Constra
intModel>
142 typename ConstraintModel::ConstraintData & cdata,
146 cmodel.
calc(model, data, cdata.derived());
153 template<
typename S,
int O>
class JointCollectionTpl,
161 typedef ConstraintModelCalcVisitor<Scalar, Options, JointCollectionTpl> Algo;
162 Algo::run(cmodel, cdata,
typename Algo::ArgsType(model, data));
171 template<
typename,
int>
class JointCollectionTpl,
172 typename JacobianMatrix>
173 struct ConstraintModelJacobianVisitor
175 ConstraintModelJacobianVisitor<Scalar, Options, JointCollectionTpl, JacobianMatrix>>
177 typedef ModelTpl<Scalar, Options, JointCollectionTpl> Model;
178 typedef DataTpl<Scalar, Options, JointCollectionTpl> Data;
179 typedef boost::fusion::vector<const Model &, const Data &, JacobianMatrix &> ArgsType;
181 template<
typename Constra
intModel>
183 const pinocchio::ConstraintModelBase<ConstraintModel> & cmodel,
184 typename ConstraintModel::ConstraintData & cdata,
187 const Eigen::MatrixBase<JacobianMatrix> & jacobian_matrix)
189 cmodel.jacobian(model, data, cdata.derived(), jacobian_matrix.const_cast_derived());
196 template<
typename S,
int O>
class JointCollectionTpl,
198 typename JacobianMatrix>
204 const Eigen::MatrixBase<JacobianMatrix> & jacobian_matrix)
206 typedef ConstraintModelJacobianVisitor<Scalar, Options, JointCollectionTpl, JacobianMatrix>
209 cmodel, cdata,
typename Algo::ArgsType(model, data, jacobian_matrix.const_cast_derived()));
216 struct ConstraintModelCreateDataVisitor
217 : boost::static_visitor<typename ConstraintCollectionTpl<Scalar, Options>::ConstraintDataVariant>
219 typedef fusion::NoArg ArgsType;
220 typedef ConstraintCollectionTpl<Scalar, Options> ConstraintCollection;
221 typedef typename ConstraintCollection::ConstraintModelVariant ConstraintModelVariant;
222 typedef typename ConstraintCollection::ConstraintDataVariant ConstraintDataVariant;
224 template<
typename Constra
intModel>
225 ConstraintDataVariant
226 operator()(
const pinocchio::ConstraintModelBase<ConstraintModel> & cmodel)
const 228 return cmodel.createData();
231 static ConstraintDataVariant run(
const ConstraintModelVariant & cmodel)
233 return boost::apply_visitor(ConstraintModelCreateDataVisitor(), cmodel);
241 return ConstraintModelCreateDataVisitor<Scalar, Options, ConstraintCollectionTpl>::run(cmodel);
248 typename ConstraintDataDerived>
249 struct ConstraintDataComparisonOperatorVisitor
251 ConstraintDataComparisonOperatorVisitor<
254 ConstraintCollectionTpl,
255 ConstraintDataDerived>,
258 typedef boost::fusion::vector<const ConstraintDataDerived &> ArgsType;
260 template<
typename Constra
intData>
262 const ConstraintDataBase<ConstraintData> & cdata_lhs,
const ConstraintDataDerived & cdata_rhs)
264 return cdata_lhs.derived() == cdata_rhs;
272 typename ConstraintDataDerived>
277 typedef ConstraintDataComparisonOperatorVisitor<
280 return Algo::run(cdata_generic,
typename Algo::ArgsType(boost::ref(cdata.derived())));
Main pinocchio namespace.
void calc(const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, ConstraintData &cdata) const
Evaluate the constraint values at the current state given by data and store the results in cdata.
Base structure for Unary visitation of a ConstraintModel. This structure provides runners to call the...