|
| ResidualModelContactCoPPositionTpl (boost::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const CoPSupport &cref) |
| Initialize the contact CoP residual model. More...
|
|
| ResidualModelContactCoPPositionTpl (boost::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const CoPSupport &cref, const std::size_t nu) |
| Initialize the contact CoP residual model. More...
|
|
virtual void | calc (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) |
| Compute the residual vector for nodes that depends only on the state. More...
|
|
virtual void | calc (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
| Compute the contact CoP residual. More...
|
|
virtual void | calcDiff (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) |
| Compute the Jacobian of the residual functions with respect to the state only. More...
|
|
virtual void | calcDiff (const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) |
| Compute the Jacobians of the contact CoP residual. More...
|
|
virtual boost::shared_ptr< ResidualDataAbstract > | createData (DataCollectorAbstract *const data) |
| Create the contact CoP residual data. More...
|
|
pinocchio::FrameIndex | get_id () const |
| Return the reference frame id.
|
|
const CoPSupport & | get_reference () const |
| Return the reference support region of CoP.
|
|
virtual void | print (std::ostream &os) const |
| Print relevant information of the cop-position residual. More...
|
|
void | set_id (pinocchio::FrameIndex id) |
| Modify the reference frame id.
|
|
void | set_reference (const CoPSupport &reference) |
| Modify the reference support region of CoP.
|
|
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 112 of file fwd.hpp.