hpp-manipulation  6.0.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_t & innerSteeringMethod () const
 
void innerSteeringMethod (const core::SteeringMethodPtr_t &sm)
 

Static Public Member Functions

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

Protected Member Functions

 CrossStateOptimization (const ProblemConstPtr_t &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 ProblemConstPtr_t &problem)
 Constructor. More...
 
 SteeringMethod (const SteeringMethod &other)
 Copy constructor. More...
 
void init (SteeringMethodWkPtr_t weak)
 

Additional Inherited Members

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

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 ProblemConstPtr_t 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

◆ create() [1/3]

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

◆ create() [2/3]

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

◆ create() [3/3]

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

◆ impl_compute()

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

◆ init()

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

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