GCC Code Coverage Report


Directory: ./
File: include/tsid/bindings/python/tasks/task-contact-force-equality.hpp
Date: 2025-05-10 01:12:46
Exec Total Coverage
Lines: 0 65 0.0%
Branches: 0 106 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2021 LAAS-CNRS, University of Trento
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_task_contact_force_equality_hpp__
19 #define __tsid_python_task_contact_force_equality_hpp__
20
21 #include "tsid/bindings/python/fwd.hpp"
22
23 #include "tsid/tasks/task-contact-force-equality.hpp"
24 #include "tsid/robots/robot-wrapper.hpp"
25 #include "tsid/trajectories/trajectory-base.hpp"
26 #include "tsid/math/constraint-equality.hpp"
27 #include "tsid/math/constraint-base.hpp"
28 namespace tsid {
29 namespace python {
30 namespace bp = boost::python;
31
32 template <typename TaskContactForceEquality>
33 struct TaskContactForceEqualityPythonVisitor
34 : public boost::python::def_visitor<
35 TaskContactForceEqualityPythonVisitor<TaskContactForceEquality> > {
36 template <class PyClass>
37
38 ✗ void visit(PyClass &cl) const {
39 ✗ cl.def(
40 ✗ bp::init<std::string, robots::RobotWrapper &, double,
41 ✗ contacts::ContactBase &>((bp::arg("name"), bp::arg("robot"),
42 ✗ bp::arg("dt"), bp::arg("contact")),
43 "Default Constructor"))
44 ✗ .add_property("dim", &TaskContactForceEquality::dim,
45 "return dimension size")
46 ✗ .def("setReference",
47 &TaskContactForceEqualityPythonVisitor::setReference,
48 ✗ bp::arg("ref"))
49 ✗ .def("setExternalForce",
50 &TaskContactForceEqualityPythonVisitor::setExternalForce,
51 ✗ bp::arg("f_ext"))
52 ✗ .def("compute", &TaskContactForceEqualityPythonVisitor::compute,
53 bp::args("t", "q", "v", "data"))
54 ✗ .def("getConstraint",
55 &TaskContactForceEqualityPythonVisitor::getConstraint)
56 ✗ .add_property("name", &TaskContactForceEqualityPythonVisitor::name)
57 ✗ .add_property("Kp",
58 bp::make_function(
59 &TaskContactForceEqualityPythonVisitor::Kp,
60 ✗ bp::return_value_policy<bp::copy_const_reference>()))
61 ✗ .add_property("Kd",
62 bp::make_function(
63 &TaskContactForceEqualityPythonVisitor::Kd,
64 ✗ bp::return_value_policy<bp::copy_const_reference>()))
65 ✗ .add_property("Ki",
66 bp::make_function(
67 &TaskContactForceEqualityPythonVisitor::Kd,
68 ✗ bp::return_value_policy<bp::copy_const_reference>()))
69 ✗ .add_property("getLeakRate",
70 bp::make_function(
71 &TaskContactForceEqualityPythonVisitor::getLeakRate,
72 ✗ bp::return_value_policy<bp::copy_const_reference>()))
73 ✗ .def("setKp", &TaskContactForceEqualityPythonVisitor::setKp,
74 ✗ bp::arg("Kp"))
75 ✗ .def("setKd", &TaskContactForceEqualityPythonVisitor::setKd,
76 ✗ bp::arg("Kd"))
77 ✗ .def("setKi", &TaskContactForceEqualityPythonVisitor::setKi,
78 ✗ bp::arg("Ki"))
79 ✗ .def("setLeakRate", &TaskContactForceEqualityPythonVisitor::setLeakRate,
80 ✗ bp::arg("leak"));
81 }
82 ✗ static std::string name(TaskContactForceEquality &self) {
83 ✗ std::string name = self.name();
84 ✗ return name;
85 }
86 ✗ static math::ConstraintEquality compute(TaskContactForceEquality &self,
87 const double t,
88 const Eigen::VectorXd &q,
89 const Eigen::VectorXd &v,
90 pinocchio::Data &data) {
91 ✗ self.compute(t, q, v, data);
92 ✗ math::ConstraintEquality cons(self.getConstraint().name(),
93 ✗ self.getConstraint().matrix(),
94 ✗ self.getConstraint().vector());
95 ✗ return cons;
96 }
97 ✗ static math::ConstraintEquality getConstraint(
98 const TaskContactForceEquality &self) {
99 ✗ math::ConstraintEquality cons(self.getConstraint().name(),
100 ✗ self.getConstraint().matrix(),
101 ✗ self.getConstraint().vector());
102 ✗ return cons;
103 }
104 ✗ static void setReference(TaskContactForceEquality &self,
105 trajectories::TrajectorySample &ref) {
106 ✗ self.setReference(ref);
107 }
108 ✗ static void setExternalForce(TaskContactForceEquality &self,
109 trajectories::TrajectorySample &f_ext) {
110 ✗ self.setExternalForce(f_ext);
111 }
112 ✗ static const Eigen::VectorXd &Kp(TaskContactForceEquality &self) {
113 ✗ return self.Kp();
114 }
115 ✗ static const Eigen::VectorXd &Kd(TaskContactForceEquality &self) {
116 ✗ return self.Kd();
117 }
118 static const Eigen::VectorXd &Ki(TaskContactForceEquality &self) {
119 return self.Ki();
120 }
121 ✗ static const double &getLeakRate(TaskContactForceEquality &self) {
122 ✗ return self.getLeakRate();
123 }
124 ✗ static void setKp(TaskContactForceEquality &self,
125 const ::Eigen::VectorXd Kp) {
126 ✗ return self.Kp(Kp);
127 }
128 ✗ static void setKd(TaskContactForceEquality &self,
129 const ::Eigen::VectorXd Kd) {
130 ✗ return self.Kd(Kd);
131 }
132 ✗ static void setKi(TaskContactForceEquality &self,
133 const ::Eigen::VectorXd Ki) {
134 ✗ return self.Ki(Ki);
135 }
136 ✗ static void setLeakRate(TaskContactForceEquality &self, const double leak) {
137 ✗ return self.setLeakRate(leak);
138 }
139 ✗ static void expose(const std::string &class_name) {
140 ✗ std::string doc = "TaskContactForceEqualityPythonVisitor info.";
141 ✗ bp::class_<TaskContactForceEquality>(class_name.c_str(), doc.c_str(),
142 bp::no_init)
143 ✗ .def(TaskContactForceEqualityPythonVisitor<TaskContactForceEquality>());
144 }
145 };
146 } // namespace python
147 } // namespace tsid
148
149 #endif // ifndef __tsid_python_task_contact_force_equality_hpp__
150