Crocoddyl
Loading...
Searching...
No Matches
ResidualModelContactCoPPositionTpl< _Scalar > Class Template Reference

Center of pressure residual function. More...

#include <contact-cop-position.hpp>

Inheritance diagram for ResidualModelContactCoPPositionTpl< _Scalar >:
ResidualModelAbstractTpl< _Scalar >ResidualModelBase

Public Types

typedef ResidualModelAbstractTpl< Scalar > Base
typedef CoPSupportTpl< Scalar > CoPSupport
typedef ResidualDataContactCoPPositionTpl< Scalar > Data
typedef DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
typedef MathBaseTpl< Scalar > MathBase
typedef MathBase::Matrix46s Matrix46
typedef MathBase::MatrixXs MatrixXs
typedef ResidualDataAbstractTpl< Scalar > ResidualDataAbstract
typedef StateMultibodyTpl< Scalar > StateMultibody
typedef MathBase::VectorXs VectorXs
Public Types inherited from ResidualModelAbstractTpl< _Scalar >
typedef ActivationDataAbstractTpl< Scalar > ActivationDataAbstract
typedef CostDataAbstractTpl< Scalar > CostDataAbstract
typedef DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
typedef MathBase::DiagonalMatrixXs DiagonalMatrixXs
typedef MathBaseTpl< Scalar > MathBase
typedef MathBase::MatrixXs MatrixXs
typedef ResidualDataAbstractTpl< Scalar > ResidualDataAbstract
typedef StateAbstractTpl< Scalar > StateAbstract
typedef MathBase::VectorXs VectorXs

Public Member Functions

 ResidualModelContactCoPPositionTpl (std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const CoPSupport &cref)
 Initialize the contact CoP residual model.
 ResidualModelContactCoPPositionTpl (std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const CoPSupport &cref, const std::size_t nu, const bool fwddyn=true)
 Initialize the contact CoP residual model.
virtual void calc (const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override
 Compute the residual vector for nodes that depends only on the state.
virtual void calc (const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
 Compute the contact CoP residual.
virtual void calcDiff (const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override
 Compute the Jacobian of the residual functions with respect to the state only.
virtual void calcDiff (const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
 Compute the Jacobians of the contact CoP residual.
template<typename NewScalar>
ResidualModelContactCoPPositionTpl< NewScalar > cast () const
 Cast the contact-cop-position residual model to a different scalar type.
virtual std::shared_ptr< ResidualDataAbstractcreateData (DataCollectorAbstract *const data) override
 Create the contact CoP residual data.
 DEPRECATED ("Do not use set_id, instead create a new model", void set_id(pinocchio::FrameIndex id);) void set_reference(const CoPSupport &reference)
 Modify the reference frame id.
pinocchio::FrameIndex get_id () const
 Return the reference frame id.
const CoPSupportget_reference () const
 Return the reference support region of CoP.
bool is_fwddyn () const
 Indicates if we are using the forward-dynamics (true) or inverse-dynamics (false)
virtual void print (std::ostream &os) const override
 Print relevant information of the cop-position residual.
void updateJacobians (const std::shared_ptr< ResidualDataAbstract > &data)
 Update the Jacobians of the contact friction cone residual.
Public Member Functions inherited from ResidualModelAbstractTpl< _Scalar >
 ResidualModelAbstractTpl (std::shared_ptr< StateAbstract > state, const std::size_t nr, const bool q_dependent=true, const bool v_dependent=true, const bool u_dependent=true)
 Initialize the residual model.
 ResidualModelAbstractTpl (std::shared_ptr< StateAbstract > state, const std::size_t nr, const std::size_t nu, const bool q_dependent=true, const bool v_dependent=true, const bool u_dependent=true)
 Initialize the residual model.
virtual void calcCostDiff (const std::shared_ptr< CostDataAbstract > &cdata, const std::shared_ptr< ResidualDataAbstract > &rdata, const std::shared_ptr< ActivationDataAbstract > &adata, const bool update_u=true)
 Compute the derivative of the cost function.
std::size_t get_nr () const
 Return the dimension of the residual vector.
std::size_t get_nu () const
 Return the dimension of the control input.
bool get_q_dependent () const
 Return true if the residual function depends on q.
const std::shared_ptr< StateAbstract > & get_state () const
 Return the state.
bool get_u_dependent () const
 Return true if the residual function depends on u.
bool get_v_dependent () const
 Return true if the residual function depends on v.

Public Attributes

EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Public Attributes inherited from ResidualModelAbstractTpl< _Scalar >
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar

Protected Attributes

std::size_t nu_
 Control dimension.
std::shared_ptr< StateAbstractstate_
 State description.
Protected Attributes inherited from ResidualModelAbstractTpl< _Scalar >
std::size_t nr_
 Residual vector dimension.
std::size_t nu_
 Control dimension.
bool q_dependent_
std::shared_ptr< StateAbstractstate_
 State description.
bool u_dependent_
VectorXs unone_
 No control vector.
bool v_dependent_

Detailed Description

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

Center of pressure residual function.

It builds a residual 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 residual 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 residual 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 CoPSupportTpl. The force vector $\boldsymbol{\lambda}$ and its derivatives are computed by DifferentialActionModelContactFwdDynamicsTpl or ActionModelImpulseFwdDynamicTpl. These values are stored in a shared data (i.e., DataCollectorContactTpl or DataCollectorImpulseTpl). Note that this residual function cannot be used with other action models.

See also
ResidualModelAbstractTpl, calc(), calcDiff(), createData(), DifferentialActionModelContactFwdDynamicsTpl, ActionModelImpulseFwdDynamicTpl, DataCollectorForceTpl

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

Member Typedef Documentation

◆ MathBase

template<typename _Scalar>
typedef MathBaseTpl<Scalar> MathBase

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

◆ Base

template<typename _Scalar>
typedef ResidualModelAbstractTpl<Scalar> Base

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

◆ Data

template<typename _Scalar>
typedef ResidualDataContactCoPPositionTpl<Scalar> Data

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

◆ StateMultibody

template<typename _Scalar>
typedef StateMultibodyTpl<Scalar> StateMultibody

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

◆ ResidualDataAbstract

template<typename _Scalar>
typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract

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

◆ DataCollectorAbstract

template<typename _Scalar>
typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract

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

◆ CoPSupport

template<typename _Scalar>
typedef CoPSupportTpl<Scalar> CoPSupport

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

◆ VectorXs

template<typename _Scalar>
typedef MathBase::VectorXs VectorXs

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

◆ MatrixXs

template<typename _Scalar>
typedef MathBase::MatrixXs MatrixXs

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

◆ Matrix46

template<typename _Scalar>
typedef MathBase::Matrix46s Matrix46

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

Constructor & Destructor Documentation

◆ ResidualModelContactCoPPositionTpl() [1/2]

template<typename _Scalar>
ResidualModelContactCoPPositionTpl(std::shared_ptr< StateMultibody >state,
const pinocchio::FrameIndexid,
const CoPSupport &cref,
const std::size_tnu,
const boolfwddyn = true )

Initialize the contact CoP residual model.

Note that for the inverse-dynamic cases, the control vector contains the generalized accelerations, torques, and all the contact forces.

Parameters
[in]stateState of the multibody system
[in]idReference frame id
[in]crefReference support region of the CoP
[in]nuDimension of control vector
[in]fwddynIndicates that we have a forward dynamics problem (true) or inverse dynamics (false)

◆ ResidualModelContactCoPPositionTpl() [2/2]

template<typename _Scalar>
ResidualModelContactCoPPositionTpl(std::shared_ptr< StateMultibody >state,
const pinocchio::FrameIndexid,
const CoPSupport &cref )

Initialize the contact CoP residual model.

The default nu value is obtained from StateAbstractTpl::get_nv(). Note that this constructor can be used for forward-dynamics cases only.

Parameters
[in]stateState of the multibody system
[in]idReference frame id
[in]crefReference support region of the CoP

Member Function Documentation

◆ calc() [1/2]

template<typename _Scalar>
virtual void calc(const std::shared_ptr< ResidualDataAbstract > &data,
const Eigen::Ref< const VectorXs > &x,
const Eigen::Ref< const VectorXs > &u )
overridevirtual

Compute the contact CoP residual.

The CoP residual is computed based on the $\mathbf{A}$ matrix, the force vector is computed by DifferentialActionModelContactFwdDynamicsTpl or ActionModelImpulseFwdDynamicTpl which is stored in DataCollectorContactTpl or DataCollectorImpulseTpl.

Parameters
[in]dataContact CoP data
[in]xState point $\mathbf{x}\in\mathbb{R}^{ndx}$
[in]uControl input $\mathbf{u}\in\mathbb{R}^{nu}$

Reimplemented from ResidualModelAbstractTpl< _Scalar >.

◆ calc() [2/2]

template<typename _Scalar>
virtual void calc(const std::shared_ptr< ResidualDataAbstract > &data,
const Eigen::Ref< const VectorXs > &x )
overridevirtual

Compute the residual vector for nodes that depends only on the state.

It updates the residual vector based on the state only (i.e., it ignores the contact forces). This function is used in the terminal nodes of an optimal control problem.

Parameters
[in]dataResidual data
[in]xState point $\mathbf{x}\in\mathbb{R}^{ndx}$

Reimplemented from ResidualModelAbstractTpl< _Scalar >.

◆ calcDiff() [1/2]

template<typename _Scalar>
virtual void calcDiff(const std::shared_ptr< ResidualDataAbstract > &data,
const Eigen::Ref< const VectorXs > &x,
const Eigen::Ref< const VectorXs > &u )
overridevirtual

Compute the Jacobians of the contact CoP residual.

The CoP residual is computed based on the $\mathbf{A}$ matrix, the force vector is computed by DifferentialActionModelContactFwdDynamicsTpl or ActionModelImpulseFwdDynamicTpl which is stored in DataCollectorContactTpl or DataCollectorImpulseTpl.

Parameters
[in]dataContact CoP data
[in]xState point $\mathbf{x}\in\mathbb{R}^{ndx}$
[in]uControl input $\mathbf{u}\in\mathbb{R}^{nu}$

Reimplemented from ResidualModelAbstractTpl< _Scalar >.

◆ calcDiff() [2/2]

template<typename _Scalar>
virtual void calcDiff(const std::shared_ptr< ResidualDataAbstract > &data,
const Eigen::Ref< const VectorXs > &x )
overridevirtual

Compute the Jacobian of the residual functions with respect to the state only.

It updates the Jacobian of the residual function based on the state only (i.e., it ignores the contact forces). This function is used in the terminal nodes of an optimal control problem.

Parameters
[in]dataResidual data
[in]xState point $\mathbf{x}\in\mathbb{R}^{ndx}$

Reimplemented from ResidualModelAbstractTpl< _Scalar >.

◆ createData()

template<typename _Scalar>
virtual std::shared_ptr< ResidualDataAbstract > createData(DataCollectorAbstract *constdata)
overridevirtual

Create the contact CoP residual data.

Each residual model has its own data that needs to be allocated. This function returns the allocated data for a predefined residual.

Parameters
[in]dataShared data (it should be of type DataCollectorContactTpl)
Returns
the residual data.

Reimplemented from ResidualModelAbstractTpl< _Scalar >.

◆ updateJacobians()

template<typename _Scalar>
void updateJacobians(const std::shared_ptr< ResidualDataAbstract > &data)

Update the Jacobians of the contact friction cone residual.

Parameters
[in]dataContact friction cone residual data

◆ cast()

template<typename _Scalar>
template<typename NewScalar>
ResidualModelContactCoPPositionTpl< NewScalar > cast()const

Cast the contact-cop-position residual model to a different scalar type.

It is useful for operations requiring different precision or scalar types.

Template Parameters
NewScalarThe new scalar type to cast to.
Returns
ResidualModelContactCoPPositionTpl<NewScalar> A residual model with the new scalar type.

◆ DEPRECATED()

template<typename _Scalar>
DEPRECATED("Do not useset_id,
instead create a new model",
void set_id(pinocchio::FrameIndex id); ) const &

Modify the reference frame id.

Modify the reference support region of CoP

◆ print()

template<typename _Scalar>
virtual void print(std::ostream &os)const
overridevirtual

Print relevant information of the cop-position residual.

Parameters
[out]osOutput stream object

Reimplemented from ResidualModelAbstractTpl< _Scalar >.

Member Data Documentation

◆ Scalar

template<typename _Scalar>
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar

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

◆ nu_

template<typename _Scalar>
std::size_t nu_
protected

Control dimension.

Definition at line 232 of file residual-base.hpp.

◆ state_

template<typename _Scalar>
std::shared_ptr<StateAbstract> state_
protected

State description.

Definition at line 230 of file residual-base.hpp.


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