Define a stack of impulse models. More...
#include <multiple-impulses.hpp>
Public Types | |
| typedef pinocchio::container::aligned_vector< pinocchio::ForceTpl< Scalar > >::iterator | ForceIterator |
| typedef ImpulseDataAbstractTpl< Scalar > | ImpulseDataAbstract |
| typedef std::map< std::string, std::shared_ptr< ImpulseDataAbstract > > | ImpulseDataContainer |
| typedef ImpulseDataMultipleTpl< Scalar > | ImpulseDataMultiple |
| typedef ImpulseItemTpl< Scalar > | ImpulseItem |
| typedef ImpulseModelAbstractTpl< Scalar > | ImpulseModelAbstract |
| typedef std::map< std::string, std::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 (std::shared_ptr< StateMultibody > state) | |
| Initialize the multi-impulse model. | |
| void | addImpulse (const std::string &name, std::shared_ptr< ImpulseModelAbstract > impulse, const bool active=true) |
| Add impulse item. | |
| void | calc (const std::shared_ptr< ImpulseDataMultiple > &data, const Eigen::Ref< const VectorXs > &x) |
| Compute the total impulse Jacobian and impulse velocity. | |
| void | calcDiff (const std::shared_ptr< ImpulseDataMultiple > &data, const Eigen::Ref< const VectorXs > &x) |
| Compute the derivatives of the impulse holonomic constraint. | |
| template<typename NewScalar > | |
| ImpulseModelMultipleTpl< NewScalar > | cast () const |
| Cast the multi-impulse model to a different scalar type. | |
| void | changeImpulseStatus (const std::string &name, const bool active) |
| Change the impulse status. | |
| std::shared_ptr< ImpulseDataMultiple > | createData (pinocchio::DataTpl< Scalar > *const data) |
| Create the multi-impulse data. | |
| const std::set< std::string > & | get_active_set () const |
| Return the names of the set of active impulses. | |
| const ImpulseModelContainer & | get_impulses () const |
| Return the impulse models. | |
| const std::set< std::string > & | get_inactive_set () const |
| Return the names of the set of inactive impulses. | |
| std::size_t | get_nc () const |
| Return the dimension of active impulses. | |
| std::size_t | get_nc_total () const |
| Return the dimension of all impulses. | |
| const std::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. | |
| void | updateForce (const std::shared_ptr< ImpulseDataMultiple > &data, const VectorXs &impulse) |
| Update the spatial impulse defined in frame coordinate. | |
| void | updateForceDiff (const std::shared_ptr< ImpulseDataMultiple > &data, const MatrixXs &df_dx) const |
| Update the Jacobian of the spatial impulse defined in frame coordinate. | |
| void | updateRneaDiff (const std::shared_ptr< ImpulseDataMultiple > &data, pinocchio::DataTpl< Scalar > &pinocchio) const |
| Update the RNEA derivatives dtau_dq by adding the skew term (necessary for impulses expressed in LOCAL_WORLD_ALIGNED / WORLD) | |
| void | updateVelocity (const std::shared_ptr< ImpulseDataMultiple > &data, const VectorXs &vnext) const |
| Update the system velocity after impulse. | |
| void | updateVelocityDiff (const std::shared_ptr< ImpulseDataMultiple > &data, const MatrixXs &dvnext_dx) const |
| Update the Jacobian of the system velocity after impulse. | |
Public Attributes | |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar | Scalar |
Friends | |
| template<class Scalar > | |
| std::ostream & | operator<< (std::ostream &os, const ImpulseModelMultipleTpl< Scalar > &model) |
| Print information on the impulse models. | |
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.
Definition at line 61 of file multiple-impulses.hpp.
| typedef MathBaseTpl<Scalar> MathBase |
Definition at line 66 of file multiple-impulses.hpp.
| typedef StateMultibodyTpl<Scalar> StateMultibody |
Definition at line 67 of file multiple-impulses.hpp.
| typedef ImpulseDataAbstractTpl<Scalar> ImpulseDataAbstract |
Definition at line 68 of file multiple-impulses.hpp.
| typedef ImpulseDataMultipleTpl<Scalar> ImpulseDataMultiple |
Definition at line 69 of file multiple-impulses.hpp.
| typedef ImpulseModelAbstractTpl<Scalar> ImpulseModelAbstract |
Definition at line 70 of file multiple-impulses.hpp.
| typedef ImpulseItemTpl<Scalar> ImpulseItem |
Definition at line 72 of file multiple-impulses.hpp.
| typedef MathBase::Vector2s Vector2s |
Definition at line 74 of file multiple-impulses.hpp.
| typedef MathBase::Vector3s Vector3s |
Definition at line 75 of file multiple-impulses.hpp.
| typedef MathBase::VectorXs VectorXs |
Definition at line 76 of file multiple-impulses.hpp.
| typedef MathBase::MatrixXs MatrixXs |
Definition at line 77 of file multiple-impulses.hpp.
| typedef std::map<std::string, std::shared_ptr<ImpulseItem> > ImpulseModelContainer |
Definition at line 80 of file multiple-impulses.hpp.
| typedef std::map<std::string, std::shared_ptr<ImpulseDataAbstract> > ImpulseDataContainer |
Definition at line 82 of file multiple-impulses.hpp.
| typedef pinocchio::container::aligned_vector<pinocchio::ForceTpl<Scalar>>::iterator ForceIterator |
Definition at line 84 of file multiple-impulses.hpp.
|
explicit |
Initialize the multi-impulse model.
| [in] | state | Multibody state |
| void addImpulse | ( | const std::string & | name, |
| std::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] | impulse | 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 std::shared_ptr< ImpulseDataMultiple > & | data, |
| const Eigen::Ref< const VectorXs > & | x | ||
| ) |
Compute the total impulse Jacobian and impulse velocity.
| [in] | data | Multi-impulse data |
| [in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
| void calcDiff | ( | const std::shared_ptr< ImpulseDataMultiple > & | data, |
| const Eigen::Ref< const VectorXs > & | x | ||
| ) |
Compute the derivatives of the impulse holonomic constraint.
| [in] | data | Multi-impulse data |
| [in] | x | State point \(\mathbf{x}\in\mathbb{R}^{ndx}\) |
| void updateVelocity | ( | const std::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 std::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 std::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 std::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}}\) |
| void updateRneaDiff | ( | const std::shared_ptr< ImpulseDataMultiple > & | data, |
| pinocchio::DataTpl< Scalar > & | pinocchio | ||
| ) | const |
Update the RNEA derivatives dtau_dq by adding the skew term (necessary for impulses expressed in LOCAL_WORLD_ALIGNED / WORLD)
as explained in this document : https://www.overleaf.com/read/tzvrrxxtntwk
| [in] | data | Multi-contact data |
| [in] | pinocchio | Pinocchio data |
| std::shared_ptr< ImpulseDataMultiple > createData | ( | pinocchio::DataTpl< Scalar > *const | data | ) |
Create the multi-impulse data.
| [in] | data | Pinocchio data |
| ImpulseModelMultipleTpl< NewScalar > cast | ( | ) | const |
Cast the multi-impulse model to a different scalar type.
It is useful for operations requiring different precision or scalar types.
| NewScalar | The new scalar type to cast to. |
| EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar |
Definition at line 65 of file multiple-impulses.hpp.