tsid 1.9.0
Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio
Loading...
Searching...
No Matches
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
29namespace tsid {
30namespace python {
31namespace bp = boost::python;
32
33template <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
106 const double t,
107 const Eigen::VectorXd& q,
108 const Eigen::VectorXd& v,
109 pinocchio::Data& data) {
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__
Definition constraint-equality.hpp:13
Definition constraint-inequality.hpp:13
Wrapper for a robot based on pinocchio.
Definition robot-wrapper.hpp:37
Definition constraint-bound.hpp:26
Definition constraint-bound.hpp:25
Definition contact-point.hpp:36
static const Eigen::VectorXd & Kp(ContactPoint &self)
Definition contact-point.hpp:142
static const Eigen::MatrixXd & getForceGeneratorMatrix(ContactPoint &self)
Definition contact-point.hpp:139
static bool setContactNormal(ContactPoint &self, const ::Eigen::VectorXd contactNormal)
Definition contact-point.hpp:154
static bool setFrictionCoefficient(ContactPoint &self, const double frictionCoefficient)
Definition contact-point.hpp:158
static std::string name(ContactPoint &self)
Definition contact-point.hpp:100
static bool setMaxNormalForce(ContactPoint &self, const double maxNormalForce)
Definition contact-point.hpp:166
static void setForceReference(ContactPoint &self, const ::Eigen::VectorXd f_ref)
Definition contact-point.hpp:173
static const Eigen::VectorXd & Kd(ContactPoint &self)
Definition contact-point.hpp:143
static void setReference(ContactPoint &self, const pinocchio::SE3 &ref)
Definition contact-point.hpp:170
static math::ConstraintInequality computeForceTask(ContactPoint &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
Definition contact-point.hpp:116
static math::ConstraintEquality computeMotionTask(ContactPoint &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, pinocchio::Data &data)
Definition contact-point.hpp:105
static void expose(const std::string &class_name)
Definition contact-point.hpp:185
static double getNormalForce(ContactPoint &self, Eigen::VectorXd f)
Definition contact-point.hpp:181
static void setKp(ContactPoint &self, const ::Eigen::VectorXd Kp)
Definition contact-point.hpp:144
static bool setMinNormalForce(ContactPoint &self, const double minNormalForce)
Definition contact-point.hpp:162
static void useLocalFrame(ContactPoint &self, const bool local_frame)
Definition contact-point.hpp:136
static bool setContactPoints(ContactPoint &self, const ::Eigen::MatrixXd contactpoints)
Definition contact-point.hpp:150
static void setRegularizationTaskWeightVector(ContactPoint &self, const ::Eigen::VectorXd w)
Definition contact-point.hpp:177
void visit(PyClass &cl) const
Definition contact-point.hpp:39
static void setKd(ContactPoint &self, const ::Eigen::VectorXd Kd)
Definition contact-point.hpp:147
static math::ConstraintEquality computeForceRegularizationTask(ContactPoint &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
Definition contact-point.hpp:126