bindings/python/contacts/contact-point.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2018 CNRS
3 //
4 // This file is part of tsid
5 // tsid is free software: you can redistribute it
6 // and/or modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation, either version
8 // 3 of the License, or (at your option) any later version.
9 // tsid is distributed in the hope that it will be
10 // useful, but WITHOUT ANY WARRANTY; without even the implied warranty
11 // of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Lesser Public License for more details. You should have
13 // received a copy of the GNU Lesser General Public License along with
14 // tsid If not, see
15 // <http://www.gnu.org/licenses/>.
16 //
17 
18 #ifndef __tsid_python_contact_6d_hpp__
19 #define __tsid_python_contact_6d_hpp__
20 
22 
28 
29 namespace tsid {
30 namespace python {
31 namespace bp = boost::python;
32 
33 template <typename ContactPoint>
35  : public boost::python::def_visitor<
36  ContactPointPythonVisitor<ContactPoint> > {
37  template <class PyClass>
38 
39  void visit(PyClass& cl) const {
40  cl.def(bp::init<std::string, robots::RobotWrapper&, std::string,
41  Eigen::VectorXd, double, double, double>(
42  (bp::arg("name"), bp::arg("robot"), bp::arg("framename"),
43  bp::arg("contactNormal"), bp::arg("frictionCoeff"),
44  bp::arg("minForce"), bp::arg("maxForce")),
45  "Default Constructor"))
46  .add_property("n_motion", &ContactPoint::n_motion,
47  "return number of motion")
48  .add_property("n_force", &ContactPoint::n_force,
49  "return number of force")
50  .add_property("name", &ContactPointPythonVisitor::name, "return name")
51  .def("computeMotionTask", &ContactPointPythonVisitor::computeMotionTask,
52  bp::args("t", "q", "v", "data"))
53  .def("computeForceTask", &ContactPointPythonVisitor::computeForceTask,
54  bp::args("t", "q", "v", "data"))
55  .def("computeForceRegularizationTask",
57  bp::args("t", "q", "v", "data"))
58 
59  .add_property("getForceGeneratorMatrix",
60  bp::make_function(
62  bp::return_value_policy<bp::copy_const_reference>()))
63 
64  .def("getNormalForce", &ContactPointPythonVisitor::getNormalForce,
65  bp::arg("vec"))
66  .add_property("getMinNormalForce", &ContactPoint::getMinNormalForce)
67  .add_property("getMaxNormalForce", &ContactPoint::getMaxNormalForce)
68 
69  .add_property("Kp",
70  bp::make_function(
72  bp::return_value_policy<bp::copy_const_reference>()))
73  .add_property("Kd",
74  bp::make_function(
76  bp::return_value_policy<bp::copy_const_reference>()))
77  .def("setKp", &ContactPointPythonVisitor::setKp, bp::arg("Kp"))
78  .def("setKd", &ContactPointPythonVisitor::setKd, bp::arg("Kd"))
79 
80  .def("useLocalFrame", &ContactPointPythonVisitor::useLocalFrame,
81  bp::arg("local_frame"))
82 
83  .def("setContactNormal", &ContactPointPythonVisitor::setContactNormal,
84  bp::args("vec"))
85  .def("setFrictionCoefficient",
87  bp::args("friction_coeff"))
88  .def("setMinNormalForce", &ContactPointPythonVisitor::setMinNormalForce,
89  bp::args("min_force"))
90  .def("setMaxNormalForce", &ContactPointPythonVisitor::setMaxNormalForce,
91  bp::args("max_force"))
92  .def("setReference", &ContactPointPythonVisitor::setReference,
93  bp::args("SE3"))
94  .def("setForceReference", &ContactPointPythonVisitor::setForceReference,
95  bp::args("f_vec"))
96  .def("setRegularizationTaskWeightVector",
98  bp::args("w_vec"));
99  }
100  static std::string name(ContactPoint& self) {
101  std::string name = self.name();
102  return name;
103  }
104 
105  static math::ConstraintEquality computeMotionTask(ContactPoint& self,
106  const double t,
107  const Eigen::VectorXd& q,
108  const Eigen::VectorXd& v,
110  self.computeMotionTask(t, q, v, data);
111  math::ConstraintEquality cons(self.getMotionConstraint().name(),
112  self.getMotionConstraint().matrix(),
113  self.getMotionConstraint().vector());
114  return cons;
115  }
117  ContactPoint& self, const double t, const Eigen::VectorXd& q,
118  const Eigen::VectorXd& v, const pinocchio::Data& data) {
119  self.computeForceTask(t, q, v, data);
120  math::ConstraintInequality cons(self.getForceConstraint().name(),
121  self.getForceConstraint().matrix(),
122  self.getForceConstraint().lowerBound(),
123  self.getForceConstraint().upperBound());
124  return cons;
125  }
127  ContactPoint& self, const double t, const Eigen::VectorXd& q,
128  const Eigen::VectorXd& v, const pinocchio::Data& data) {
129  self.computeForceRegularizationTask(t, q, v, data);
130  math::ConstraintEquality cons(self.getForceRegularizationTask().name(),
131  self.getForceRegularizationTask().matrix(),
132  self.getForceRegularizationTask().vector());
133  return cons;
134  }
135 
136  static void useLocalFrame(ContactPoint& self, const bool local_frame) {
137  self.useLocalFrame(local_frame);
138  }
139  static const Eigen::MatrixXd& getForceGeneratorMatrix(ContactPoint& self) {
140  return self.getForceGeneratorMatrix();
141  }
142  static const Eigen::VectorXd& Kp(ContactPoint& self) { return self.Kp(); }
143  static const Eigen::VectorXd& Kd(ContactPoint& self) { return self.Kd(); }
144  static void setKp(ContactPoint& self, const ::Eigen::VectorXd Kp) {
145  return self.Kp(Kp);
146  }
147  static void setKd(ContactPoint& self, const ::Eigen::VectorXd Kd) {
148  return self.Kd(Kd);
149  }
150  static bool setContactPoints(ContactPoint& self,
151  const ::Eigen::MatrixXd contactpoints) {
152  return self.setContactPoints(contactpoints);
153  }
154  static bool setContactNormal(ContactPoint& self,
155  const ::Eigen::VectorXd contactNormal) {
156  return self.setContactNormal(contactNormal);
157  }
158  static bool setFrictionCoefficient(ContactPoint& self,
159  const double frictionCoefficient) {
160  return self.setFrictionCoefficient(frictionCoefficient);
161  }
162  static bool setMinNormalForce(ContactPoint& self,
163  const double minNormalForce) {
164  return self.setMinNormalForce(minNormalForce);
165  }
166  static bool setMaxNormalForce(ContactPoint& self,
167  const double maxNormalForce) {
168  return self.setMaxNormalForce(maxNormalForce);
169  }
170  static void setReference(ContactPoint& self, const pinocchio::SE3& ref) {
171  self.setReference(ref);
172  }
173  static void setForceReference(ContactPoint& self,
174  const ::Eigen::VectorXd f_ref) {
175  self.setForceReference(f_ref);
176  }
177  static void setRegularizationTaskWeightVector(ContactPoint& self,
178  const ::Eigen::VectorXd w) {
179  self.setRegularizationTaskWeightVector(w);
180  }
181  static double getNormalForce(ContactPoint& self, Eigen::VectorXd f) {
182  return self.getNormalForce(f);
183  }
184 
185  static void expose(const std::string& class_name) {
186  std::string doc = "ContactPoint info.";
187  bp::class_<ContactPoint>(class_name.c_str(), doc.c_str(), bp::no_init)
189  }
190 };
191 } // namespace python
192 } // namespace tsid
193 
194 #endif // ifndef __tsid_python_contact_hpp__
static double getNormalForce(ContactPoint &self, Eigen::VectorXd f)
static const Eigen::MatrixXd & getForceGeneratorMatrix(ContactPoint &self)
static math::ConstraintEquality computeForceRegularizationTask(ContactPoint &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
static void setReference(ContactPoint &self, const pinocchio::SE3 &ref)
static bool setContactPoints(ContactPoint &self, const ::Eigen::MatrixXd contactpoints)
static math::ConstraintEquality computeMotionTask(ContactPoint &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, pinocchio::Data &data)
void def(const char *name, Func func)
static void setForceReference(ContactPoint &self, const ::Eigen::VectorXd f_ref)
data
Definition: setup.in.py:48
static math::ConstraintInequality computeForceTask(ContactPoint &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
static void setKp(ContactPoint &self, const ::Eigen::VectorXd Kp)
static bool setContactNormal(ContactPoint &self, const ::Eigen::VectorXd contactNormal)
static void useLocalFrame(ContactPoint &self, const bool local_frame)
static void setKd(ContactPoint &self, const ::Eigen::VectorXd Kd)
void init(bool compute_local_aabb=true)
Wrapper for a robot based on pinocchio.
static bool setMinNormalForce(ContactPoint &self, const double minNormalForce)
Transform3f t
static bool setMaxNormalForce(ContactPoint &self, const double maxNormalForce)
static const Eigen::VectorXd & Kp(ContactPoint &self)
static const Eigen::VectorXd & Kd(ContactPoint &self)
static void setRegularizationTaskWeightVector(ContactPoint &self, const ::Eigen::VectorXd w)
static bool setFrictionCoefficient(ContactPoint &self, const double frictionCoefficient)


tsid
Author(s): Andrea Del Prete, Justin Carpentier
autogenerated on Sun Jul 2 2023 02:21:51