From 73a7c938317126b64fa9a9b5189756cab54f4d28 Mon Sep 17 00:00:00 2001 From: Joseph Mirabel <jmirabel@laas.fr> Date: Thu, 17 Dec 2020 09:57:13 +0100 Subject: [PATCH] Remove usage of passive dofs + clean code. --- include/hpp/manipulation/graph/state.hh | 9 +-- src/graph/edge.cc | 101 ++++++++---------------- src/graph/graph-component.cc | 15 +--- src/handle.cc | 2 - src/problem-solver.cc | 2 +- src/steering-method/graph.cc | 2 +- 6 files changed, 42 insertions(+), 89 deletions(-) diff --git a/include/hpp/manipulation/graph/state.hh b/include/hpp/manipulation/graph/state.hh index 01fc6649..7970bf67 100644 --- a/include/hpp/manipulation/graph/state.hh +++ b/include/hpp/manipulation/graph/state.hh @@ -139,13 +139,8 @@ namespace hpp { /// \return true is at least one ImplicitPtr_t was inserted. bool insertNumericalConstraintsForPath (ConfigProjectorPtr_t& proj) const { - assert (numericalConstraintsForPath_.size () == passiveDofsForPath_.size ()); - IntervalsContainer_t::const_iterator itpdofs = passiveDofsForPath_.begin (); - for (NumericalConstraints_t::const_iterator it = numericalConstraintsForPath_.begin(); - it != numericalConstraintsForPath_.end(); it++) { - proj->add (*it, *itpdofs); - itpdofs++; - } + for (const auto& nc : numericalConstraintsForPath_) + proj->add (nc); return !numericalConstraintsForPath_.empty (); } diff --git a/src/graph/edge.cc b/src/graph/edge.cc index 6012044b..7d840521 100644 --- a/src/graph/edge.cc +++ b/src/graph/edge.cc @@ -214,61 +214,43 @@ namespace hpp { const GraphPtr_t& graph) { NumericalConstraints_t nc; - std::vector <segments_t> pdof; - for (std::vector <GraphComponentPtr_t>::const_iterator it - (components.begin ()); it != components.end (); ++it) { - nc.insert (nc.end (), (*it)->numericalConstraints ().begin (), - (*it)->numericalConstraints ().end ()); - pdof.insert (pdof.end (), (*it)->passiveDofs ().begin (), - (*it)->passiveDofs ().end ()); - } - assert (nc.size () == pdof.size ()); - NumericalConstraints_t::iterator itnc1, itnc2; - std::vector <segments_t>::iterator itpdof1, itpdof2; + for (const auto& gc : components) + nc.insert(nc.end(), gc->numericalConstraints().begin(), + gc->numericalConstraints ().end ()); // Remove duplicate constraints - for (itnc1 = nc.begin(), itpdof1 = pdof.begin(); itnc1 != nc.end(); ++itnc1, ++itpdof1) { - itnc2 = itnc1; ++itnc2; - itpdof2 = itpdof1; ++itpdof2; - while (itnc2 != nc.end()) { - if (*itnc1 == *itnc2) { - itnc2 = nc.erase (itnc2); - itpdof2 = pdof.erase (itpdof2); - } else { - ++itnc2; - ++itpdof2; - } - } - } + auto end = nc.end(); + for (auto it = nc.begin(); it != end; ++it) + end = std::remove(std::next(it), end, *it); + nc.erase(end, nc.end()); + + NumericalConstraints_t::iterator itnc1, itnc2; + + itnc2 = nc.end(); + for (itnc1 = nc.begin(); itnc1 != itnc2; ++itnc1) + itnc2 = std::remove(std::next(itnc1), itnc2, *itnc1); + nc.erase(itnc2, nc.end()); // Look for complement - for (itnc1 = nc.begin(), itpdof1 = pdof.begin(); itnc1 != nc.end(); ++itnc1, ++itpdof1) { - itnc2 = itnc1; ++itnc2; - itpdof2 = itpdof1; ++itpdof2; + for (itnc1 = nc.begin(); itnc1 != nc.end(); ++itnc1) { + const auto& c1 = *itnc1; + itnc2 = std::next(itnc1); constraints::ImplicitPtr_t combination; - while (itnc2 != nc.end()) { + itnc2 = std::find_if(std::next(itnc1), nc.end(), + [&c1, &combination, &graph](const auto& c2) -> bool { + assert (c1 != c2); + return graph->isComplement (c1, c2, combination) + || graph->isComplement (c2, c1, combination); + }); + if (itnc2 != nc.end()) { assert (*itnc1 != *itnc2); - if ( graph->isComplement (*itnc1, *itnc2, combination) - || graph->isComplement (*itnc2, *itnc1, combination)) { - // Replace constraint by combination of both and remove - // complement. - *itnc1 = combination; - nc.erase (itnc2); - pdof.erase (itpdof2); - break; - } else { - ++itnc2; - ++itpdof2; - } + *itnc1 = combination; + nc.erase (itnc2); } } - NumericalConstraints_t::iterator itnc (nc.begin ()); - std::vector <segments_t>::iterator itpdof (pdof.begin ()); - while (itnc != nc.end ()) { - proj->add (*itnc, *itpdof); - ++itnc; ++itpdof; - } + for (const auto& _nc : nc) + proj->add (_nc); } ConstraintSetPtr_t Edge::buildConfigConstraint() @@ -741,13 +723,8 @@ namespace hpp { ConfigProjectorPtr_t proj = ConfigProjector::create(g->robot(), "projParam_" + n, g->errorThreshold(), g->maxIterations()); - IntervalsContainer_t::const_iterator itpdof = paramPassiveDofs_.begin (); - for (NumericalConstraints_t::const_iterator it = paramNumericalConstraints_.begin (); - it != paramNumericalConstraints_.end (); ++it) { - proj->add (*it, *itpdof); - ++itpdof; - } - assert (itpdof == paramPassiveDofs_.end ()); + for (const auto& nc : paramNumericalConstraints_) + proj->add (nc); param->addConstraint (proj); param->edge (wkPtr_.lock ()); @@ -763,13 +740,8 @@ namespace hpp { ConstraintSetPtr_t cond = ConstraintSet::create (g->robot (), "Set " + n); proj = ConfigProjector::create(g->robot(), "projCond_" + n, g->errorThreshold(), g->maxIterations()); - itpdof = condPassiveDofs_.begin (); - for (NumericalConstraints_t::const_iterator it = condNumericalConstraints_.begin (); - it != condNumericalConstraints_.end (); ++it) { - proj->add (*it, *itpdof); - ++itpdof; - } - assert (itpdof == condPassiveDofs_.end ()); + for (const auto& nc : condNumericalConstraints_) + proj->add (nc); f.condition (cond); cond->addConstraint (proj); @@ -816,13 +788,8 @@ namespace hpp { // - the state in which the transition lies if different g->insertNumericalConstraints (proj); - IntervalsContainer_t::const_iterator itpdof = paramPassiveDofs_.begin (); - for (NumericalConstraints_t::const_iterator it = paramNumericalConstraints_.begin (); - it != paramNumericalConstraints_.end (); ++it) { - proj->add (*it, *itpdof); - ++itpdof; - } - assert (itpdof == paramPassiveDofs_.end ()); + for (const auto& nc : paramNumericalConstraints_) + proj->add (nc); insertNumericalConstraints (proj); stateTo ()->insertNumericalConstraints (proj); diff --git a/src/graph/graph-component.cc b/src/graph/graph-component.cc index 0900acc1..50ef1a79 100644 --- a/src/graph/graph-component.cc +++ b/src/graph/graph-component.cc @@ -85,17 +85,10 @@ namespace hpp { bool GraphComponent::insertNumericalConstraints (ConfigProjectorPtr_t& proj) const { - IntervalsContainer_t::const_iterator itpdof = passiveDofs_.begin (); - for (NumericalConstraints_t::const_iterator it = numericalConstraints_.begin(); - it != numericalConstraints_.end(); ++it) { - proj->add (*it, *itpdof); - ++itpdof; - } - assert (itpdof == passiveDofs_.end ()); - for (NumericalConstraints_t::const_iterator it = numericalCosts_.begin(); - it != numericalCosts_.end(); ++it) { - proj->add (*it, 1); - } + for (const auto& nc : numericalConstraints_) + proj->add (nc); + for (const auto& nc : numericalCosts_) + proj->add (nc, 1); return !numericalConstraints_.empty (); } diff --git a/src/handle.cc b/src/handle.cc index 945e5847..16f2e2c0 100644 --- a/src/handle.cc +++ b/src/handle.cc @@ -27,7 +27,6 @@ #include <hpp/pinocchio/joint-collection.hh> #include <hpp/pinocchio/gripper.hh> -#include <hpp/constraints/generic-transformation.hh> #include <hpp/constraints/implicit.hh> #include <hpp/constraints/explicit/relative-pose.hh> #include <hpp/constraints/generic-transformation.hh> @@ -162,7 +161,6 @@ namespace hpp { ImplicitPtr_t Handle::createGraspAndComplement (const GripperPtr_t& gripper, std::string n) const { - using core::ExplicitRelativeTransformation; if (n.empty()) { n = gripper->name() + "_holds_" + name(); } diff --git a/src/problem-solver.cc b/src/problem-solver.cc index 86df217b..b7bc3f03 100644 --- a/src/problem-solver.cc +++ b/src/problem-solver.cc @@ -156,7 +156,7 @@ namespace hpp { createPathProjector <core::pathProjector::RecursiveHermite>); steeringMethods.add ("Graph-SteeringMethodStraight", - steeringMethod::Graph::create <core::SteeringMethodStraight>); + steeringMethod::Graph::create <core::steeringMethod::Straight>); steeringMethods.add ("Graph-Straight", steeringMethod::Graph::create <core::steeringMethod::Straight>); steeringMethods.add ("Graph-Hermite", diff --git a/src/steering-method/graph.cc b/src/steering-method/graph.cc index f7d778ca..48cefdf7 100644 --- a/src/steering-method/graph.cc +++ b/src/steering-method/graph.cc @@ -29,7 +29,7 @@ namespace hpp { namespace manipulation { SteeringMethod::SteeringMethod (const ProblemConstPtr_t& problem) : core::SteeringMethod (problem), problem_ (problem), - steeringMethod_ (core::SteeringMethodStraight::create (problem)) + steeringMethod_ (core::steeringMethod::Straight::create (problem)) { } -- GitLab