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>
33 static ReturnType run(
54 return boost::apply_visitor(
visitor, cdata);
63 struct InternalVisitorModel :
public boost::static_visitor<ReturnType>
68 InternalVisitorModel(
ArgsTmp args)
73 template<
typename Constra
intModelDerived>
78 bf::append(boost::ref(
cmodel.derived()), args));
81 template<
typename Constra
intDataDerived>
86 bf::append(boost::ref(cdata.derived()), args));
97 struct InternalVisitorModelAndData :
public boost::static_visitor<ReturnType>
108 template<
typename Constra
intModelDerived>
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,
154 template<
typename S,
int O>
class ConstraintCollectionTpl>
156 const ConstraintModelTpl<Scalar, Options, ConstraintCollectionTpl> & cmodel,
157 ConstraintDataTpl<Scalar, Options, ConstraintCollectionTpl> & cdata,
158 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
159 const DataTpl<Scalar, Options, JointCollectionTpl> & data)
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
174 : fusion::ConstraintUnaryVisitorBase<
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>
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,
197 template<
typename S,
int O>
class ConstraintCollectionTpl,
198 typename JacobianMatrix>
200 const ConstraintModelTpl<Scalar, Options, ConstraintCollectionTpl> & cmodel,
201 ConstraintDataTpl<Scalar, Options, ConstraintCollectionTpl> & cdata,
202 const ModelTpl<Scalar, Options, JointCollectionTpl> & model,
203 const DataTpl<Scalar, Options, JointCollectionTpl> & data,
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()));
215 template<
typename Scalar,
int Options,
template<
typename S,
int O>
class ConstraintCollectionTpl>
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
228 return cmodel.createData();
231 static ConstraintDataVariant run(
const ConstraintModelVariant & cmodel)
233 return boost::apply_visitor(ConstraintModelCreateDataVisitor(), cmodel);
237 template<
typename Scalar,
int Options,
template<
typename S,
int O>
class ConstraintCollectionTpl>
238 ConstraintDataTpl<Scalar, Options, ConstraintCollectionTpl>
239 createData(
const ConstraintModelTpl<Scalar, Options, ConstraintCollectionTpl> & cmodel)
241 return ConstraintModelCreateDataVisitor<Scalar, Options, ConstraintCollectionTpl>::run(cmodel);
247 template<
typename S,
int O>
class ConstraintCollectionTpl,
248 typename ConstraintDataDerived>
249 struct ConstraintDataComparisonOperatorVisitor
250 : fusion::ConstraintUnaryVisitorBase<
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;
271 template<
typename S,
int O>
class ConstraintCollectionTpl,
272 typename ConstraintDataDerived>
274 const ConstraintDataTpl<Scalar, Options, ConstraintCollectionTpl> & cdata_generic,
275 const ConstraintDataBase<ConstraintDataDerived> & cdata)
277 typedef ConstraintDataComparisonOperatorVisitor<
278 Scalar, Options, ConstraintCollectionTpl, ConstraintDataDerived>
280 return Algo::run(cdata_generic,
typename Algo::ArgsType(boost::ref(cdata.derived())));
Main pinocchio namespace.
Base structure for Unary visitation of a ConstraintModel. This structure provides runners to call the...