#include <Mathematics/PLDPSolverHerdt.hh>
Public Member Functions | |
PLDPSolverHerdt (unsigned int CardU, double *iPu, double *Px, double *Pu, double *iLQ) | |
Constructor. | |
~PLDPSolverHerdt () | |
Destructor. | |
int | SolveProblem (std::deque< PatternGeneratorJRL::LinearConstraintInequalityFreeFeet_t > &QueueOfLConstraintInequalitiesFreeFeet, std::deque< PatternGeneratorJRL::SupportFeet_t > &QueueOfSupportFeet, double *CstPartOfTheCostFunction, unsigned int NbOfConstraints, double *LinearPartOfConstraints, double *CstPartOfConstraints, double *XkYk, double *X, unsigned int NumberOfRemovedConstraints, unsigned int NbRemovedFootCstr, bool StartingSequence, unsigned int NumberSteps, bool CurrentStateChanged, double time) |
Solve the optimization problem. | |
Protected Member Functions | |
void | InitializeSolver (unsigned int NumberSteps) |
void | AllocateMemoryForSolver (unsigned int NumberSteps) |
double | ComputeAlpha (vector< unsigned int > &NewActivatedConstraints, unsigned int NumberSteps) |
void | WriteCurrentZMPSolution (string filename, double *XkYk) |
Initial solution methods related | |
int | ComputeInitialSolution (std::deque< PatternGeneratorJRL::LinearConstraintInequalityFreeFeet_t > &QueueOfLConstraintInequalitiesFreeFeet, std::deque< PatternGeneratorJRL::SupportFeet_t > &QueueOfSupportFeet, unsigned int NumberSteps, double *XkYk) |
int | PrecomputeiPuPx (unsigned int NumberSteps) |
Projected descent direction methods related | |
int | ComputeProjectedDescentDirection (unsigned int NumberSteps) |
Compute Projected descent direction. | |
int | ForwardSubstitution () |
Forward substitution. First Phase EE^t v2 = v1 <-> LL^t v2 = v1 Now solving L y = v1. | |
int | BackwardSubstitution () |
Compute v2 q (14b) in Dimitrov 2009. Second phase a Now solving LL^t v2 = v1 <-> L y = v1 with L^t v2 = y y solved with first phase. So now we are looking for v2. |
This class implements a two stage strategy to solve the following optimal problem:
PLDPSolverHerdt::PLDPSolverHerdt | ( | unsigned int | CardU, |
double * | iPu, | ||
double * | Px, | ||
double * | Pu, | ||
double * | iLQ | ||
) |
Constructor.
Destructor.
void PLDPSolverHerdt::AllocateMemoryForSolver | ( | unsigned int | NumberSteps | ) | [protected] |
Allocate memory for solver.
int PLDPSolverHerdt::BackwardSubstitution | ( | ) | [protected] |
Compute v2 q (14b) in Dimitrov 2009. Second phase a Now solving LL^t v2 = v1 <-> L y = v1 with L^t v2 = y y solved with first phase. So now we are looking for v2.
double PLDPSolverHerdt::ComputeAlpha | ( | vector< unsigned int > & | NewActivatedConstraints, |
unsigned int | NumberSteps | ||
) | [protected] |
Detecting violated constraints
int PLDPSolverHerdt::ComputeInitialSolution | ( | std::deque< PatternGeneratorJRL::LinearConstraintInequalityFreeFeet_t > & | QueueOfLConstraintInequalitiesFreeFeet, |
std::deque< PatternGeneratorJRL::SupportFeet_t > & | QueueOfSupportFeet, | ||
unsigned int | NumberSteps, | ||
double * | XkYk | ||
) | [protected] |
Compute the initial solution
The initial solution of the problem is given by identical zmp and feet positions that are lying inside the feasible zones defined by the constraints on the feet placements. U0 = -iPu * Px [Xkt Ykt]t + iPu * InitialZMP
int PLDPSolverHerdt::ComputeProjectedDescentDirection | ( | unsigned int | NumberSteps | ) | [protected] |
Compute Projected descent direction.
int PLDPSolverHerdt::ForwardSubstitution | ( | ) | [protected] |
Forward substitution. First Phase EE^t v2 = v1 <-> LL^t v2 = v1 Now solving L y = v1.
void PLDPSolverHerdt::InitializeSolver | ( | unsigned int | NumberSteps | ) | [protected] |
Initialize the internal variables of the class.
int PLDPSolverHerdt::PrecomputeiPuPx | ( | unsigned int | NumberSteps | ) | [protected] |
Precompite iPuPx
int PLDPSolverHerdt::SolveProblem | ( | std::deque< PatternGeneratorJRL::LinearConstraintInequalityFreeFeet_t > & | QueueOfLConstraintInequalitiesFreeFeet, |
std::deque< PatternGeneratorJRL::SupportFeet_t > & | QueueOfSupportFeet, | ||
double * | CstPartOfTheCostFunction, | ||
unsigned int | NbOfConstraints, | ||
double * | LinearPartOfConstraints, | ||
double * | CstPartOfConstraints, | ||
double * | XkYk, | ||
double * | X, | ||
unsigned int | NumberOfRemovedConstraints, | ||
unsigned int | NbRemovedFootCstr, | ||
bool | StartingSequence, | ||
unsigned int | NumberSteps, | ||
bool | CurrentStateChanged, | ||
double | time | ||
) |
Solve the optimization problem.
Initialization de cholesky.
Step two: Compute the projected descent direction.
Step three : Compute alpha
Compute new solution.
void PLDPSolverHerdt::WriteCurrentZMPSolution | ( | string | filename, |
double * | XkYk | ||
) | [protected] |
Write current ZMP ref trajectory associated with current value of m_Vk.