constraint-model-visitor.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2023 INRIA
3 //
4 
5 #ifndef __pinocchio_algorithm_constraints_constraint_model_visitor_hpp__
6 #define __pinocchio_algorithm_constraints_constraint_model_visitor_hpp__
7 
9 // #include "pinocchio/algorithm/constraints/constraint-model-generic.hpp"
10 // #include "pinocchio/algorithm/constraints/constraint-data-generic.hpp"
12 
13 namespace pinocchio
14 {
15 
16  namespace fusion
17  {
18 
24  template<typename ConstraintModelVisitorDerived, typename ReturnType = void>
26  {
27 
28  template<
29  typename Scalar,
30  int Options,
31  template<typename, int>
33  typename ArgsTmp>
34  static ReturnType run(
37  ArgsTmp args)
38  {
40  InternalVisitorModelAndData<Scalar, Options, ConstraintCollectionTpl, ArgsTmp> visitor(
41  cdata, args);
42  return boost::apply_visitor(visitor, cmodel);
43  }
44 
45  template<
46  typename Scalar,
47  int Options,
48  template<typename, int>
50  typename ArgsTmp>
51  static ReturnType
53  {
55  InternalVisitorModel<Scalar, Options, ConstraintCollectionTpl, ArgsTmp> visitor(args);
56  return boost::apply_visitor(visitor, cdata);
57  }
58 
59  private:
60  template<
61  typename Scalar,
62  int Options,
63  template<typename, int>
65  typename ArgsTmp>
66  struct InternalVisitorModel : public boost::static_visitor<ReturnType>
67  {
70 
72  : args(args)
73  {
74  }
75 
76  template<typename ConstraintModelDerived>
78  {
79  return bf::invoke(
80  &ConstraintModelVisitorDerived::template algo<ConstraintModelDerived>,
81  bf::append(boost::ref(cmodel.derived()), args));
82  }
83 
84  template<typename ConstraintDataDerived>
85  ReturnType operator()(const ConstraintDataBase<ConstraintDataDerived> & cdata) const
86  {
87  return bf::invoke(
88  &ConstraintModelVisitorDerived::template algo<ConstraintDataDerived>,
89  bf::append(boost::ref(cdata.derived()), args));
90  }
91 
92  ArgsTmp args;
93  };
94 
95  template<
96  typename Scalar,
97  int Options,
98  template<typename, int>
100  typename ArgsTmp>
101  struct InternalVisitorModelAndData : public boost::static_visitor<ReturnType>
102  {
105 
107  : cdata(cdata)
108  , args(args)
109  {
110  }
111 
112  template<typename ConstraintModelDerived>
114  {
115  return bf::invoke(
116  &ConstraintModelVisitorDerived::template algo<ConstraintModelDerived>,
117  bf::append(
118  boost::ref(cmodel.derived()),
119  boost::ref(
121  cdata)),
122  args));
123  }
124 
126  ArgsTmp args;
127  };
128  };
129  } // namespace fusion
130 
134  template<typename Scalar, int Options, template<typename, int> class JointCollectionTpl>
137  ConstraintModelCalcVisitor<Scalar, Options, JointCollectionTpl>>
138  {
141  typedef boost::fusion::vector<const Model &, const Data &> ArgsType;
142 
143  template<typename ConstraintModel>
144  static void algo(
146  typename ConstraintModel::ConstraintData & cdata,
147  const Model & model,
148  const Data & data)
149  {
150  cmodel.calc(model, data, cdata.derived());
151  }
152  };
153 
154  template<
155  typename Scalar,
156  int Options,
157  template<typename S, int O>
158  class JointCollectionTpl,
159  template<typename S, int O>
160  class ConstraintCollectionTpl>
161  void calc(
166  {
168  Algo::run(cmodel, cdata, typename Algo::ArgsType(model, data));
169  }
170 
174  template<
175  typename Scalar,
176  int Options,
177  template<typename, int>
178  class JointCollectionTpl,
179  typename JacobianMatrix>
182  ConstraintModelJacobianVisitor<Scalar, Options, JointCollectionTpl, JacobianMatrix>>
183  {
186  typedef boost::fusion::vector<const Model &, const Data &, JacobianMatrix &> ArgsType;
187 
188  template<typename ConstraintModel>
189  static void algo(
191  typename ConstraintModel::ConstraintData & cdata,
192  const Model & model,
193  const Data & data,
194  const Eigen::MatrixBase<JacobianMatrix> & jacobian_matrix)
195  {
196  cmodel.jacobian(model, data, cdata.derived(), jacobian_matrix.const_cast_derived());
197  }
198  };
199 
200  template<
201  typename Scalar,
202  int Options,
203  template<typename S, int O>
204  class JointCollectionTpl,
205  template<typename S, int O>
206  class ConstraintCollectionTpl,
207  typename JacobianMatrix>
208  void jacobian(
213  const Eigen::MatrixBase<JacobianMatrix> & jacobian_matrix)
214  {
216  Algo;
217  Algo::run(
218  cmodel, cdata, typename Algo::ArgsType(model, data, jacobian_matrix.const_cast_derived()));
219  }
220 
224  template<typename Scalar, int Options, template<typename S, int O> class ConstraintCollectionTpl>
226  : boost::static_visitor<typename ConstraintCollectionTpl<Scalar, Options>::ConstraintDataVariant>
227  {
232 
233  template<typename ConstraintModel>
236  {
237  return cmodel.createData();
238  }
239 
241  {
242  return boost::apply_visitor(ConstraintModelCreateDataVisitor(), cmodel);
243  }
244  };
245 
246  template<typename Scalar, int Options, template<typename S, int O> class ConstraintCollectionTpl>
247  ConstraintDataTpl<Scalar, Options, ConstraintCollectionTpl>
249  {
251  }
252 
253  template<
254  typename Scalar,
255  int Options,
256  template<typename S, int O>
257  class ConstraintCollectionTpl,
258  typename ConstraintDataDerived>
261  ConstraintDataComparisonOperatorVisitor<
262  Scalar,
263  Options,
264  ConstraintCollectionTpl,
265  ConstraintDataDerived>,
266  bool>
267  {
268  typedef boost::fusion::vector<const ConstraintDataDerived &> ArgsType;
269 
270  template<typename ConstraintData>
271  static bool algo(
272  const ConstraintDataBase<ConstraintData> & cdata_lhs, const ConstraintDataDerived & cdata_rhs)
273  {
274  return cdata_lhs.derived() == cdata_rhs;
275  }
276  };
277 
278  template<
279  typename Scalar,
280  int Options,
281  template<typename S, int O>
282  class ConstraintCollectionTpl,
283  typename ConstraintDataDerived>
284  bool isEqual(
287  {
289  Scalar, Options, ConstraintCollectionTpl, ConstraintDataDerived>
290  Algo;
291  return Algo::run(cdata_generic, typename Algo::ArgsType(boost::ref(cdata.derived())));
292  }
293 
294 } // namespace pinocchio
295 
296 #endif // ifdef __pinocchio_algorithm_constraints_constraint_model_visitor_hpp__
pinocchio::ConstraintCollectionTpl
Definition: algorithm/constraints/fwd.hpp:19
pinocchio::ConstraintModelJacobianVisitor::Data
DataTpl< Scalar, Options, JointCollectionTpl > Data
Definition: constraint-model-visitor.hpp:185
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel::operator()
ReturnType operator()(const ConstraintModelBase< ConstraintModelDerived > &cmodel) const
Definition: constraint-model-visitor.hpp:77
pinocchio::DataTpl
Definition: context/generic.hpp:25
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData::args
ArgsTmp args
Definition: constraint-model-visitor.hpp:126
omniidl_be_python_with_docstring.run
def run(tree, args)
Definition: cmake/hpp/idl/omniidl_be_python_with_docstring.py:140
pinocchio::ConstraintCollectionTpl::ConstraintDataVariant
boost::variant< RigidConstraintData > ConstraintDataVariant
Definition: algorithm/constraints/fwd.hpp:31
pinocchio::ConstraintModelCreateDataVisitor::ArgsType
fusion::NoArg ArgsType
Definition: constraint-model-visitor.hpp:228
pinocchio::ConstraintModelCalcVisitor::ArgsType
boost::fusion::vector< const Model &, const Data & > ArgsType
Definition: constraint-model-visitor.hpp:141
pinocchio::fusion::ConstraintUnaryVisitorBase::run
static ReturnType run(const ConstraintModelTpl< Scalar, Options, ConstraintCollectionTpl > &cmodel, ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > &cdata, ArgsTmp args)
Definition: constraint-model-visitor.hpp:34
pinocchio::Options
Options
Definition: joint-configuration.hpp:1116
pinocchio::ConstraintModelCreateDataVisitor::run
static ConstraintDataVariant run(const ConstraintModelVariant &cmodel)
Definition: constraint-model-visitor.hpp:240
setup.data
data
Definition: cmake/cython/setup.in.py:48
pinocchio::python::Scalar
context::Scalar Scalar
Definition: admm-solver.cpp:29
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel::ConstraintData
ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > ConstraintData
Definition: constraint-model-visitor.hpp:69
contact-cholesky.cmodel
cmodel
Definition: contact-cholesky.py:28
pinocchio::ConstraintModelCreateDataVisitor::ConstraintModelVariant
ConstraintCollection::ConstraintModelVariant ConstraintModelVariant
Definition: constraint-model-visitor.hpp:230
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData::cdata
ConstraintData & cdata
Definition: constraint-model-visitor.hpp:125
pinocchio::fusion::ConstraintUnaryVisitorBase::run
static ReturnType run(const ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > &cdata, ArgsTmp args)
Definition: constraint-model-visitor.hpp:52
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel::args
ArgsTmp args
Definition: constraint-model-visitor.hpp:92
args
args
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel::ConstraintModel
ConstraintModelTpl< Scalar, Options, ConstraintCollectionTpl > ConstraintModel
Definition: constraint-model-visitor.hpp:68
pinocchio::ConstraintModelCreateDataVisitor
ConstraintModelCreateDataVisitor fusion visitor.
Definition: constraint-model-visitor.hpp:225
pinocchio::fusion::ConstraintUnaryVisitorBase
Base structure for Unary visitation of a ConstraintModel. This structure provides runners to call the...
Definition: constraint-model-visitor.hpp:25
pinocchio::ConstraintDataTpl
Definition: constraint-data-generic.hpp:36
pinocchio::ConstraintModelJacobianVisitor::ArgsType
boost::fusion::vector< const Model &, const Data &, JacobianMatrix & > ArgsType
Definition: constraint-model-visitor.hpp:186
pinocchio::createData
ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > createData(const ConstraintModelTpl< Scalar, Options, ConstraintCollectionTpl > &cmodel)
Definition: constraint-model-visitor.hpp:248
pinocchio::ConstraintDataComparisonOperatorVisitor
Definition: constraint-model-visitor.hpp:259
pinocchio::ConstraintModelCalcVisitor::Data
DataTpl< Scalar, Options, JointCollectionTpl > Data
Definition: constraint-model-visitor.hpp:140
pinocchio::calc
void calc(const ConstraintModelTpl< Scalar, Options, ConstraintCollectionTpl > &cmodel, ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > &cdata, const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data)
Definition: constraint-model-visitor.hpp:161
pinocchio::ConstraintModelCreateDataVisitor::ConstraintCollection
ConstraintCollectionTpl< Scalar, Options > ConstraintCollection
Definition: constraint-model-visitor.hpp:229
pinocchio::ConstraintModelCreateDataVisitor::ConstraintDataVariant
ConstraintCollection::ConstraintDataVariant ConstraintDataVariant
Definition: constraint-model-visitor.hpp:231
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel
Definition: constraint-model-visitor.hpp:66
pinocchio::ConstraintDataBase::derived
Derived & derived()
Definition: constraint-data-base.hpp:19
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData::InternalVisitorModelAndData
InternalVisitorModelAndData(ConstraintData &cdata, ArgsTmp args)
Definition: constraint-model-visitor.hpp:106
pinocchio::jacobian
void jacobian(const ConstraintModelTpl< Scalar, Options, ConstraintCollectionTpl > &cmodel, ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > &cdata, const ModelTpl< Scalar, Options, JointCollectionTpl > &model, const DataTpl< Scalar, Options, JointCollectionTpl > &data, const Eigen::MatrixBase< JacobianMatrix > &jacobian_matrix)
Definition: constraint-model-visitor.hpp:208
fusion.hpp
pinocchio::ConstraintModelBase
Definition: constraint-model-base.hpp:15
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData::ConstraintData
ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > ConstraintData
Definition: constraint-model-visitor.hpp:104
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel::InternalVisitorModel
InternalVisitorModel(ArgsTmp args)
Definition: constraint-model-visitor.hpp:71
pinocchio::ConstraintModelCreateDataVisitor::operator()
ConstraintDataVariant operator()(const pinocchio::ConstraintModelBase< ConstraintModel > &cmodel) const
Definition: constraint-model-visitor.hpp:235
pinocchio::ConstraintModelTpl
Definition: constraint-model-generic.hpp:36
pinocchio::isEqual
bool isEqual(const ConstraintDataTpl< Scalar, Options, ConstraintCollectionTpl > &cdata_generic, const ConstraintDataBase< ConstraintDataDerived > &cdata)
Definition: constraint-model-visitor.hpp:284
pinocchio::ConstraintModelCalcVisitor
ConstraintModelCalcVisitor fusion visitor.
Definition: constraint-model-visitor.hpp:135
pinocchio::ConstraintModelJacobianVisitor::algo
static void algo(const pinocchio::ConstraintModelBase< ConstraintModel > &cmodel, typename ConstraintModel::ConstraintData &cdata, const Model &model, const Data &data, const Eigen::MatrixBase< JacobianMatrix > &jacobian_matrix)
Definition: constraint-model-visitor.hpp:189
pinocchio::ConstraintDataComparisonOperatorVisitor::ArgsType
boost::fusion::vector< const ConstraintDataDerived & > ArgsType
Definition: constraint-model-visitor.hpp:268
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData::operator()
ReturnType operator()(const ConstraintModelBase< ConstraintModelDerived > &cmodel) const
Definition: constraint-model-visitor.hpp:113
fwd.hpp
pinocchio::ConstraintCollectionTpl::ConstraintModelVariant
boost::variant< RigidConstraintModel > ConstraintModelVariant
Definition: algorithm/constraints/fwd.hpp:30
pinocchio::ConstraintModel
ConstraintModelTpl< context::Scalar, context::Options, ConstraintCollectionTpl > ConstraintModel
Definition: algorithm/constraints/fwd.hpp:37
boost::fusion::append
result_of::push_front< V const, T >::type append(T const &t, V const &v)
Append the element T at the front of boost fusion vector V.
Definition: fusion.hpp:32
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData
Definition: constraint-model-visitor.hpp:101
pinocchio::ConstraintDataComparisonOperatorVisitor::algo
static bool algo(const ConstraintDataBase< ConstraintData > &cdata_lhs, const ConstraintDataDerived &cdata_rhs)
Definition: constraint-model-visitor.hpp:271
pinocchio::fusion::NoArg
boost::blank NoArg
Definition: fusion.hpp:20
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModelAndData::ConstraintModel
ConstraintModelTpl< Scalar, Options, ConstraintCollectionTpl > ConstraintModel
Definition: constraint-model-visitor.hpp:103
pinocchio::ConstraintModelJacobianVisitor::Model
ModelTpl< Scalar, Options, JointCollectionTpl > Model
Definition: constraint-model-visitor.hpp:184
pinocchio::ConstraintModelCalcVisitor::algo
static void algo(const pinocchio::ConstraintModelBase< ConstraintModel > &cmodel, typename ConstraintModel::ConstraintData &cdata, const Model &model, const Data &data)
Definition: constraint-model-visitor.hpp:144
pinocchio::fusion::ConstraintUnaryVisitorBase::InternalVisitorModel::operator()
ReturnType operator()(const ConstraintDataBase< ConstraintDataDerived > &cdata) const
Definition: constraint-model-visitor.hpp:85
pinocchio::ModelTpl
Definition: context/generic.hpp:20
pinocchio::ConstraintModelBase::ConstraintData
traits< Derived >::ConstraintData ConstraintData
Definition: constraint-model-base.hpp:22
pinocchio::ConstraintDataBase
Definition: constraint-data-base.hpp:14
pinocchio::model
JointCollectionTpl & model
Definition: joint-configuration.hpp:1116
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:27
pinocchio::ConstraintModelCalcVisitor::Model
ModelTpl< Scalar, Options, JointCollectionTpl > Model
Definition: constraint-model-visitor.hpp:139
pinocchio::ConstraintModelJacobianVisitor
ConstraintModelJacobianVisitor fusion visitor.
Definition: constraint-model-visitor.hpp:180


pinocchio
Author(s):
autogenerated on Sat Jun 22 2024 02:41:45