Optimization-based steering method.
Sketch of the method
Given two configuration , this class formulates and solves the problem as follows.
- Compute the corresponding states .
- For a each path of length not more than parameter "CrossStateOptimization/maxDepth" between in the constraint graph, do:
- define intermediate configuration ,
- initialize the optimization problem, as explained below,
- solve the optimization problem, which gives ,
- in case of failure, continue the loop.
- call the Edge::build of each for each consecutive .
Find such that:
- ,
- ,
- is in state between , (StateFunction)
- are reachable with transition (EdgeFunction).
One solver (hpp::constraints::solver::BySubstitution) is created for each waypoint .
- 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.