Line |
Branch |
Exec |
Source |
1 |
|
|
/* |
2 |
|
|
* Copyright 2015, LAAS-CNRS |
3 |
|
|
* Author: Andrea Del Prete |
4 |
|
|
*/ |
5 |
|
|
|
6 |
|
|
#ifndef HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_QPOASES_HH |
7 |
|
|
#define HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_QPOASES_HH |
8 |
|
|
|
9 |
|
|
#include <hpp/centroidal-dynamics/local_config.hh> |
10 |
|
|
#include <hpp/centroidal-dynamics/solver_LP_abstract.hh> |
11 |
|
|
#include <hpp/centroidal-dynamics/util.hh> |
12 |
|
|
#include <qpOASES.hpp> |
13 |
|
|
|
14 |
|
|
namespace centroidal_dynamics { |
15 |
|
|
|
16 |
|
|
class CENTROIDAL_DYNAMICS_DLLAPI Solver_LP_qpoases : public Solver_LP_abstract { |
17 |
|
|
private: |
18 |
|
|
qpOASES::Options m_options; // solver options |
19 |
|
|
qpOASES::SQProblem m_solver; // qpoases solver |
20 |
|
|
|
21 |
|
|
MatrixXX m_H; // Hessian matrix |
22 |
|
|
bool m_init_succeeded; // true if solver has been successfully initialized |
23 |
|
|
qpOASES::returnValue m_status; // status code returned by the solver |
24 |
|
|
|
25 |
|
|
public: |
26 |
|
|
Solver_LP_qpoases(); |
27 |
|
|
|
28 |
|
24 |
virtual ~Solver_LP_qpoases() {} |
29 |
|
|
|
30 |
|
|
/** Solve the linear program |
31 |
|
|
* minimize c' x |
32 |
|
|
* subject to Alb <= A x <= Aub |
33 |
|
|
* lb <= x <= ub |
34 |
|
|
*/ |
35 |
|
|
LP_status solve(Cref_vectorX c, Cref_vectorX lb, Cref_vectorX ub, |
36 |
|
|
Cref_matrixXX A, Cref_vectorX Alb, Cref_vectorX Aub, |
37 |
|
|
Ref_vectorX sol); |
38 |
|
|
|
39 |
|
|
/** Get the status of the solver. */ |
40 |
|
|
virtual LP_status getStatus(); |
41 |
|
|
|
42 |
|
|
/** Get the objective value of the last solved problem. */ |
43 |
|
9015 |
virtual double getObjectiveValue() { return m_solver.getObjVal(); } |
44 |
|
|
|
45 |
|
✗ |
virtual void getDualSolution(Ref_vectorX res) { |
46 |
|
✗ |
m_solver.getDualSolution(res.data()); |
47 |
|
|
} |
48 |
|
|
}; |
49 |
|
|
|
50 |
|
|
} // end namespace centroidal_dynamics |
51 |
|
|
|
52 |
|
|
#endif // HPP_CENTROIDAL_DYNAMICS_SOLVER_LP_QPOASES_HH |
53 |
|
|
|