| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include <boost/python.hpp> | ||
| 2 | #include <eigenpy/eigenpy.hpp> | ||
| 3 | #include <eigenpy/memory.hpp> | ||
| 4 | |||
| 5 | #include "hpp/centroidal-dynamics/centroidal_dynamics.hh" | ||
| 6 | #include "hpp/centroidal-dynamics/util.hh" | ||
| 7 | |||
| 8 | EIGENPY_DEFINE_STRUCT_ALLOCATOR_SPECIALIZATION(centroidal_dynamics::Equilibrium) | ||
| 9 | |||
| 10 | namespace centroidal_dynamics { | ||
| 11 | using namespace boost::python; | ||
| 12 | |||
| 13 | 1 | boost::python::tuple wrapComputeQuasiEquilibriumRobustness(Equilibrium& self, | |
| 14 | const Vector3& com) { | ||
| 15 | double robustness; | ||
| 16 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | LP_status status = self.computeEquilibriumRobustness(com, robustness); |
| 17 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return boost::python::make_tuple(status, robustness); |
| 18 | } | ||
| 19 | |||
| 20 | 1 | boost::python::tuple wrapComputeEquilibriumRobustness(Equilibrium& self, | |
| 21 | const Vector3& com, | ||
| 22 | const Vector3& acc) { | ||
| 23 | double robustness; | ||
| 24 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
1 | LP_status status = self.computeEquilibriumRobustness(com, acc, robustness); |
| 25 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return boost::python::make_tuple(status, robustness); |
| 26 | } | ||
| 27 | |||
| 28 | 1 | boost::python::tuple wrapCheckRobustEquilibrium(Equilibrium& self, | |
| 29 | const Vector3& com) { | ||
| 30 | bool robustness; | ||
| 31 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | LP_status status = self.checkRobustEquilibrium(com, robustness); |
| 32 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return boost::python::make_tuple(status, robustness); |
| 33 | } | ||
| 34 | |||
| 35 | ✗ | bool wrapSetNewContacts(Equilibrium& self, | |
| 36 | const MatrixX3ColMajor& contactPoints, | ||
| 37 | const MatrixX3ColMajor& contactNormals, | ||
| 38 | const double frictionCoefficient, | ||
| 39 | const EquilibriumAlgorithm alg) { | ||
| 40 | ✗ | return self.setNewContacts(contactPoints, contactNormals, frictionCoefficient, | |
| 41 | ✗ | alg); | |
| 42 | } | ||
| 43 | |||
| 44 | 2 | bool wrapSetNewContactsFull(Equilibrium& self, | |
| 45 | const MatrixX3ColMajor& contactPoints, | ||
| 46 | const MatrixX3ColMajor& contactNormals, | ||
| 47 | const double frictionCoefficient, | ||
| 48 | const EquilibriumAlgorithm alg) { | ||
| 49 | 2 | return self.setNewContacts(contactPoints, contactNormals, frictionCoefficient, | |
| 50 | 2 | alg); | |
| 51 | } | ||
| 52 | |||
| 53 | 1 | boost::python::tuple wrapGetPolytopeInequalities(Equilibrium& self) { | |
| 54 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | MatrixXX H; |
| 55 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | VectorX h; |
| 56 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | H = MatrixXX::Zero(6, 6); |
| 57 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | h = VectorX::Zero(6, 1); |
| 58 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | self.getPolytopeInequalities(H, h); |
| 59 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | MatrixXXColMajor _H = H; |
| 60 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return boost::python::make_tuple(_H, h); |
| 61 | 1 | } | |
| 62 | |||
| 63 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 3 taken 1 times.
✗ Branch 4 not taken.
|
4 | BOOST_PYTHON_MODULE(hpp_centroidal_dynamics) { |
| 64 | /** BEGIN eigenpy init**/ | ||
| 65 | 2 | eigenpy::enableEigenPy(); | |
| 66 | |||
| 67 | // eigenpy::enableEigenPySpecific<MatrixX3ColMajor, MatrixX3ColMajor>(); | ||
| 68 | // eigenpy::enableEigenPySpecific<MatrixXXColMajor, MatrixXXColMajor>(); | ||
| 69 | // eigenpy::enableEigenPySpecific<Vector3, Vector3>(); | ||
| 70 | // eigenpy::enableEigenPySpecific<VectorX, VectorX>(); | ||
| 71 | /*eigenpy::exposeAngleAxis(); | ||
| 72 | eigenpy::exposeQuaternion();*/ | ||
| 73 | |||
| 74 | /** END eigenpy init**/ | ||
| 75 | |||
| 76 | /** BEGIN enum types **/ | ||
| 77 | #ifdef CLP_FOUND | ||
| 78 | enum_<SolverLP>("SolverLP") | ||
| 79 | .value("SOLVER_LP_QPOASES", SOLVER_LP_QPOASES) | ||
| 80 | .value("SOLVER_LP_CLP", SOLVER_LP_CLP) | ||
| 81 | .export_values(); | ||
| 82 | #else | ||
| 83 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | enum_<SolverLP>("SolverLP") |
| 84 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("SOLVER_LP_QPOASES", SOLVER_LP_QPOASES) |
| 85 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .export_values(); |
| 86 | #endif | ||
| 87 | |||
| 88 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | enum_<EquilibriumAlgorithm>("EquilibriumAlgorithm") |
| 89 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("EQUILIBRIUM_ALGORITHM_LP", EQUILIBRIUM_ALGORITHM_LP) |
| 90 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("EQUILIBRIUM_ALGORITHM_LP2", EQUILIBRIUM_ALGORITHM_LP2) |
| 91 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("EQUILIBRIUM_ALGORITHM_DLP", EQUILIBRIUM_ALGORITHM_DLP) |
| 92 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("EQUILIBRIUM_ALGORITHM_PP", EQUILIBRIUM_ALGORITHM_PP) |
| 93 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("EQUILIBRIUM_ALGORITHM_IP", EQUILIBRIUM_ALGORITHM_IP) |
| 94 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("EQUILIBRIUM_ALGORITHM_DIP", EQUILIBRIUM_ALGORITHM_DIP) |
| 95 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .export_values(); |
| 96 | |||
| 97 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | enum_<LP_status>("LP_status") |
| 98 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("LP_STATUS_UNKNOWN", LP_STATUS_UNKNOWN) |
| 99 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("LP_STATUS_OPTIMAL", LP_STATUS_OPTIMAL) |
| 100 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("LP_STATUS_INFEASIBLE", LP_STATUS_INFEASIBLE) |
| 101 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("LP_STATUS_UNBOUNDED", LP_STATUS_UNBOUNDED) |
| 102 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("LP_STATUS_MAX_ITER_REACHED", LP_STATUS_MAX_ITER_REACHED) |
| 103 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .value("LP_STATUS_ERROR", LP_STATUS_ERROR) |
| 104 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .export_values(); |
| 105 | |||
| 106 | /** END enum types **/ | ||
| 107 | |||
| 108 | // bool (Equilibrium::*setNewContacts) | ||
| 109 | // (const MatrixX3ColMajor&, const MatrixX3ColMajor&, const double, | ||
| 110 | // const EquilibriumAlgorithm, const int graspIndex, const double | ||
| 111 | // maxGraspForce) = &Equilibrium::setNewContacts; | ||
| 112 | |||
| 113 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
4 | class_<Equilibrium>( |
| 114 | "Equilibrium", | ||
| 115 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | init<std::string, double, unsigned int, |
| 116 | optional<SolverLP, bool, const unsigned int, const bool> >()) | ||
| 117 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("useWarmStart", &Equilibrium::useWarmStart) |
| 118 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("setUseWarmStart", &Equilibrium::setUseWarmStart) |
| 119 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("getName", &Equilibrium::getName) |
| 120 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("getAlgorithm", &Equilibrium::getAlgorithm) |
| 121 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("setNewContacts", wrapSetNewContacts) |
| 122 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("setNewContacts", wrapSetNewContactsFull) |
| 123 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("computeEquilibriumRobustness", |
| 124 | wrapComputeQuasiEquilibriumRobustness) | ||
| 125 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("computeEquilibriumRobustness", wrapComputeEquilibriumRobustness) |
| 126 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("checkRobustEquilibrium", wrapCheckRobustEquilibrium) |
| 127 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | .def("getPolytopeInequalities", wrapGetPolytopeInequalities); |
| 128 | 2 | } | |
| 129 | |||
| 130 | } // namespace centroidal_dynamics | ||
| 131 |