tsid  1.8.0
Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio
contact-two-frame-positions.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2023 MIPT
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_two_frame_positions_hpp__
19 #define __tsid_python_contact_two_frame_positions_hpp__
20 
22 
28 
29 namespace tsid {
30 namespace python {
31 namespace bp = boost::python;
32 
33 template <typename ContactTwoFramePositions>
35  : public boost::python::def_visitor<
36  ContactTwoFramePositionsPythonVisitor<ContactTwoFramePositions> > {
37  template <class PyClass>
38 
39  void visit(PyClass& cl) const {
40  cl
41  .def(bp::init<std::string, robots::RobotWrapper&, std::string,
42  std::string, double, double>(
43  (bp::arg("name"), bp::arg("robot"), bp::arg("framename1"),
44  bp::arg("framename2"), bp::arg("minForce"), bp::arg("maxForce")),
45  "Default Constructor"))
46  .add_property("n_motion", &ContactTwoFramePositions::n_motion,
47  "return number of motion")
48  .add_property("n_force", &ContactTwoFramePositions::n_force,
49  "return number of force")
50  .add_property("name", &ContactTwoFramePositionsPythonVisitor::name,
51  "return name")
52  .def("computeMotionTask",
54  bp::args("t", "q", "v", "data"))
55  .def("computeForceTask",
57  bp::args("t", "q", "v", "data"))
58  .def("computeForceRegularizationTask",
61  bp::args("t", "q", "v", "data"))
62 
63  .add_property(
64  "getForceGeneratorMatrix",
65  bp::make_function(
67  bp::return_value_policy<bp::copy_const_reference>()))
68 
69  .def("getNormalForce",
71  bp::arg("vec"))
72  .add_property("getMinNormalForce",
73  &ContactTwoFramePositions::getMinNormalForce)
74  .add_property("getMaxNormalForce",
75  &ContactTwoFramePositions::getMaxNormalForce)
76 
77  .add_property("Kp",
78  bp::make_function(
80  bp::return_value_policy<bp::copy_const_reference>()))
81  .add_property("Kd",
82  bp::make_function(
84  bp::return_value_policy<bp::copy_const_reference>()))
86  bp::arg("Kp"))
88  bp::arg("Kd"))
89  .def("setContactNormal",
91  bp::args("vec"))
92  .def("setFrictionCoefficient",
94  bp::args("friction_coeff"))
95  .def("setMinNormalForce",
97  bp::args("min_force"))
98  .def("setMaxNormalForce",
100  bp::args("max_force"))
101  .def("setForceReference",
103  bp::args("f_vec"))
104  .def("setRegularizationTaskWeightVector",
107  bp::args("w_vec"));
108  }
109  static std::string name(ContactTwoFramePositions& self) {
110  std::string name = self.name();
111  return name;
112  }
113 
115  ContactTwoFramePositions& self, const double t, const Eigen::VectorXd& q,
116  const Eigen::VectorXd& v, pinocchio::Data& data) {
117  self.computeMotionTask(t, q, v, data);
118  math::ConstraintEquality cons(self.getMotionConstraint().name(),
119  self.getMotionConstraint().matrix(),
120  self.getMotionConstraint().vector());
121  return cons;
122  }
124  ContactTwoFramePositions& self, const double t, const Eigen::VectorXd& q,
125  const Eigen::VectorXd& v, const pinocchio::Data& data) {
126  self.computeForceTask(t, q, v, data);
127  math::ConstraintInequality cons(self.getForceConstraint().name(),
128  self.getForceConstraint().matrix(),
129  self.getForceConstraint().lowerBound(),
130  self.getForceConstraint().upperBound());
131  return cons;
132  }
134  ContactTwoFramePositions& self, const double t, const Eigen::VectorXd& q,
135  const Eigen::VectorXd& v, const pinocchio::Data& data) {
136  self.computeForceRegularizationTask(t, q, v, data);
137  math::ConstraintEquality cons(self.getForceRegularizationTask().name(),
138  self.getForceRegularizationTask().matrix(),
139  self.getForceRegularizationTask().vector());
140  return cons;
141  }
142 
143  static const Eigen::MatrixXd& getForceGeneratorMatrix(
144  ContactTwoFramePositions& self) {
145  return self.getForceGeneratorMatrix();
146  }
147  static const Eigen::VectorXd& Kp(ContactTwoFramePositions& self) {
148  return self.Kp();
149  }
150  static const Eigen::VectorXd& Kd(ContactTwoFramePositions& self) {
151  return self.Kd();
152  }
153  static void setKp(ContactTwoFramePositions& self,
154  const ::Eigen::VectorXd Kp) {
155  return self.Kp(Kp);
156  }
157  static void setKd(ContactTwoFramePositions& self,
158  const ::Eigen::VectorXd Kd) {
159  return self.Kd(Kd);
160  }
162  ContactTwoFramePositions& self,
163  const ::Eigen::MatrixXd ContactTwoFramePositionss) {
164  return self.setContactTwoFramePositionss(ContactTwoFramePositionss);
165  }
166  static bool setContactNormal(ContactTwoFramePositions& self,
167  const ::Eigen::VectorXd contactNormal) {
168  return self.setContactNormal(contactNormal);
169  }
170  static bool setFrictionCoefficient(ContactTwoFramePositions& self,
171  const double frictionCoefficient) {
172  return self.setFrictionCoefficient(frictionCoefficient);
173  }
174  static bool setMinNormalForce(ContactTwoFramePositions& self,
175  const double minNormalForce) {
176  return self.setMinNormalForce(minNormalForce);
177  }
178  static bool setMaxNormalForce(ContactTwoFramePositions& self,
179  const double maxNormalForce) {
180  return self.setMaxNormalForce(maxNormalForce);
181  }
182  static void setForceReference(ContactTwoFramePositions& self,
183  const ::Eigen::VectorXd f_ref) {
184  self.setForceReference(f_ref);
185  }
186  static void setRegularizationTaskWeightVector(ContactTwoFramePositions& self,
187  const ::Eigen::VectorXd w) {
188  self.setRegularizationTaskWeightVector(w);
189  }
190  static double getNormalForce(ContactTwoFramePositions& self,
191  Eigen::VectorXd f) {
192  return self.getNormalForce(f);
193  }
194  static void expose(const std::string& class_name) {
195  std::string doc = "ContactTwoFramePositions info.";
196  bp::class_<ContactTwoFramePositions>(class_name.c_str(), doc.c_str(),
197  bp::no_init)
199  }
200 };
201 } // namespace python
202 } // namespace tsid
203 
204 #endif // ifndef __tsid_python_contact_two_frame_positions_hpp__
Definition: constraint-equality.hpp:26
Definition: constraint-inequality.hpp:26
Wrapper for a robot based on pinocchio.
Definition: robot-wrapper.hpp:37
pinocchio::Data Data
Definition: inverse-dynamics-formulation-acc-force.cpp:30
Definition: constraint-bound.hpp:25
Definition: contact-two-frame-positions.hpp:36
static void setKd(ContactTwoFramePositions &self, const ::Eigen::VectorXd Kd)
Definition: contact-two-frame-positions.hpp:157
static math::ConstraintEquality computeMotionTask(ContactTwoFramePositions &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, pinocchio::Data &data)
Definition: contact-two-frame-positions.hpp:114
static bool setMinNormalForce(ContactTwoFramePositions &self, const double minNormalForce)
Definition: contact-two-frame-positions.hpp:174
static std::string name(ContactTwoFramePositions &self)
Definition: contact-two-frame-positions.hpp:109
static void setKp(ContactTwoFramePositions &self, const ::Eigen::VectorXd Kp)
Definition: contact-two-frame-positions.hpp:153
static bool setMaxNormalForce(ContactTwoFramePositions &self, const double maxNormalForce)
Definition: contact-two-frame-positions.hpp:178
static void expose(const std::string &class_name)
Definition: contact-two-frame-positions.hpp:194
static const Eigen::MatrixXd & getForceGeneratorMatrix(ContactTwoFramePositions &self)
Definition: contact-two-frame-positions.hpp:143
static bool setFrictionCoefficient(ContactTwoFramePositions &self, const double frictionCoefficient)
Definition: contact-two-frame-positions.hpp:170
static void setForceReference(ContactTwoFramePositions &self, const ::Eigen::VectorXd f_ref)
Definition: contact-two-frame-positions.hpp:182
static double getNormalForce(ContactTwoFramePositions &self, Eigen::VectorXd f)
Definition: contact-two-frame-positions.hpp:190
static bool setContactNormal(ContactTwoFramePositions &self, const ::Eigen::VectorXd contactNormal)
Definition: contact-two-frame-positions.hpp:166
static const Eigen::VectorXd & Kp(ContactTwoFramePositions &self)
Definition: contact-two-frame-positions.hpp:147
static math::ConstraintInequality computeForceTask(ContactTwoFramePositions &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
Definition: contact-two-frame-positions.hpp:123
static void setRegularizationTaskWeightVector(ContactTwoFramePositions &self, const ::Eigen::VectorXd w)
Definition: contact-two-frame-positions.hpp:186
static const Eigen::VectorXd & Kd(ContactTwoFramePositions &self)
Definition: contact-two-frame-positions.hpp:150
static bool setContactTwoFramePositionss(ContactTwoFramePositions &self, const ::Eigen::MatrixXd ContactTwoFramePositionss)
Definition: contact-two-frame-positions.hpp:161
void visit(PyClass &cl) const
Definition: contact-two-frame-positions.hpp:39
static math::ConstraintEquality computeForceRegularizationTask(ContactTwoFramePositions &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
Definition: contact-two-frame-positions.hpp:133