diff --git a/include/robust-equilibrium-lib/static_equilibrium.hh b/include/robust-equilibrium-lib/static_equilibrium.hh index 04c76293f047bfb68edd52e2d873533c7395b963..a30dea6485e75df3ffe3954c66f72ec0ce44b440 100644 --- a/include/robust-equilibrium-lib/static_equilibrium.hh +++ b/include/robust-equilibrium-lib/static_equilibrium.hh @@ -50,6 +50,8 @@ private: * indicate the max number of attempts to compute the cone by introducing * a small pertubation of the system */ const unsigned max_num_cdd_trials; + /** whether to remove redundant inequalities when computing double description matrices*/ + const bool canonicalize_cdd_matrix; /** Inequality matrix and vector defining the CoM support polygon HD com + Hd <= h */ MatrixX3 m_HD; @@ -88,10 +90,12 @@ public: * @param solver_type Type of LP solver to use. * @param useWarmStart Whether the LP solver can warm start the resolution. * @param max_num_cdd_trials indicate the max number of attempts to compute the cone by introducing + * @param canonicalize_cdd_matrix whether to remove redundant inequalities when computing double description matrices * a small pertubation of the system */ StaticEquilibrium(std::string name, double mass, unsigned int generatorsPerContact, - SolverLP solver_type, bool useWarmStart=true, const unsigned int max_num_cdd_trials=0); + SolverLP solver_type, bool useWarmStart=true, const unsigned int max_num_cdd_trials=0, + const bool canonicalize_cdd_matrix=false); /** * @brief Returns the useWarmStart flag. diff --git a/src/static_equilibrium.cpp b/src/static_equilibrium.cpp index 635593bd838eba2a86f60003111653fc48cbdab1..3337f401af487f9ea471e05eef435139eb9c0309 100644 --- a/src/static_equilibrium.cpp +++ b/src/static_equilibrium.cpp @@ -19,9 +19,10 @@ bool StaticEquilibrium::m_is_cdd_initialized = false; StaticEquilibrium::StaticEquilibrium(string name, double mass, unsigned int generatorsPerContact, SolverLP solver_type, bool useWarmStart, - const unsigned int max_num_cdd_trials) + const unsigned int max_num_cdd_trials, const bool canonicalize_cdd_matrix) : m_is_cdd_stable(true) , max_num_cdd_trials(max_num_cdd_trials) + , canonicalize_cdd_matrix(canonicalize_cdd_matrix) { if(!m_is_cdd_initialized) { @@ -495,7 +496,7 @@ LP_status StaticEquilibrium::findExtremumInDirection(Cref_vector3 direction, Ref bool StaticEquilibrium::computePolytopeProjection(Cref_matrix6X v) { // getProfiler().start("eigen_to_cdd"); - dd_MatrixPtr V = cone_span_eigen_to_cdd(v.transpose()); + dd_MatrixPtr V = cone_span_eigen_to_cdd(v.transpose(),canonicalize_cdd_matrix); // getProfiler().stop("eigen_to_cdd"); dd_ErrorType error = dd_NoError;