Crocoddyl
ContactModelMultipleTpl< _Scalar > Class Template Reference

Define a stack of contact models. More...

#include <multiple-contacts.hpp>

Public Types

typedef ContactDataAbstractTpl< Scalar > ContactDataAbstract
 
typedef std::map< std::string, boost::shared_ptr< ContactDataAbstract > > ContactDataContainer
 
typedef ContactDataMultipleTpl< Scalar > ContactDataMultiple
 
typedef ContactItemTpl< Scalar > ContactItem
 
typedef ContactModelAbstractTpl< Scalar > ContactModelAbstract
 
typedef std::map< std::string, boost::shared_ptr< ContactItem > > ContactModelContainer
 
typedef pinocchio::container::aligned_vector< pinocchio::ForceTpl< Scalar > >::iterator ForceIterator
 
typedef MathBaseTpl< Scalar > MathBase
 
typedef MathBase::MatrixXs MatrixXs
 
typedef StateMultibodyTpl< Scalar > StateMultibody
 
typedef MathBase::Vector2s Vector2s
 
typedef MathBase::Vector3s Vector3s
 
typedef MathBase::VectorXs VectorXs
 

Public Member Functions

 ContactModelMultipleTpl (boost::shared_ptr< StateMultibody > state)
 Initialize the multi-contact model. More...
 
 ContactModelMultipleTpl (boost::shared_ptr< StateMultibody > state, const std::size_t nu)
 Initialize the multi-contact model. More...
 
void addContact (const std::string &name, boost::shared_ptr< ContactModelAbstract > contact, const bool active=true)
 Add contact item. More...
 
void calc (const boost::shared_ptr< ContactDataMultiple > &data, const Eigen::Ref< const VectorXs > &x)
 Compute the contact Jacobian and contact acceleration. More...
 
void calcDiff (const boost::shared_ptr< ContactDataMultiple > &data, const Eigen::Ref< const VectorXs > &x)
 Compute the derivatives of the contact holonomic constraint. More...
 
void changeContactStatus (const std::string &name, const bool active)
 Change the contact status. More...
 
boost::shared_ptr< ContactDataMultiplecreateData (pinocchio::DataTpl< Scalar > *const data)
 Create the multi-contact data. More...
 
const std::set< std::string > & get_active_set () const
 Return the names of the set of active contacts.
 
const ContactModelContainer & get_contacts () const
 Return the contact models.
 
const std::set< std::string > & get_inactive_set () const
 Return the names of the set of inactive contacts.
 
std::size_t get_nc () const
 Return the dimension of active contacts.
 
std::size_t get_nc_total () const
 Return the dimension of all contacts.
 
std::size_t get_nu () const
 Return the dimension of control vector.
 
const boost::shared_ptr< StateMultibody > & get_state () const
 Return the multibody state.
 
bool getComputeAllContacts () const
 Return the type of contact computation. More...
 
bool getContactStatus (const std::string &name) const
 Return the status of a given contact name.
 
void removeContact (const std::string &name)
 Remove contact item. More...
 
void setComputeAllContacts (const bool status)
 Set the tyoe of contact computation: all or active contacts. More...
 
void updateAcceleration (const boost::shared_ptr< ContactDataMultiple > &data, const VectorXs &dv) const
 Update the constrained system acceleration. More...
 
void updateAccelerationDiff (const boost::shared_ptr< ContactDataMultiple > &data, const MatrixXs &ddv_dx) const
 Update the Jacobian of the constrained system acceleration. More...
 
void updateForce (const boost::shared_ptr< ContactDataMultiple > &data, const VectorXs &force)
 Update the spatial force defined in frame coordinate. More...
 
void updateForceDiff (const boost::shared_ptr< ContactDataMultiple > &data, const MatrixXs &df_dx, const MatrixXs &df_du) const
 Update the Jacobian of the spatial force defined in frame coordinate. More...
 
void updateRneaDiff (const boost::shared_ptr< ContactDataMultiple > &data, pinocchio::DataTpl< Scalar > &pinocchio) const
 Update the RNEA derivatives dtau_dq by adding the skew term (necessary for contacts expressed in LOCAL_WORLD_ALIGNED / WORLD) More...
 

Public Attributes

EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
 

Friends

template<class Scalar >
std::ostream & operator<< (std::ostream &os, const ContactModelMultipleTpl< Scalar > &model)
 Print information on the contact models.
 

Detailed Description

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

Define a stack of contact models.

The contact models can be defined with active and inactive status. The idea behind this design choice is to be able to create a mechanism that allocates the entire data needed for the computations. Then, there are designed routines that update the only active contacts.

Definition at line 60 of file multiple-contacts.hpp.

Constructor & Destructor Documentation

◆ ContactModelMultipleTpl() [1/2]

ContactModelMultipleTpl ( boost::shared_ptr< StateMultibody state,
const std::size_t  nu 
)

Initialize the multi-contact model.

Parameters
[in]stateMultibody state
[in]nuDimension of control vector

◆ ContactModelMultipleTpl() [2/2]

ContactModelMultipleTpl ( boost::shared_ptr< StateMultibody state)

Initialize the multi-contact model.

Parameters
[in]stateMultibody state

Member Function Documentation

◆ addContact()

void addContact ( const std::string &  name,
boost::shared_ptr< ContactModelAbstract contact,
const bool  active = true 
)

Add contact item.

Note that the memory is allocated for inactive contacts as well.

Parameters
[in]nameContact name
[in]contactContact model
[in]activeContact status (active by default)

◆ removeContact()

void removeContact ( const std::string &  name)

Remove contact item.

Parameters
[in]nameContact name

◆ changeContactStatus()

void changeContactStatus ( const std::string &  name,
const bool  active 
)

Change the contact status.

Parameters
[in]nameContact name
[in]activeContact status (True for active)

◆ calc()

void calc ( const boost::shared_ptr< ContactDataMultiple > &  data,
const Eigen::Ref< const VectorXs > &  x 
)

Compute the contact Jacobian and contact acceleration.

Parameters
[in]dataMulti-contact data
[in]xState point \(\mathbf{x}\in\mathbb{R}^{ndx}\)

◆ calcDiff()

void calcDiff ( const boost::shared_ptr< ContactDataMultiple > &  data,
const Eigen::Ref< const VectorXs > &  x 
)

Compute the derivatives of the contact holonomic constraint.

Parameters
[in]dataMulti-contact data
[in]xState point \(\mathbf{x}\in\mathbb{R}^{ndx}\)

◆ updateAcceleration()

void updateAcceleration ( const boost::shared_ptr< ContactDataMultiple > &  data,
const VectorXs &  dv 
) const

Update the constrained system acceleration.

Parameters
[in]dataMulti-contact data
[in]dvConstrained system acceleration \(\dot{\mathbf{v}}\in\mathbb{R}^{nv}\)

◆ updateForce()

void updateForce ( const boost::shared_ptr< ContactDataMultiple > &  data,
const VectorXs &  force 
)

Update the spatial force defined in frame coordinate.

Parameters
[in]dataMulti-contact data
[in]forceSpatial force defined in frame coordinate \({}^o\underline{\boldsymbol{\lambda}}_c\in\mathbb{R}^{nc}\)

◆ updateAccelerationDiff()

void updateAccelerationDiff ( const boost::shared_ptr< ContactDataMultiple > &  data,
const MatrixXs &  ddv_dx 
) const

Update the Jacobian of the constrained system acceleration.

Parameters
[in]dataMulti-contact data
[in]ddv_dxJacobian of the system acceleration in generalized coordinates \(\frac{\partial\dot{\mathbf{v}}}{\partial\mathbf{x}}\in\mathbb{R}^{nv\times ndx}\)

◆ updateForceDiff()

void updateForceDiff ( const boost::shared_ptr< ContactDataMultiple > &  data,
const MatrixXs &  df_dx,
const MatrixXs &  df_du 
) const

Update the Jacobian of the spatial force defined in frame coordinate.

Parameters
[in]dataMulti-contact data
[in]df_dxJacobian of the spatial impulse defined in frame coordinate \(\frac{\partial{}^o\underline{\boldsymbol{\lambda}}_c}{\partial\mathbf{x}}\in\mathbb{R}^{nc\times{ndx}}\)
[in]df_duJacobian of the spatial impulse defined in frame coordinate \(\frac{\partial{}^o\underline{\boldsymbol{\lambda}}_c}{\partial\mathbf{u}}\in\mathbb{R}^{nc\times{nu}}\)

◆ updateRneaDiff()

void updateRneaDiff ( const boost::shared_ptr< ContactDataMultiple > &  data,
pinocchio::DataTpl< Scalar > &  pinocchio 
) const

Update the RNEA derivatives dtau_dq by adding the skew term (necessary for contacts expressed in LOCAL_WORLD_ALIGNED / WORLD)

To learn more about the computation of the contact derivatives in different frames see https://hal.science/hal-03758989/document.

Parameters
[in]dataMulti-contact data
[in]pinocchioPinocchio data

◆ createData()

boost::shared_ptr<ContactDataMultiple> createData ( pinocchio::DataTpl< Scalar > *const  data)

Create the multi-contact data.

Parameters
[in]dataPinocchio data
Returns
the multi-contact data.

◆ getComputeAllContacts()

bool getComputeAllContacts ( ) const

Return the type of contact computation.

True for all contacts, otherwise false for active contacts

◆ setComputeAllContacts()

void setComputeAllContacts ( const bool  status)

Set the tyoe of contact computation: all or active contacts.

Parameters
statusType of contact computation (true for all contacts and false for active contacts)

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