From 05d76f6def6d1cbe49c7523ea52c4706299e09a9 Mon Sep 17 00:00:00 2001 From: Steve Tonneau <stonneau@axle.laas.fr> Date: Tue, 9 Aug 2016 16:14:26 +0200 Subject: [PATCH] adding option to canonicalize polytope generators in api --- include/robust-equilibrium-lib/static_equilibrium.hh | 6 +++++- src/static_equilibrium.cpp | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/robust-equilibrium-lib/static_equilibrium.hh b/include/robust-equilibrium-lib/static_equilibrium.hh index 04c7629..a30dea6 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 635593b..3337f40 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; -- GitLab