robotoc
robotoc - efficient ROBOT Optimal Control solvers
Loading...
Searching...
No Matches
robotoc::ImpactFrictionCone Class Referencefinal

Constraint on the inner-approximated impact firction cone. More...

#include <impact_friction_cone.hpp>

Inheritance diagram for robotoc::ImpactFrictionCone:
Collaboration diagram for robotoc::ImpactFrictionCone:

Public Types

using Vector5d = Eigen::Matrix< double, 5, 1 >
 

Public Member Functions

 ImpactFrictionCone (const Robot &robot)
 Constructor. More...
 
 ImpactFrictionCone ()
 Default constructor. More...
 
 ~ImpactFrictionCone ()
 Destructor. More...
 
 ImpactFrictionCone (const ImpactFrictionCone &)=default
 Default copy constructor. More...
 
ImpactFrictionConeoperator= (const ImpactFrictionCone &)=default
 Default copy operator. More...
 
 ImpactFrictionCone (ImpactFrictionCone &&) noexcept=default
 Default move constructor. More...
 
ImpactFrictionConeoperator= (ImpactFrictionCone &&) noexcept=default
 Default move assign operator. More...
 
KinematicsLevel kinematicsLevel () const override
 Checks the kinematics level of the constraint component. More...
 
void allocateExtraData (ConstraintComponentData &data) const override
 Allocates extra data in ConstraintComponentData. More...
 
bool isFeasible (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s) const override
 Checks whether the current solution s is feasible or not. More...
 
void setSlack (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s) const override
 Sets the slack variables of each constraint components. More...
 
void evalConstraint (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s) const override
 Computes the primal residual, residual in the complementary slackness, and the log-barrier function of the slack varible. More...
 
void evalDerivatives (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s, SplitKKTResidual &kkt_residual) const override
 Computes the derivatives of the priaml residual, i.e., the Jacobian of the inequality constraint, and add the product of the Jacobian and the dual variable to the KKT residual. This function is always called just after evalConstraint(). More...
 
void condenseSlackAndDual (const ImpactStatus &impact_status, ConstraintComponentData &data, SplitKKTMatrix &kkt_matrix, SplitKKTResidual &kkt_residual) const override
 Condenses the slack and dual variables, i.e., factorizes the
condensed Hessians and KKT residuals. This function is always called just after evalDerivatives(). More...
 
void expandSlackAndDual (const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitDirection &d) const override
 Expands the slack and dual, i.e., computes the directions of the slack and dual variables from the directions of the primal variables. More...
 
int dimc () const override
 Returns the size of the constraint. More...
 
- Public Member Functions inherited from robotoc::ImpactConstraintComponentBase
 ImpactConstraintComponentBase (const double barrier=1.0e-03, const double fraction_to_boundary_rule=0.995)
 Constructor. More...
 
virtual ~ImpactConstraintComponentBase ()
 Destructor. More...
 
 ImpactConstraintComponentBase (const ImpactConstraintComponentBase &)=default
 Default copy constructor. More...
 
ImpactConstraintComponentBaseoperator= (const ImpactConstraintComponentBase &)=default
 Default copy operator. More...
 
 ImpactConstraintComponentBase (ImpactConstraintComponentBase &&) noexcept=default
 Default move constructor. More...
 
ImpactConstraintComponentBaseoperator= (ImpactConstraintComponentBase &&) noexcept=default
 Default move assign operator. More...
 
virtual KinematicsLevel kinematicsLevel () const =0
 Checks the kinematics level of the constraint component. More...
 
virtual void allocateExtraData (ConstraintComponentData &data) const =0
 Allocates extra data in ConstraintComponentData. More...
 
virtual bool isFeasible (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s) const =0
 Checks whether the current solution s is feasible or not. More...
 
virtual void setSlack (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s) const =0
 Sets the slack variables of each constraint components. More...
 
virtual void evalConstraint (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s) const =0
 Computes the primal residual, residual in the complementary slackness, and the log-barrier function of the slack varible. More...
 
virtual void evalDerivatives (Robot &robot, const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitSolution &s, SplitKKTResidual &kkt_residual) const =0
 Computes the derivatives of the priaml residual, i.e., the Jacobian of the inequality constraint, and add the product of the Jacobian and the dual variable to the KKT residual. This function is always called just after evalConstraint(). More...
 
virtual void condenseSlackAndDual (const ImpactStatus &impact_status, ConstraintComponentData &data, SplitKKTMatrix &kkt_matrix, SplitKKTResidual &kkt_residual) const =0
 Condenses the slack and dual variables, i.e., factorizes the
condensed Hessians and KKT residuals. This function is always called just after evalDerivatives(). More...
 
virtual void expandSlackAndDual (const ImpactStatus &impact_status, ConstraintComponentData &data, const SplitDirection &d) const =0
 Expands the slack and dual, i.e., computes the directions of the slack and dual variables from the directions of the primal variables. More...
 
virtual int dimc () const =0
 Returns the size of the constraint. More...
 
void setSlackAndDualPositive (ConstraintComponentData &data) const
 Sets the slack and dual variables positive. More...
 
double maxSlackStepSize (const ConstraintComponentData &data) const
 Computes and returns the maximum step size by applying fraction-to-boundary-rule to the direction of the slack variable. More...
 
double maxDualStepSize (const ConstraintComponentData &data) const
 Computes and returns the maximum step size by applying fraction-to-boundary-rule to the direction of the dual variable. More...
 
virtual double getBarrierParam () const final
 Returns the barrier parameter. More...
 
virtual double getFractionToBoundaryRule () const final
 Returns the parameter of the fraction-to-boundary-rule. More...
 
virtual void setBarrierParam (const double barrier_param) final
 Sets the barrier parameter. More...
 
virtual void setFractionToBoundaryRule (const double fraction_to_boundary_rule) final
 Sets the parameter of the fraction-to-boundary-rule. More...
 
template<typename Derived >
std::shared_ptr< Derived > as_shared_ptr ()
 Gets the shared ptr of this object as the specified type. If this fails in dynamic casting, throws an exception. More...
 

Static Public Member Functions

template<typename VectorType1 , typename VectorType2 >
static void frictionConeResidual (const double mu, const Eigen::MatrixBase< VectorType1 > &f_world, const Eigen::Matrix3d &R_surface, const Eigen::MatrixBase< VectorType2 > &res)
 Computes the friction cone residual. More...
 
- Static Public Member Functions inherited from robotoc::ImpactConstraintComponentBase
static void updateSlack (ConstraintComponentData &data, const double step_size)
 Updates the slack variable according to the step size. More...
 
static void updateDual (ConstraintComponentData &data, const double step_size)
 Updates the dual variable according to the step size. More...
 

Additional Inherited Members

- Protected Member Functions inherited from robotoc::ImpactConstraintComponentBase
void computeComplementarySlackness (ConstraintComponentData &data) const
 Computes the residual in the complementarity slackness between
the slack and dual variables. More...
 
void computeComplementarySlackness (ConstraintComponentData &data, const int start, const int size) const
 Computes the residual in the complementarity slackness between
the slack and dual variables. More...
 
template<int Size>
void computeComplementarySlackness (ConstraintComponentData &data, const int start) const
 Computes the residual in the complementarity slackness between
the slack and dual variables. More...
 
double computeComplementarySlackness (const double slack, const double dual) const
 Computes the residual in the complementarity slackness between
the slack and dual variables. More...
 
template<typename VectorType >
double logBarrier (const Eigen::MatrixBase< VectorType > &slack) const
 Computes the log barrier function of the slack variable. More...
 
- Static Protected Member Functions inherited from robotoc::ImpactConstraintComponentBase
static void computeCondensingCoeffcient (ConstraintComponentData &data)
 Computes the coefficient of the condensing. More...
 
static void computeCondensingCoeffcient (ConstraintComponentData &data, const int start, const int size)
 Computes the coefficient of the condensing. More...
 
template<int Size>
static void computeCondensingCoeffcient (ConstraintComponentData &data, const int start)
 Computes the coefficient of the condensing. More...
 
static double computeCondensingCoeffcient (const double slack, const double dual, const double residual, const double cmpl)
 Computes the residual in the complementarity slackness between
the slack and dual variables. More...
 
static void computeDualDirection (ConstraintComponentData &data)
 Computes the direction of the dual variable from slack, primal residual, complementarity slackness, and the direction of the slack. More...
 
static void computeDualDirection (ConstraintComponentData &data, const int start, const int size)
 Computes the direction of the dual variable from slack, primal residual, complementarity slackness, and the direction of the slack. More...
 
template<int Size>
static void computeDualDirection (ConstraintComponentData &data, const int start)
 Computes the direction of the dual variable from slack, primal residual, complementary slackness, and the direction of the slack. More...
 
static double computeDualDirection (const double slack, const double dual, const double dslack, const double cmpl)
 Computes the direction of the dual variable from slack, primal residual, complementary slackness, and the direction of the slack. More...
 

Detailed Description

Constraint on the inner-approximated impact firction cone.

Member Typedef Documentation

◆ Vector5d

using robotoc::ImpactFrictionCone::Vector5d = Eigen::Matrix<double, 5, 1>

Constructor & Destructor Documentation

◆ ImpactFrictionCone() [1/4]

robotoc::ImpactFrictionCone::ImpactFrictionCone ( const Robot robot)

Constructor.

Parameters
[in]robotRobot model.

◆ ImpactFrictionCone() [2/4]

robotoc::ImpactFrictionCone::ImpactFrictionCone ( )

Default constructor.

◆ ~ImpactFrictionCone()

robotoc::ImpactFrictionCone::~ImpactFrictionCone ( )

Destructor.

◆ ImpactFrictionCone() [3/4]

robotoc::ImpactFrictionCone::ImpactFrictionCone ( const ImpactFrictionCone )
default

Default copy constructor.

◆ ImpactFrictionCone() [4/4]

robotoc::ImpactFrictionCone::ImpactFrictionCone ( ImpactFrictionCone &&  )
defaultnoexcept

Default move constructor.

Member Function Documentation

◆ allocateExtraData()

void robotoc::ImpactFrictionCone::allocateExtraData ( ConstraintComponentData data) const
overridevirtual

Allocates extra data in ConstraintComponentData.

Parameters
[in]dataConstraint component data.

Implements robotoc::ImpactConstraintComponentBase.

◆ condenseSlackAndDual()

void robotoc::ImpactFrictionCone::condenseSlackAndDual ( const ImpactStatus impact_status,
ConstraintComponentData data,
SplitKKTMatrix kkt_matrix,
SplitKKTResidual kkt_residual 
) const
overridevirtual

Condenses the slack and dual variables, i.e., factorizes the
condensed Hessians and KKT residuals. This function is always called just after evalDerivatives().

Parameters
[in]impact_statusImpact status.
[in]dataConstraints data.
[out]kkt_matrixImpact split KKT matrix. The condensed Hessians
are added to this data.
[out]kkt_residualImpact split KKT residual. The condensed KKT residual are added to this data.

Implements robotoc::ImpactConstraintComponentBase.

◆ dimc()

int robotoc::ImpactFrictionCone::dimc ( ) const
overridevirtual

Returns the size of the constraint.

Returns
Size of the constraints.

Implements robotoc::ImpactConstraintComponentBase.

◆ evalConstraint()

void robotoc::ImpactFrictionCone::evalConstraint ( Robot robot,
const ImpactStatus impact_status,
ConstraintComponentData data,
const SplitSolution s 
) const
overridevirtual

Computes the primal residual, residual in the complementary slackness, and the log-barrier function of the slack varible.

Parameters
[in]robotRobot model.
[in]impact_statusImpact status.
[in]dataConstraints data.
[in]sImpact split solution.

Implements robotoc::ImpactConstraintComponentBase.

◆ evalDerivatives()

void robotoc::ImpactFrictionCone::evalDerivatives ( Robot robot,
const ImpactStatus impact_status,
ConstraintComponentData data,
const SplitSolution s,
SplitKKTResidual kkt_residual 
) const
overridevirtual

Computes the derivatives of the priaml residual, i.e., the Jacobian of the inequality constraint, and add the product of the Jacobian and the dual variable to the KKT residual. This function is always called just after evalConstraint().

Parameters
[in]robotRobot model.
[in]impact_statusImpact status.
[in]dataConstraint data.
[in]sImpact split solution.
[out]kkt_residualImpact split KKT residual.

Implements robotoc::ImpactConstraintComponentBase.

◆ expandSlackAndDual()

void robotoc::ImpactFrictionCone::expandSlackAndDual ( const ImpactStatus impact_status,
ConstraintComponentData data,
const SplitDirection d 
) const
overridevirtual

Expands the slack and dual, i.e., computes the directions of the slack and dual variables from the directions of the primal variables.

Parameters
[in]impact_statusImpact status.
[in,out]dataConstraints data.
[in]dImpact split direction.

Implements robotoc::ImpactConstraintComponentBase.

◆ frictionConeResidual()

template<typename VectorType1 , typename VectorType2 >
static void robotoc::ImpactFrictionCone::frictionConeResidual ( const double  mu,
const Eigen::MatrixBase< VectorType1 > &  f_world,
const Eigen::Matrix3d &  R_surface,
const Eigen::MatrixBase< VectorType2 > &  res 
)
inlinestatic

Computes the friction cone residual.

Parameters
[in]muFriction coefficient. Must be positive.
[in]f_worldContact force expressed in the world frame. Size must be 3.
[in]R_surfaceRotation matrix of the contact surface.
[out]resFriction cone residual. Size must be 5.

◆ isFeasible()

bool robotoc::ImpactFrictionCone::isFeasible ( Robot robot,
const ImpactStatus impact_status,
ConstraintComponentData data,
const SplitSolution s 
) const
overridevirtual

Checks whether the current solution s is feasible or not.

Parameters
[in]robotRobot model.
[in]impact_statusImpact status.
[in]dataConstraint data.
[in]sImpact split solution.
Returns
true if s is feasible. false if not.

Implements robotoc::ImpactConstraintComponentBase.

◆ kinematicsLevel()

KinematicsLevel robotoc::ImpactFrictionCone::kinematicsLevel ( ) const
overridevirtual

Checks the kinematics level of the constraint component.

Returns
Kinematics level of the constraint component.

Implements robotoc::ImpactConstraintComponentBase.

◆ operator=() [1/2]

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

Default copy operator.

◆ operator=() [2/2]

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

Default move assign operator.

◆ setSlack()

void robotoc::ImpactFrictionCone::setSlack ( Robot robot,
const ImpactStatus impact_status,
ConstraintComponentData data,
const SplitSolution s 
) const
overridevirtual

Sets the slack variables of each constraint components.

Parameters
[in]robotRobot model.
[in]impact_statusImpact status.
[out]dataConstraint data.
[in]sImpact split solution.

Implements robotoc::ImpactConstraintComponentBase.


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