diff --git a/src/graph-path-validation.cc b/src/graph-path-validation.cc index ffd704c53d146c37fd6124b3f4d4839b48c10dd1..baa5183669e117118558d0d8d688c4b5463ecdd7 100644 --- a/src/graph-path-validation.cc +++ b/src/graph-path-validation.cc @@ -91,6 +91,7 @@ namespace hpp { PathPtr_t pathNoCollision; ConstraintSetPtr_t c = HPP_DYNAMIC_PTR_CAST(ConstraintSet, path->constraints()); + hppDout(info, (c?"Using edge path validation":"Using default path validation")); PathValidationPtr_t validation (c ? c->edge()->pathValidation() : pathValidation_); diff --git a/src/graph-steering-method.cc b/src/graph-steering-method.cc index 381d301a69b2866fcb128ae008dd4d994d546023..1094f82e3019600113304481eeae1e9f0afce788 100644 --- a/src/graph-steering-method.cc +++ b/src/graph-steering-method.cc @@ -74,6 +74,9 @@ namespace hpp { return PathPtr_t (); } PathPtr_t path; + if (possibleEdges.empty()) { + hppDout (info, "No edge found."); + } while (!possibleEdges.empty()) { if (possibleEdges.back ()->build (path, q1, q2)) { return path; diff --git a/src/graph/edge.cc b/src/graph/edge.cc index 43c142e05100b306cbc311829d1e80bdc1be8f54..9e9ee772d3ba91b32658c3b34f3423b49563653d 100644 --- a/src/graph/edge.cc +++ b/src/graph/edge.cc @@ -278,11 +278,15 @@ namespace hpp { { ConstraintSetPtr_t constraints = pathConstraint (); constraints->configProjector ()->rightHandSideFromConfig(q1); - if (!constraints->isSatisfied (q1) || !constraints->isSatisfied (q2)) { - return false; + if (constraints->isSatisfied (q1)) { + if (constraints->isSatisfied (q2)) { + path = (*steeringMethod_->get()) (q1, q2); + return true; + } + hppDout(info, "q2 does not satisfy the constraints"); } - path = (*steeringMethod_->get()) (q1, q2); - return true; + hppDout(info, "q1 does not satisfy the constraints"); + return false; } bool Edge::applyConstraints (core::NodePtr_t nnear, ConfigurationOut_t q) const @@ -346,19 +350,35 @@ namespace hpp { if (!useCache) configs_.col (0) = q2; assert (waypoints_[0].first); - if (!waypoints_[0].first->applyConstraints (q1, configs_.col (0))) + if (!waypoints_[0].first->applyConstraints (q1, configs_.col (0))) { + hppDout (info, "Waypoint edge " << name() << ": applyConstraints failed at waypoint 0." + << "\nUse cache: " << useCache + ); return false; - if (!waypoints_[0].first->build (p, q1, configs_.col (0))) + } + if (!waypoints_[0].first->build (p, q1, configs_.col (0))) { + hppDout (info, "Waypoint edge " << name() << ": build failed at waypoint 0." + << "\nUse cache: " << useCache + ); return false; + } pv->appendPath (p); for (std::size_t i = 1; i < waypoints_.size (); ++i) { assert (waypoints_[i].first); if (!useCache) configs_.col (i) = q2; - if (!waypoints_[i].first->applyConstraints (configs_.col(i-1), configs_.col (i))) + if (!waypoints_[i].first->applyConstraints (configs_.col(i-1), configs_.col (i))) { + hppDout (info, "Waypoint edge " << name() << ": applyConstraints failed at waypoint " << i << "." + << "\nUse cache: " << useCache + ); return false; - if (!waypoints_[i].first->build (p, configs_.col(i-1), configs_.col (i))) + } + if (!waypoints_[i].first->build (p, configs_.col(i-1), configs_.col (i))) { + hppDout (info, "Waypoint edge " << name() << ": build failed at waypoint " << i << "." + << "\nUse cache: " << useCache + ); return false; + } pv->appendPath (p); } diff --git a/src/problem-solver.cc b/src/problem-solver.cc index 8c3b4347f475f2b66ae80ce3e50699df186141a7..e3dca5478d1e232b9270eb3dc59fac04bf08d270 100644 --- a/src/problem-solver.cc +++ b/src/problem-solver.cc @@ -27,8 +27,6 @@ #include <hpp/constraints/convex-shape-contact.hh> #include <hpp/core/random-shortcut.hh> -#include <hpp/core/discretized-collision-checking.hh> -#include <hpp/core/continuous-collision-checking/progressive.hh> #include <hpp/core/path-optimization/partial-shortcut.hh> #include <hpp/core/roadmap.hh> #include <hpp/core/steering-method-straight.hh> @@ -49,7 +47,7 @@ #include "hpp/manipulation/graph-steering-method.hh" #include "hpp/manipulation/path-optimization/config-optimization.hh" -#ifdef HPP_MANIPULATION_HAS_WHOLEBODY_STEP +#if HPP_MANIPULATION_HAS_WHOLEBODY_STEP #include <hpp/wholebody-step/small-steps.hh> #include "hpp/manipulation/path-optimization/small-steps.hh" #endif diff --git a/src/problem.cc b/src/problem.cc index 155bb89a32a86abec45dfc0be8649cb77c1a46d2..fba71b74d3e6c8325374705d091935d7d9cc5e12 100644 --- a/src/problem.cc +++ b/src/problem.cc @@ -15,6 +15,9 @@ // hpp-manipulation. If not, see <http://www.gnu.org/licenses/>. #include <hpp/manipulation/problem.hh> + +#include <hpp/core/discretized-collision-checking.hh> + #include <hpp/manipulation/weighed-distance.hh> #include <hpp/manipulation/graph-steering-method.hh> @@ -25,6 +28,7 @@ namespace hpp { { Parent::steeringMethod (GraphSteeringMethod::create (this)); distance (WeighedDistance::create (robot, graph_)); + setPathValidationFactory(core::DiscretizedCollisionChecking::create, 0.05); } void Problem::constraintGraph (const graph::GraphPtr_t& graph)