tsid 1.9.0
Efficient Task Space Inverse Dynamics for Multi-body Systems based on Pinocchio
Loading...
Searching...
No Matches
contact-6d.hpp
Go to the documentation of this file.
1//
2// Copyright (c) 2018 CNRS, NYU, MPI Tübingen
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
29
30namespace tsid {
31namespace python {
32namespace bp = boost::python;
33
34template <typename Contact6d>
36 : public boost::python::def_visitor<Contact6DPythonVisitor<Contact6d> > {
37 template <class PyClass>
38
39 void visit(PyClass& cl) const {
40 cl.def(bp::init<std::string, robots::RobotWrapper&, std::string,
41 Eigen::MatrixXd, Eigen::VectorXd, double, double, double>(
42 (bp::arg("name"), bp::arg("robot"), bp::arg("framename"),
43 bp::arg("contactPoint"), bp::arg("contactNormal"),
44 bp::arg("frictionCoeff"), bp::arg("minForce"),
45 bp::arg("maxForce")),
46 "Default Constructor"))
47 .def(bp::init<std::string, robots::RobotWrapper&, std::string,
48 Eigen::MatrixXd, Eigen::VectorXd, double, double, double,
49 double>(
50 (bp::arg("name"), bp::arg("robot"), bp::arg("framename"),
51 bp::arg("contactPoint"), bp::arg("contactNormal"),
52 bp::arg("frictionCoeff"), bp::arg("minForce"), bp::arg("maxForce"),
53 bp::arg("wForceReg")),
54 "Deprecated Constructor"))
55 .add_property("n_motion", &Contact6d::n_motion,
56 "return number of motion")
57 .add_property("n_force", &Contact6d::n_force, "return number of force")
58 .add_property("name", &Contact6DPythonVisitor::name, "return name")
59 .def("computeMotionTask", &Contact6DPythonVisitor::computeMotionTask,
60 bp::args("t", "q", "v", "data"))
61 .def("computeForceTask", &Contact6DPythonVisitor::computeForceTask,
62 bp::args("t", "q", "v", "data"))
63 .def("computeForceRegularizationTask",
65 bp::args("t", "q", "v", "data"))
66 .def("getMotionTask", &Contact6DPythonVisitor::getMotionTask)
67
68 .add_property("getForceGeneratorMatrix",
69 bp::make_function(
71 bp::return_value_policy<bp::copy_const_reference>()))
72
73 .def("getNormalForce", &Contact6DPythonVisitor::getNormalForce,
74 bp::arg("vec"))
75 .add_property("getMinNormalForce", &Contact6d::getMinNormalForce)
76 .add_property("getMaxNormalForce", &Contact6d::getMaxNormalForce)
77
78 .add_property("Kp",
79 bp::make_function(
81 bp::return_value_policy<bp::copy_const_reference>()))
82 .add_property("Kd",
83 bp::make_function(
85 bp::return_value_policy<bp::copy_const_reference>()))
86 .def("setKp", &Contact6DPythonVisitor::setKp, bp::arg("Kp"))
87 .def("setKd", &Contact6DPythonVisitor::setKd, bp::arg("Kd"))
88
89 .def("setContactPoints", &Contact6DPythonVisitor::setContactPoints,
90 bp::args("vec"))
91 .def("setContactNormal", &Contact6DPythonVisitor::setContactNormal,
92 bp::args("vec"))
93 .def("setFrictionCoefficient",
95 bp::args("friction_coeff"))
96 .def("setMinNormalForce", &Contact6DPythonVisitor::setMinNormalForce,
97 bp::args("min_force"))
98 .def("setMaxNormalForce", &Contact6DPythonVisitor::setMaxNormalForce,
99 bp::args("max_force"))
100 .def("setReference", &Contact6DPythonVisitor::setReference,
101 bp::args("SE3"))
102 .def("setForceReference", &Contact6DPythonVisitor::setForceReference,
103 bp::args("f_vec"))
104 .def("setRegularizationTaskWeightVector",
106 bp::args("w_vec"));
107 }
108 static std::string name(Contact6d& self) {
109 std::string name = self.name();
110 return name;
111 }
112
114 const double t,
115 const Eigen::VectorXd& q,
116 const Eigen::VectorXd& v,
117 pinocchio::Data& data) {
118 self.computeMotionTask(t, q, v, data);
119 math::ConstraintEquality cons(self.getMotionConstraint().name(),
120 self.getMotionConstraint().matrix(),
121 self.getMotionConstraint().vector());
122 return cons;
123 }
125 Contact6d& self, const double t, const Eigen::VectorXd& q,
126 const Eigen::VectorXd& v, const pinocchio::Data& data) {
127 self.computeForceTask(t, q, v, data);
128 math::ConstraintInequality cons(self.getForceConstraint().name(),
129 self.getForceConstraint().matrix(),
130 self.getForceConstraint().lowerBound(),
131 self.getForceConstraint().upperBound());
132 return cons;
133 }
135 Contact6d& self, const double t, const Eigen::VectorXd& q,
136 const Eigen::VectorXd& v, const pinocchio::Data& data) {
137 self.computeForceRegularizationTask(t, q, v, data);
138 math::ConstraintEquality cons(self.getForceRegularizationTask().name(),
139 self.getForceRegularizationTask().matrix(),
140 self.getForceRegularizationTask().vector());
141 return cons;
142 }
144 tsid::tasks::TaskSE3Equality t = self.getMotionTask();
145 return t;
146 }
147
148 static const Eigen::MatrixXd& getForceGeneratorMatrix(Contact6d& self) {
149 return self.getForceGeneratorMatrix();
150 }
151 static const Eigen::VectorXd& Kp(Contact6d& self) { return self.Kp(); }
152 static const Eigen::VectorXd& Kd(Contact6d& self) { return self.Kd(); }
153 static void setKp(Contact6d& self, const ::Eigen::VectorXd Kp) {
154 return self.Kp(Kp);
155 }
156 static void setKd(Contact6d& self, const ::Eigen::VectorXd Kd) {
157 return self.Kd(Kd);
158 }
159 static bool setContactPoints(Contact6d& self,
160 const ::Eigen::MatrixXd contactpoints) {
161 return self.setContactPoints(contactpoints);
162 }
163 static bool setContactNormal(Contact6d& self,
164 const ::Eigen::VectorXd contactNormal) {
165 return self.setContactNormal(contactNormal);
166 }
167 static bool setFrictionCoefficient(Contact6d& self,
168 const double frictionCoefficient) {
169 return self.setFrictionCoefficient(frictionCoefficient);
170 }
171 static bool setMinNormalForce(Contact6d& self, const double minNormalForce) {
172 return self.setMinNormalForce(minNormalForce);
173 }
174 static bool setMaxNormalForce(Contact6d& self, const double maxNormalForce) {
175 return self.setMaxNormalForce(maxNormalForce);
176 }
177 static void setReference(Contact6d& self, const pinocchio::SE3& ref) {
178 self.setReference(ref);
179 }
180 static void setForceReference(Contact6d& self,
181 const ::Eigen::VectorXd f_ref) {
182 self.setForceReference(f_ref);
183 }
184 static void setRegularizationTaskWeightVector(Contact6d& self,
185 const ::Eigen::VectorXd w) {
186 self.setRegularizationTaskWeightVector(w);
187 }
188 static double getNormalForce(Contact6d& self, Eigen::VectorXd f) {
189 return self.getNormalForce(f);
190 }
191
192 static void expose(const std::string& class_name) {
193 std::string doc = "Contact6d info.";
194 bp::class_<Contact6d>(class_name.c_str(), doc.c_str(), bp::no_init)
196 }
197};
198} // namespace python
199} // namespace tsid
200
201#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 task-se3-equality.hpp:31
Definition constraint-bound.hpp:26
Definition constraint-bound.hpp:25
Definition contact-6d.hpp:36
static void setRegularizationTaskWeightVector(Contact6d &self, const ::Eigen::VectorXd w)
Definition contact-6d.hpp:184
static const Eigen::MatrixXd & getForceGeneratorMatrix(Contact6d &self)
Definition contact-6d.hpp:148
static void setKd(Contact6d &self, const ::Eigen::VectorXd Kd)
Definition contact-6d.hpp:156
static void expose(const std::string &class_name)
Definition contact-6d.hpp:192
static bool setContactNormal(Contact6d &self, const ::Eigen::VectorXd contactNormal)
Definition contact-6d.hpp:163
static bool setMaxNormalForce(Contact6d &self, const double maxNormalForce)
Definition contact-6d.hpp:174
static void setKp(Contact6d &self, const ::Eigen::VectorXd Kp)
Definition contact-6d.hpp:153
static std::string name(Contact6d &self)
Definition contact-6d.hpp:108
static tsid::tasks::TaskSE3Equality getMotionTask(Contact6d &self)
Definition contact-6d.hpp:143
static void setForceReference(Contact6d &self, const ::Eigen::VectorXd f_ref)
Definition contact-6d.hpp:180
static math::ConstraintEquality computeMotionTask(Contact6d &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, pinocchio::Data &data)
Definition contact-6d.hpp:113
static const Eigen::VectorXd & Kd(Contact6d &self)
Definition contact-6d.hpp:152
static bool setMinNormalForce(Contact6d &self, const double minNormalForce)
Definition contact-6d.hpp:171
static math::ConstraintInequality computeForceTask(Contact6d &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
Definition contact-6d.hpp:124
static math::ConstraintEquality computeForceRegularizationTask(Contact6d &self, const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const pinocchio::Data &data)
Definition contact-6d.hpp:134
static void setReference(Contact6d &self, const pinocchio::SE3 &ref)
Definition contact-6d.hpp:177
static double getNormalForce(Contact6d &self, Eigen::VectorXd f)
Definition contact-6d.hpp:188
void visit(PyClass &cl) const
Definition contact-6d.hpp:39
static bool setContactPoints(Contact6d &self, const ::Eigen::MatrixXd contactpoints)
Definition contact-6d.hpp:159
static const Eigen::VectorXd & Kp(Contact6d &self)
Definition contact-6d.hpp:151
static bool setFrictionCoefficient(Contact6d &self, const double frictionCoefficient)
Definition contact-6d.hpp:167