robotoc
robotoc - efficient ROBOT Optimal Control solvers
Loading...
Searching...
No Matches
robotoc::OCPSolver Class Reference

Optimal control problem solver by Riccati recursion. More...

#include <ocp_solver.hpp>

Public Member Functions

 OCPSolver (const OCP &ocp, const SolverOptions &solver_options=SolverOptions())
 Construct optimal control problem solver. More...
 
 OCPSolver ()
 Default constructor. More...
 
 ~OCPSolver ()=default
 Default destructor. More...
 
 OCPSolver (const OCPSolver &)=default
 Default copy constructor. More...
 
OCPSolveroperator= (const OCPSolver &)=default
 Default copy assign operator. More...
 
 OCPSolver (OCPSolver &&) noexcept=default
 Default move constructor. More...
 
OCPSolveroperator= (OCPSolver &&) noexcept=default
 Default move assign operator. More...
 
void setSolverOptions (const SolverOptions &solver_options)
 Sets the solver option. More...
 
void discretize (const double t)
 Discretizes the problem and reiszes the data structures. More...
 
void initConstraints ()
 Initializes the priaml-dual interior point method for inequality constraints. More...
 
void solve (const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v, const bool init_solver=true)
 Solves the optimal control problem. Internally calls updateSolutio() and discretize(). More...
 
const SolverStatisticsgetSolverStatistics () const
 Gets the solver statistics. More...
 
const SolutiongetSolution () const
 Get the solution over the horizon. More...
 
const SplitSolutiongetSolution (const int stage) const
 Get the split solution of a time stage. For example, the control input torques at the initial stage can be obtained by ocp.getSolution(0).u. More...
 
std::vector< Eigen::VectorXd > getSolution (const std::string &name, const std::string &option="") const
 Get the solution vector over the horizon. More...
 
const aligned_vector< LQRPolicy > & getLQRPolicy () const
 Gets of the local LQR policies over the horizon. More...
 
const RiccatiFactorizationgetRiccatiFactorization () const
 Gets the Riccati factorizations. This can be interpreted as locally approximated cost-to-go functions. More...
 
void setSolution (const Solution &s)
 Sets the solution guess over the horizon. More...
 
void setSolution (const std::string &name, const Eigen::VectorXd &value)
 Sets the solution guess over the horizon. More...
 
double KKTError (const double t, const Eigen::VectorXd &q, const Eigen::VectorXd &v)
 Computes the KKT residual of the optimal control problem and returns the KKT error, that is, the l2-norm of the KKT residual. More...
 
double KKTError () const
 Returns the l2-norm of the KKT residuals using the results of OCPsolver::updateSolution() or OCPsolver::solve(). More...
 
const TimeDiscretizationgetTimeDiscretization () const
 Gets the discretization. More...
 
void setRobotProperties (const RobotProperties &properties)
 Sets a collection of the properties for robot model in this solver. More...
 
void disp (std::ostream &os) const
 Displays the optimal control problem solver onto a ostream. More...
 

Friends

std::ostream & operator<< (std::ostream &os, const OCPSolver &ocp_solver)
 

Detailed Description

Optimal control problem solver by Riccati recursion.

Constructor & Destructor Documentation

◆ OCPSolver() [1/4]

robotoc::OCPSolver::OCPSolver ( const OCP ocp,
const SolverOptions solver_options = SolverOptions() 
)

Construct optimal control problem solver.

Parameters
[in]ocpOptimal control problem.
[in]solver_optionsSolver options. Default is SolverOptions().

◆ OCPSolver() [2/4]

robotoc::OCPSolver::OCPSolver ( )

Default constructor.

◆ ~OCPSolver()

robotoc::OCPSolver::~OCPSolver ( )
default

Default destructor.

◆ OCPSolver() [3/4]

robotoc::OCPSolver::OCPSolver ( const OCPSolver )
default

Default copy constructor.

◆ OCPSolver() [4/4]

robotoc::OCPSolver::OCPSolver ( OCPSolver &&  )
defaultnoexcept

Default move constructor.

Member Function Documentation

◆ discretize()

void robotoc::OCPSolver::discretize ( const double  t)

Discretizes the problem and reiszes the data structures.

Parameters
[in]tInitial time of the horizon.

◆ disp()

void robotoc::OCPSolver::disp ( std::ostream &  os) const

Displays the optimal control problem solver onto a ostream.

◆ getLQRPolicy()

const aligned_vector< LQRPolicy > & robotoc::OCPSolver::getLQRPolicy ( ) const

Gets of the local LQR policies over the horizon.

Returns
const reference to the local LQR policies.

◆ getRiccatiFactorization()

const RiccatiFactorization & robotoc::OCPSolver::getRiccatiFactorization ( ) const

Gets the Riccati factorizations. This can be interpreted as locally approximated cost-to-go functions.

Returns
const reference to the Riccati factorizations.

◆ getSolution() [1/3]

const Solution & robotoc::OCPSolver::getSolution ( ) const

Get the solution over the horizon.

Returns
const reference to the solution.

◆ getSolution() [2/3]

const SplitSolution & robotoc::OCPSolver::getSolution ( const int  stage) const

Get the split solution of a time stage. For example, the control input torques at the initial stage can be obtained by ocp.getSolution(0).u.

Parameters
[in]stageTime stage of interest. Must be larger than 0 and smaller than N.
Returns
Const reference to the split solution of the specified time stage.

◆ getSolution() [3/3]

std::vector< Eigen::VectorXd > robotoc::OCPSolver::getSolution ( const std::string &  name,
const std::string &  option = "" 
) const

Get the solution vector over the horizon.

Parameters
[in]nameName of the variable.
[in]optionOption for the solution. If name == "f" and option == "WORLD", the contact forces expressed in the world frame is returned. if option is set to other values, these expressed in the local frame are returned.
Returns
Solution vector.

◆ getSolverStatistics()

const SolverStatistics & robotoc::OCPSolver::getSolverStatistics ( ) const

Gets the solver statistics.

Returns
Solver statistics.

◆ getTimeDiscretization()

const TimeDiscretization & robotoc::OCPSolver::getTimeDiscretization ( ) const

Gets the discretization.

Returns
Returns const reference to the time discretization.

◆ initConstraints()

void robotoc::OCPSolver::initConstraints ( )

Initializes the priaml-dual interior point method for inequality constraints.

◆ KKTError() [1/2]

double robotoc::OCPSolver::KKTError ( ) const

Returns the l2-norm of the KKT residuals using the results of OCPsolver::updateSolution() or OCPsolver::solve().

Returns
The l2-norm of the KKT residual.

◆ KKTError() [2/2]

double robotoc::OCPSolver::KKTError ( const double  t,
const Eigen::VectorXd &  q,
const Eigen::VectorXd &  v 
)

Computes the KKT residual of the optimal control problem and returns the KKT error, that is, the l2-norm of the KKT residual.

Parameters
[in]tInitial time of the horizon.
[in]qInitial configuration. Size must be Robot::dimq().
[in]vInitial velocity. Size must be Robot::dimv().
Returns
The KKT error, that is, the l2-norm of the KKT residual.
Remarks
The linear and angular velocities of the floating base are assumed to be expressed in the body local coordinate.

◆ operator=() [1/2]

OCPSolver & robotoc::OCPSolver::operator= ( const OCPSolver )
default

Default copy assign operator.

◆ operator=() [2/2]

OCPSolver & robotoc::OCPSolver::operator= ( OCPSolver &&  )
defaultnoexcept

Default move assign operator.

◆ setRobotProperties()

void robotoc::OCPSolver::setRobotProperties ( const RobotProperties properties)

Sets a collection of the properties for robot model in this solver.

Parameters
[in]propertiesA collection of the properties for the robot model.

◆ setSolution() [1/2]

void robotoc::OCPSolver::setSolution ( const Solution s)

Sets the solution guess over the horizon.

Parameters
[in]sSolution.

◆ setSolution() [2/2]

void robotoc::OCPSolver::setSolution ( const std::string &  name,
const Eigen::VectorXd &  value 
)

Sets the solution guess over the horizon.

Parameters
[in]nameName of the variable.
[in]valueValue of the specified variable.

◆ setSolverOptions()

void robotoc::OCPSolver::setSolverOptions ( const SolverOptions solver_options)

Sets the solver option.

Parameters
[in]solver_optionsSolver options.

◆ solve()

void robotoc::OCPSolver::solve ( const double  t,
const Eigen::VectorXd &  q,
const Eigen::VectorXd &  v,
const bool  init_solver = true 
)

Solves the optimal control problem. Internally calls updateSolutio() and discretize().

Parameters
[in]tInitial time of the horizon.
[in]qInitial configuration. Size must be Robot::dimq().
[in]vInitial velocity. Size must be Robot::dimv().
[in]init_solverIf true, initializes the solver, that is, calls discretize(), initConstraints(), and clears the line search filter. Default is true.
Remarks
The linear and angular velocities of the floating base are assumed to be expressed in the body local coordinate.

Friends And Related Function Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream &  os,
const OCPSolver ocp_solver 
)
friend

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