hpp-manipulation  4.9.0
Classes for manipulation planning.
hpp::manipulation::steeringMethod::CrossStateOptimization Class Reference

#include <hpp/manipulation/steering-method/cross-state-optimization.hh>

Inheritance diagram for hpp::manipulation::steeringMethod::CrossStateOptimization:
Collaboration diagram for hpp::manipulation::steeringMethod::CrossStateOptimization:

Public Member Functions

core::SteeringMethodPtr_t copy () const
 
- Public Member Functions inherited from hpp::manipulation::SteeringMethod
const core::SteeringMethodPtr_tinnerSteeringMethod () const
 
void innerSteeringMethod (const core::SteeringMethodPtr_t &sm)
 
- Public Member Functions inherited from hpp::core::SteeringMethod
PathPtr_t operator() (ConfigurationIn_t q1, ConfigurationIn_t q2) const
 
PathPtr_t steer (ConfigurationIn_t q1, ConfigurationIn_t q2) const
 
virtual ~SteeringMethod ()
 
const Problemproblem () const
 
void constraints (const ConstraintSetPtr_t &constraints)
 
const ConstraintSetPtr_tconstraints () const
 
void constraints (const ConstraintSetPtr_t &constraints)
 
const ConstraintSetPtr_tconstraints () const
 
PathPtr_t operator() (ConfigurationIn_t q1, ConfigurationIn_t q2) const
 
PathPtr_t steer (ConfigurationIn_t q1, ConfigurationIn_t q2) const
 
virtual ~SteeringMethod ()
 
const Problemproblem () const
 
void constraints (const ConstraintSetPtr_t &constraints)
 
const ConstraintSetPtr_tconstraints () const
 
void constraints (const ConstraintSetPtr_t &constraints)
 
const ConstraintSetPtr_tconstraints () const
 

Static Public Member Functions

static CrossStateOptimizationPtr_t create (const Problem &problem)
 
static CrossStateOptimizationPtr_t create (const core::Problem &problem)
 
template<typename T >
static CrossStateOptimizationPtr_t create (const core::Problem &problem)
 

Protected Member Functions

 CrossStateOptimization (const Problem &problem)
 
 CrossStateOptimization (const CrossStateOptimization &other)
 
core::PathPtr_t impl_compute (ConfigurationIn_t q1, ConfigurationIn_t q2) const
 
void init (CrossStateOptimizationWkPtr_t weak)
 
- Protected Member Functions inherited from hpp::manipulation::SteeringMethod
 SteeringMethod (const Problem &problem)
 Constructor. More...
 
 SteeringMethod (const SteeringMethod &other)
 Copy constructor. More...
 
void init (SteeringMethodWkPtr_t weak)
 
- Protected Member Functions inherited from hpp::core::SteeringMethod
 SteeringMethod (const Problem &problem)
 
 SteeringMethod (const SteeringMethod &other)
 
void init (SteeringMethodWkPtr_t weak)
 
 SteeringMethod (const Problem &problem)
 
 SteeringMethod (const SteeringMethod &other)
 
void init (SteeringMethodWkPtr_t weak)
 

Additional Inherited Members

- Protected Attributes inherited from hpp::manipulation::SteeringMethod
const Problemproblem_
 A pointer to the manipulation problem. More...
 
core::SteeringMethodPtr_t steeringMethod_
 The encapsulated steering method. More...
 
- Protected Attributes inherited from hpp::core::SteeringMethod
const Problemproblem_
 

Detailed Description

Optimization-based steering method.

Sketch of the method

Given two configuration $ (q_1,q_2) $, this class formulates and solves the problem as follows.

  • Compute the corresponding states $ (s_1, s_2) $.
  • For a each path $ (e_0, ... e_n) $ of length not more than parameter "CrossStateOptimization/maxDepth" between $ (s_1, s_2)$ in the constraint graph, do:
    • define $ n-1 $ intermediate configuration $ p_i $,
    • initialize the optimization problem, as explained below,
    • solve the optimization problem, which gives $ p^*_i $,
    • in case of failure, continue the loop.
    • call the Edge::build of each $ e_j $ for each consecutive $ (p^*_i, p^*_{i+1}) $.

Problem formulation

Find $ (p_i) $ such that:

  • $ p_0 = q_1 $,
  • $ p_{n+1} = q_2 $,
  • $ p_i $ is in state between $ (e_{i-1}, e_i) $, (StateFunction)
  • $ (p_i, p_{i+1}) $ are reachable with transition $ e_i $ (EdgeFunction).

Problem resolution

One solver (hpp::constraints::solver::BySubstitution) is created for each waypoint $p_i$.

  • method buildOptimizationProblem builds a matrix the rows of which are the parameterizable numerical constraints present in the graph, and the columns of which are the waypoints. Each value in the matrix defines the status of each constraint right hand side for this waypoint, among {absent from the solver, equal to value for previous waypoint, equal to value for start configuration, equal to value for end configuration}.
  • method CrossStateOptimization::solveOptimizationProblem loops over the waypoint solvers, solves for each waypoint after initializing the right hand sides with the proper values.
  • eventually method buildPath build paths between waypoints with the constraints of the transition in which the path lies.

Current status

The method has been successfully tested with romeo holding a placard and the construction set benchmarks. The result is satisfactory except between pregrasp and grasp waypoints that may be far away from each other if the transition between those state does not contain the grasp complement constraint. The same holds between placement and pre-placement.

Constructor & Destructor Documentation

◆ CrossStateOptimization() [1/2]

hpp::manipulation::steeringMethod::CrossStateOptimization::CrossStateOptimization ( const Problem problem)
inlineprotected

◆ CrossStateOptimization() [2/2]

hpp::manipulation::steeringMethod::CrossStateOptimization::CrossStateOptimization ( const CrossStateOptimization other)
inlineprotected

Member Function Documentation

◆ copy()

core::SteeringMethodPtr_t hpp::manipulation::steeringMethod::CrossStateOptimization::copy ( ) const
virtual

◆ create() [1/3]

static CrossStateOptimizationPtr_t hpp::manipulation::steeringMethod::CrossStateOptimization::create ( const Problem problem)
static

◆ create() [2/3]

static CrossStateOptimizationPtr_t hpp::manipulation::steeringMethod::CrossStateOptimization::create ( const core::Problem problem)
static
Warning
core::Problem will be casted to Problem

◆ create() [3/3]

template<typename T >
CrossStateOptimizationPtr_t hpp::manipulation::steeringMethod::CrossStateOptimization::create ( const core::Problem problem)
static

◆ impl_compute()

core::PathPtr_t hpp::manipulation::steeringMethod::CrossStateOptimization::impl_compute ( ConfigurationIn_t  q1,
ConfigurationIn_t  q2 
) const
protectedvirtual

◆ init()

void hpp::manipulation::steeringMethod::CrossStateOptimization::init ( CrossStateOptimizationWkPtr_t  weak)
inlineprotected

The documentation for this class was generated from the following file: