From 7fb0fdb9a20df5114b90c528fa0a9ba7c786a748 Mon Sep 17 00:00:00 2001 From: Joseph Mirabel <jmirabel@laas.fr> Date: Tue, 6 Mar 2018 16:58:19 +0100 Subject: [PATCH] CrossStateOptimization handles WaypointEdge --- src/steering-method/cross-state-optimization.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/steering-method/cross-state-optimization.cc b/src/steering-method/cross-state-optimization.cc index 83bef2b..2cc7e36 100644 --- a/src/steering-method/cross-state-optimization.cc +++ b/src/steering-method/cross-state-optimization.cc @@ -185,12 +185,20 @@ namespace hpp { if (i >= roots.size()) return transitions; const GraphSearchData::state_with_depth* current = &roots[i]; - transitions.resize (current->l); + transitions.reserve (current->l); + graph::WaypointEdgePtr_t we; while (current->e) { assert (current->l > 0); - transitions[current->l-1] = current->e; + we = HPP_DYNAMIC_PTR_CAST(graph::WaypointEdge, current->e); + if (we) { + for (int i = (int)we->nbWaypoints(); i >= 0; --i) + transitions.push_back(we->waypoint(i)); + } else { + transitions.push_back(current->e); + } current = &d.parent1[current->s][current->i]; } + std::reverse (transitions.begin(), transitions.end()); return transitions; } @@ -394,7 +402,8 @@ namespace hpp { solver.solve <constraints::lineSearch::FixedSequence> (q); bool success = (status == constraints::HierarchicalIterativeSolver::SUCCESS); if (!success) { - hppDout (warning, "Solution from projection " + hppDout (warning, "Projection failed with status " << status << + ". Configuration after projection is\n" << pinocchio::displayConfig(q)); } return success; -- GitLab