From ffe809718aebc3b49dadbfb43f71c49a3dfdfa35 Mon Sep 17 00:00:00 2001
From: Florent Lamiraux <florent@laas.fr>
Date: Mon, 24 Jun 2024 12:05:06 +0000
Subject: [PATCH] [TransitionPlanner] Use Reeds and Shepp Parameterization when
 relevant.

---
 .../manipulation/path-planner/transition-planner.hh   |  2 ++
 src/path-planner/transition-planner.cc                | 11 +++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/include/hpp/manipulation/path-planner/transition-planner.hh b/include/hpp/manipulation/path-planner/transition-planner.hh
index 0e6240f3..c7e558f9 100644
--- a/include/hpp/manipulation/path-planner/transition-planner.hh
+++ b/include/hpp/manipulation/path-planner/transition-planner.hh
@@ -162,6 +162,8 @@ class HPP_MANIPULATION_DLLAPI TransitionPlanner : public core::PathPlanner {
   PathPlannerPtr_t innerPlanner_;
   /// Vector of optimizers to call after solve
   std::vector<PathOptimizerPtr_t> pathOptimizers_;
+  /// Time parameterization instance
+  core::PathOptimizerPtr_t timeParameterization_;
   /// weak pointer to itself
   TransitionPlannerWkPtr_t weakPtr_;
 };  // class TransitionPlanner
diff --git a/src/path-planner/transition-planner.cc b/src/path-planner/transition-planner.cc
index bbde1950..686fc6d9 100644
--- a/src/path-planner/transition-planner.cc
+++ b/src/path-planner/transition-planner.cc
@@ -32,6 +32,7 @@
 #include <hpp/core/constraint-set.hh>
 #include <hpp/core/distance/reeds-shepp.hh>
 #include <hpp/core/joint-bound-validation.hh>
+#include <hpp/core/path-optimization/rs-time-parameterization.hh>
 #include <hpp/core/path-optimization/simple-time-parameterization.hh>
 #include <hpp/core/path-optimizer.hh>
 #include <hpp/core/path-planner/bi-rrt-star.hh>
@@ -159,10 +160,7 @@ core::PathVectorPtr_t TransitionPlanner::optimizePath(const PathPtr_t& path) {
 
 core::PathVectorPtr_t TransitionPlanner::timeParameterization(
     const PathVectorPtr_t& path) {
-  core::PathOptimizerPtr_t tp(
-      core::pathOptimization::SimpleTimeParameterization::create(
-          innerProblem_));
-  return tp->optimize(path);
+  return timeParameterization_->optimize(path);
 }
 
 void TransitionPlanner::setEdge(std::size_t id) {
@@ -188,6 +186,8 @@ void TransitionPlanner::setReedsAndSheppSteeringMethod(double turningRadius) {
   core::DistancePtr_t dist(core::distance::ReedsShepp::create(innerProblem_));
   innerProblem_->steeringMethod(sm);
   innerProblem_->distance(dist);
+  timeParameterization_ = core::pathOptimization::RSTimeParameterization::create(
+      innerProblem_);
 }
 
 void TransitionPlanner::pathProjector(const PathProjectorPtr_t pathProjector) {
@@ -233,6 +233,9 @@ TransitionPlanner::TransitionPlanner(const core::ProblemConstPtr_t& problem,
   // Create default path planner
   innerPlanner_ = hpp::core::pathPlanner::BiRrtStar::createWithRoadmap(
       innerProblem_, roadmap);
+  // Create default time parameterization
+  timeParameterization_ = core::pathOptimization::SimpleTimeParameterization::create(
+      innerProblem_);
 }
 
 void TransitionPlanner::init(TransitionPlannerWkPtr_t weak) {
-- 
GitLab