Define a stack of impulse models. More...
#include <crocoddyl/multibody/impulses/multiple-impulses.hpp>
Public Types | |
typedef pinocchio::container::aligned_vector< pinocchio::ForceTpl< Scalar > >::iterator | ForceIterator |
typedef ImpulseDataAbstractTpl< Scalar > | ImpulseDataAbstract |
typedef std::map< std::string, boost::shared_ptr< ImpulseDataAbstract > > | ImpulseDataContainer |
typedef ImpulseDataMultipleTpl< Scalar > | ImpulseDataMultiple |
typedef ImpulseItemTpl< Scalar > | ImpulseItem |
typedef ImpulseModelAbstractTpl< Scalar > | ImpulseModelAbstract |
typedef std::map< std::string, boost::shared_ptr< ImpulseItem > > | ImpulseModelContainer |
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 | |
ImpulseModelMultipleTpl (boost::shared_ptr< StateMultibody > state) | |
Initialize the multi-impulse model. More... | |
void | addImpulse (const std::string &name, boost::shared_ptr< ImpulseModelAbstract > impulse, const bool active=true) |
Add impulse item. More... | |
void | calc (const boost::shared_ptr< ImpulseDataMultiple > &data, const Eigen::Ref< const VectorXs > &x) |
Compute the total contact Jacobian and contact acceleration. More... | |
void | calcDiff (const boost::shared_ptr< ImpulseDataMultiple > &data, const Eigen::Ref< const VectorXs > &x) |
Compute the derivatives of the contact holonomic constraint. More... | |
void | changeImpulseStatus (const std::string &name, const bool active) |
Change the impulse status. More... | |
boost::shared_ptr< ImpulseDataMultiple > | createData (pinocchio::DataTpl< Scalar > *const data) |
Create the multi-impulse data. More... | |
const std::vector< std::string > & | get_active () const |
Return the names of the active impulses. | |
const ImpulseModelContainer & | get_impulses () const |
Return the impulse models. | |
const std::vector< std::string > & | get_inactive () const |
Return the names of the inactive impulses. | |
std::size_t | get_ni () const |
Return the dimension of active impulses. | |
std::size_t | get_ni_total () const |
Return the dimension of all impulses. | |
const boost::shared_ptr< StateMultibody > & | get_state () const |
Return the multibody state. | |
bool | getImpulseStatus (const std::string &name) const |
Return the status of a given impulse name. | |
void | removeImpulse (const std::string &name) |
Remove impulse item. More... | |
void | updateForce (const boost::shared_ptr< ImpulseDataMultiple > &data, const VectorXs &impulse) |
Update the spatial impulse defined in frame coordinate. More... | |
void | updateForceDiff (const boost::shared_ptr< ImpulseDataMultiple > &data, const MatrixXs &df_dx) const |
Update the Jacobian of the spatial impulse defined in frame coordinate. More... | |
void | updateVelocity (const boost::shared_ptr< ImpulseDataMultiple > &data, const VectorXs &vnext) const |
Update the system velocity after impulse. More... | |
void | updateVelocityDiff (const boost::shared_ptr< ImpulseDataMultiple > &data, const MatrixXs &dvnext_dx) const |
Update the Jacobian of the system velocity after impulse. More... | |
Public Attributes | |
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Define a stack of impulse models.
The impulse 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 impulse.
|
explicit |
Initialize the multi-impulse model.
[in] | state | Multibody state |
void addImpulse | ( | const std::string & | name, |
boost::shared_ptr< ImpulseModelAbstract > | impulse, | ||
const bool | active = true |
||
) |
Add impulse item.
Note that the memory is allocated for inactive impulses as well.
[in] | name | Impulse name |
[in] | contact | Impulse model |
[in] | active | Impulse status (active by default) |
void removeImpulse | ( | const std::string & | name | ) |
Remove impulse item.
[in] | name | Impulse name |
void changeImpulseStatus | ( | const std::string & | name, |
const bool | active | ||
) |
Change the impulse status.
[in] | name | Impulse name |
[in] | active | Impulse status (True for active) |
void calc | ( | const boost::shared_ptr< ImpulseDataMultiple > & | data, |
const Eigen::Ref< const VectorXs > & | x | ||
) |
Compute the total contact Jacobian and contact acceleration.
[in] | data | Multi-impulse data |
[in] | x | State vector \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
void calcDiff | ( | const boost::shared_ptr< ImpulseDataMultiple > & | data, |
const Eigen::Ref< const VectorXs > & | x | ||
) |
Compute the derivatives of the contact holonomic constraint.
[in] | data | Multi-impulse data |
[in] | x | State vector \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
void updateVelocity | ( | const boost::shared_ptr< ImpulseDataMultiple > & | data, |
const VectorXs & | vnext | ||
) | const |
Update the system velocity after impulse.
[in] | data | Multi-impulse data |
[in] | vnext | System velocity after impulse \(\mathbf{v}'\in\mathbb{R}^{nv}\) |
void updateForce | ( | const boost::shared_ptr< ImpulseDataMultiple > & | data, |
const VectorXs & | impulse | ||
) |
Update the spatial impulse defined in frame coordinate.
[in] | data | Multi-impulse data |
[in] | impulse | Spatial impulse defined in frame coordinate \({}^o\underline{\boldsymbol{\Lambda}}_c\in\mathbb{R}^{nc}\) |
void updateVelocityDiff | ( | const boost::shared_ptr< ImpulseDataMultiple > & | data, |
const MatrixXs & | dvnext_dx | ||
) | const |
Update the Jacobian of the system velocity after impulse.
[in] | data | Multi-impulse data |
[in] | dvnext_dx | Jacobian of the system velocity after impact in generalized coordinates \(\frac{\partial\dot{\mathbf{v}'}}{\partial\mathbf{x}}\in\mathbb{R}^{nv\times{ndx}}\) |
void updateForceDiff | ( | const boost::shared_ptr< ImpulseDataMultiple > & | data, |
const MatrixXs & | df_dx | ||
) | const |
Update the Jacobian of the spatial impulse defined in frame coordinate.
[in] | data | Multi-contact data |
[in] | df_dx | Jacobian of the spatial impulse defined in frame coordinate \(\frac{\partial{}^o\underline{\boldsymbol{\Lambda}}_c}{\partial\mathbf{x}}\in\mathbb{R}^{nc\times{ndx}}\) |
boost::shared_ptr<ImpulseDataMultiple> createData | ( | pinocchio::DataTpl< Scalar > *const | data | ) |
Create the multi-impulse data.
[in] | data | Pinocchio data |