crocoddyl  1.9.0
Contact RObot COntrol by Differential DYnamic programming Library (Crocoddyl)
CostModelContactCoPPositionTpl< _Scalar > Class Template Reference

Define a center of pressure cost function. More...

#include <crocoddyl/multibody/costs/contact-cop-position.hpp>

Inheritance diagram for CostModelContactCoPPositionTpl< _Scalar >:
Collaboration diagram for CostModelContactCoPPositionTpl< _Scalar >:

Public Types

typedef ActivationBoundsTpl< Scalar > ActivationBounds
 
typedef ActivationModelAbstractTpl< Scalar > ActivationModelAbstract
 
typedef ActivationModelQuadraticBarrierTpl< Scalar > ActivationModelQuadraticBarrier
 
typedef CostModelResidualTpl< Scalar > Base
 
typedef CoPSupportTpl< Scalar > CoPSupport
 
typedef FrameCoPSupportTpl< Scalar > FrameCoPSupport
 
typedef MathBaseTpl< Scalar > MathBase
 
typedef MathBase::Matrix3s Matrix3s
 
typedef ResidualModelContactCoPPositionTpl< Scalar > ResidualModelContactCoPPosition
 
typedef StateMultibodyTpl< Scalar > StateMultibody
 
typedef MathBase::VectorXs VectorXs
 
- Public Types inherited from CostModelResidualTpl< _Scalar >
typedef ActivationModelAbstractTpl< Scalar > ActivationModelAbstract
 
typedef CostModelAbstractTpl< Scalar > Base
 
typedef CostDataAbstractTpl< Scalar > CostDataAbstract
 
typedef CostDataResidualTpl< Scalar > Data
 
typedef DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
 
typedef MathBaseTpl< Scalar > MathBase
 
typedef MathBase::MatrixXs MatrixXs
 
typedef ResidualModelAbstractTpl< Scalar > ResidualModelAbstract
 
typedef MathBase::VectorXs VectorXs
 
- Public Types inherited from CostModelAbstractTpl< _Scalar >
typedef ActivationModelAbstractTpl< Scalar > ActivationModelAbstract
 
typedef ActivationModelQuadTpl< Scalar > ActivationModelQuad
 
typedef CostDataAbstractTpl< Scalar > CostDataAbstract
 
typedef DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
 
typedef MathBaseTpl< Scalar > MathBase
 
typedef MathBase::MatrixXs MatrixXs
 
typedef ResidualModelAbstractTpl< Scalar > ResidualModelAbstract
 
typedef StateAbstractTpl< Scalar > StateAbstract
 
typedef MathBase::VectorXs VectorXs
 

Public Member Functions

 CostModelContactCoPPositionTpl (boost::shared_ptr< StateMultibody > state, boost::shared_ptr< ActivationModelAbstract > activation, const FrameCoPSupport &cop_support)
 Initialize the contact CoP cost model. More...
 
 CostModelContactCoPPositionTpl (boost::shared_ptr< StateMultibody > state, boost::shared_ptr< ActivationModelAbstract > activation, const FrameCoPSupport &cop_support, const std::size_t nu)
 Initialize the contact CoP cost model. More...
 
 CostModelContactCoPPositionTpl (boost::shared_ptr< StateMultibody > state, const FrameCoPSupport &cop_support)
 Initialize the contact CoP cost model. More...
 
 CostModelContactCoPPositionTpl (boost::shared_ptr< StateMultibody > state, const FrameCoPSupport &cop_support, const std::size_t nu)
 Initialize the contact CoP cost model. More...
 
- Public Member Functions inherited from CostModelResidualTpl< _Scalar >
 CostModelResidualTpl (boost::shared_ptr< typename Base::StateAbstract > state, boost::shared_ptr< ActivationModelAbstract > activation, boost::shared_ptr< ResidualModelAbstract > residual)
 Initialize the residual cost model. More...
 
 CostModelResidualTpl (boost::shared_ptr< typename Base::StateAbstract > state, boost::shared_ptr< ResidualModelAbstract > residual)
 Initialize the residual cost model. More...
 
virtual void calc (const boost::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x)
 Compute the residual cost based on state only. More...
 
virtual void calc (const boost::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)
 Compute the residual cost. More...
 
virtual void calcDiff (const boost::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x)
 Compute the derivatives of the residual cost with respect to the state only. More...
 
virtual void calcDiff (const boost::shared_ptr< CostDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)
 Compute the derivatives of the residual cost. More...
 
virtual boost::shared_ptr< CostDataAbstractcreateData (DataCollectorAbstract *const data)
 Create the residual cost data.
 
virtual void print (std::ostream &os) const
 Print relevant information of the cost-residual model. More...
 
- Public Member Functions inherited from CostModelAbstractTpl< _Scalar >
 CostModelAbstractTpl (boost::shared_ptr< StateAbstract > state, boost::shared_ptr< ActivationModelAbstract > activation)
 Initialize the cost model. More...
 
 CostModelAbstractTpl (boost::shared_ptr< StateAbstract > state, boost::shared_ptr< ActivationModelAbstract > activation, boost::shared_ptr< ResidualModelAbstract > residual)
 Initialize the cost model. More...
 
 CostModelAbstractTpl (boost::shared_ptr< StateAbstract > state, boost::shared_ptr< ActivationModelAbstract > activation, const std::size_t nu)
 Initialize the cost model. More...
 
 CostModelAbstractTpl (boost::shared_ptr< StateAbstract > state, boost::shared_ptr< ResidualModelAbstract > residual)
 Initialize the cost model. More...
 
 CostModelAbstractTpl (boost::shared_ptr< StateAbstract > state, const std::size_t nr)
 Initialize the cost model. More...
 
 CostModelAbstractTpl (boost::shared_ptr< StateAbstract > state, const std::size_t nr, const std::size_t nu)
 Initialize the cost model. More...
 
const boost::shared_ptr< ActivationModelAbstract > & get_activation () const
 Return the activation model.
 
std::size_t get_nu () const
 Return the dimension of the control input.
 
template<class ReferenceType >
ReferenceType get_reference ()
 Return the cost reference.
 
const boost::shared_ptr< ResidualModelAbstract > & get_residual () const
 Return the residual model.
 
const boost::shared_ptr< StateAbstract > & get_state () const
 Return the state.
 
template<class ReferenceType >
void set_reference (ReferenceType ref)
 Modify the cost reference.
 

Public Attributes

EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
 
- Public Attributes inherited from CostModelResidualTpl< _Scalar >
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
 
- Public Attributes inherited from CostModelAbstractTpl< _Scalar >
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
 

Protected Member Functions

virtual void get_referenceImpl (const std::type_info &ti, void *pv)
 Modify the frame CoP support.
 
virtual void set_referenceImpl (const std::type_info &ti, const void *pv)
 Return the frame CoP support.
 

Protected Attributes

boost::shared_ptr< ActivationModelAbstractactivation_
 Activation model.
 
std::size_t nu_
 Control dimension.
 
boost::shared_ptr< ResidualModelAbstractresidual_
 Residual model.
 
boost::shared_ptr< StateAbstractstate_
 State description.
 
VectorXs unone_
 No control vector.
 
- Protected Attributes inherited from CostModelResidualTpl< _Scalar >
boost::shared_ptr< ActivationModelAbstractactivation_
 Activation model.
 
std::size_t nu_
 Control dimension.
 
boost::shared_ptr< ResidualModelAbstractresidual_
 Residual model.
 
boost::shared_ptr< StateAbstractstate_
 State description.
 
VectorXs unone_
 No control vector.
 
- Protected Attributes inherited from CostModelAbstractTpl< _Scalar >
boost::shared_ptr< ActivationModelAbstractactivation_
 Activation model.
 
std::size_t nu_
 Control dimension.
 
boost::shared_ptr< ResidualModelAbstractresidual_
 Residual model.
 
boost::shared_ptr< StateAbstractstate_
 State description.
 
VectorXs unone_
 No control vector.
 

Detailed Description

template<typename _Scalar>
class crocoddyl::CostModelContactCoPPositionTpl< _Scalar >

Define a center of pressure cost function.

It builds a cost function that bounds the center of pressure (CoP) for one contact surface to lie inside a certain geometric area defined around the reference contact frame. The cost residual vector is described as \(\mathbf{r}=\mathbf{A}\boldsymbol{\lambda}\geq\mathbf{0}\), where

\[ \mathbf{A}= \begin{bmatrix} 0 & 0 & X/2 & 0 & -1 & 0 \\ 0 & 0 & X/2 & 0 & 1 & 0 \\ 0 & 0 & Y/2 & 1 & 0 & 0 \\ 0 & 0 & Y/2 & -1 & 0 & 0 \end{bmatrix} \]

is the inequality matrix and \(\boldsymbol{\lambda}\) is the reference spatial contact force in the frame coordinate. The CoP lies inside the convex hull of the foot, see eq.(18-19) of https://hal.archives-ouvertes.fr/hal-02108449/document is we have:

\[ \begin{align}\begin{split}\tau^x &\leq Yf^z \\-\tau^x &\leq Yf^z \\\tau^y &\leq Yf^z \\-\tau^y &\leq Yf^z \end{split}\end{align} \]

with \(\boldsymbol{\lambda}= \begin{bmatrix}f^x & f^y & f^z & \tau^x & \tau^y & \tau^z \end{bmatrix}^T\).

The cost is computed, from the residual vector \(\mathbf{r}\), through an user defined activation model. Additionally, the contact frame id, the desired support region for the CoP and the inequality matrix are handled within FrameCoPSupportTpl. The force vector \(\boldsymbol{\lambda}\) and its derivatives are computed by DifferentialActionModelContactFwdDynamicsTpl. These values are stored in a shared data (i.e. DataCollectorContactTpl). Note that this cost function cannot be used with other action models.

See also
DifferentialActionModelContactFwdDynamicsTpl, DataCollectorContactTpl, ActivationModelAbstractTpl

Definition at line 57 of file contact-cop-position.hpp.

Constructor & Destructor Documentation

◆ CostModelContactCoPPositionTpl() [1/4]

CostModelContactCoPPositionTpl ( boost::shared_ptr< StateMultibody state,
boost::shared_ptr< ActivationModelAbstract activation,
const FrameCoPSupport cop_support,
const std::size_t  nu 
)

Initialize the contact CoP cost model.

Parameters
[in]stateState of the multibody system
[in]activationActivation model
[in]cop_supportId of contact frame and support region of the CoP
[in]nuDimension of control vector

◆ CostModelContactCoPPositionTpl() [2/4]

CostModelContactCoPPositionTpl ( boost::shared_ptr< StateMultibody state,
boost::shared_ptr< ActivationModelAbstract activation,
const FrameCoPSupport cop_support 
)

Initialize the contact CoP cost model.

The default nu value is obtained from StateAbstractTpl::get_nv().

Parameters
[in]stateState of the multibody system
[in]activationActivation model
[in]cop_supportId of contact frame and support region of the CoP

◆ CostModelContactCoPPositionTpl() [3/4]

CostModelContactCoPPositionTpl ( boost::shared_ptr< StateMultibody state,
const FrameCoPSupport cop_support,
const std::size_t  nu 
)

Initialize the contact CoP cost model.

We use as default activation model a quadratic barrier ActivationModelQuadraticBarrierTpl, with 0 and inf as lower and upper bounds, respectively.

Parameters
[in]stateState of the multibody system
[in]cop_supportId of contact frame and support region of the cop
[in]nuDimension of control vector

◆ CostModelContactCoPPositionTpl() [4/4]

CostModelContactCoPPositionTpl ( boost::shared_ptr< StateMultibody state,
const FrameCoPSupport cop_support 
)

Initialize the contact CoP cost model.

We use as default activation model a quadratic barrier ActivationModelQuadraticBarrierTpl, with 0 and inf as lower and upper bounds, respectively. Additionally, the default nu value is obtained from StateAbstractTpl::get_nv()

Parameters
[in]stateState of the multibody system
[in]cop_supportId of contact frame and support region of the cop

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