Crocoddyl
StateMultibodyTpl< _Scalar > Class Template Reference

State multibody representation. More...

#include <multibody.hpp>

Inheritance diagram for StateMultibodyTpl< _Scalar >:
StateAbstractTpl< _Scalar >

Public Types

typedef StateAbstractTpl< Scalar > Base
 
typedef MathBaseTpl< Scalar > MathBase
 
typedef MathBase::MatrixXs MatrixXs
 
typedef pinocchio::ModelTpl< Scalar > PinocchioModel
 
typedef MathBase::VectorXs VectorXs
 
- Public Types inherited from StateAbstractTpl< _Scalar >
typedef MathBaseTpl< Scalar > MathBase
 
typedef MathBase::MatrixXs MatrixXs
 
typedef MathBase::VectorXs VectorXs
 

Public Member Functions

 StateMultibodyTpl (boost::shared_ptr< PinocchioModel > model)
 Initialize the multibody state. More...
 
virtual void diff (const Eigen::Ref< const VectorXs > &x0, const Eigen::Ref< const VectorXs > &x1, Eigen::Ref< VectorXs > dxout) const
 Compute the state manifold differentiation. More...
 
const boost::shared_ptr< PinocchioModel > & get_pinocchio () const
 Return the Pinocchio model (i.e., model of the rigid body system)
 
virtual void integrate (const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &dx, Eigen::Ref< VectorXs > xout) const
 Compute the state manifold integration. More...
 
virtual void Jdiff (const Eigen::Ref< const VectorXs > &, const Eigen::Ref< const VectorXs > &, Eigen::Ref< MatrixXs > Jfirst, Eigen::Ref< MatrixXs > Jsecond, const Jcomponent firstsecond=both) const
 Compute the Jacobian of the state manifold differentiation. More...
 
virtual void Jintegrate (const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &dx, Eigen::Ref< MatrixXs > Jfirst, Eigen::Ref< MatrixXs > Jsecond, const Jcomponent firstsecond=both, const AssignmentOp=setto) const
 Compute the Jacobian of the state manifold integration. More...
 
virtual void JintegrateTransport (const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &dx, Eigen::Ref< MatrixXs > Jin, const Jcomponent firstsecond) const
 Parallel transport from integrate(x, dx) to x. More...
 
virtual VectorXs rand () const
 Generate a random state. More...
 
virtual VectorXs zero () const
 Generate a zero state. More...
 
- Public Member Functions inherited from StateAbstractTpl< _Scalar >
 StateAbstractTpl (const std::size_t nx, const std::size_t ndx)
 Initialize the state dimensions. More...
 
VectorXs diff_dx (const Eigen::Ref< const VectorXs > &x0, const Eigen::Ref< const VectorXs > &x1)
 Compute the state manifold differentiation. More...
 
bool get_has_limits () const
 Indicate if the state has defined limits.
 
const VectorXs & get_lb () const
 Return the state lower bound.
 
std::size_t get_ndx () const
 Return the dimension of the tangent space of the state manifold.
 
std::size_t get_nq () const
 Return the dimension of the configuration tuple.
 
std::size_t get_nv () const
 Return the dimension of tangent space of the configuration manifold.
 
std::size_t get_nx () const
 Return the dimension of the state tuple.
 
const VectorXs & get_ub () const
 Return the state upper bound.
 
VectorXs integrate_x (const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &dx)
 Compute the state manifold integration. More...
 
std::vector< MatrixXs > Jdiff_Js (const Eigen::Ref< const VectorXs > &x0, const Eigen::Ref< const VectorXs > &x1, const Jcomponent firstsecond=both)
 
std::vector< MatrixXs > Jintegrate_Js (const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &dx, const Jcomponent firstsecond=both)
 Compute the Jacobian of the state manifold integration. More...
 
void set_lb (const VectorXs &lb)
 Modify the state lower bound.
 
void set_ub (const VectorXs &ub)
 Modify the state upper bound.
 

Public Attributes

EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
 
- Public Attributes inherited from StateAbstractTpl< _Scalar >
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
 

Protected Attributes

bool has_limits_
 Indicates whether any of the state limits is finite.
 
VectorXs lb_
 Lower state limits.
 
std::size_t ndx_
 State rate dimension.
 
std::size_t nq_
 Configuration dimension.
 
std::size_t nv_
 Velocity dimension.
 
std::size_t nx_
 State dimension.
 
VectorXs ub_
 Upper state limits.
 
- Protected Attributes inherited from StateAbstractTpl< _Scalar >
bool has_limits_
 Indicates whether any of the state limits is finite.
 
VectorXs lb_
 Lower state limits.
 
std::size_t ndx_
 State rate dimension.
 
std::size_t nq_
 Configuration dimension.
 
std::size_t nv_
 Velocity dimension.
 
std::size_t nx_
 State dimension.
 
VectorXs ub_
 Upper state limits.
 

Additional Inherited Members

- Protected Member Functions inherited from StateAbstractTpl< _Scalar >
void update_has_limits ()
 

Detailed Description

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

State multibody representation.

A multibody state is described by the configuration point and its tangential velocity, or in other words, by the generalized position and velocity coordinates of a rigid-body system. For this state, we describe its operators: difference, integrates, transport and their derivatives for any Pinocchio model.

For more details about these operators, please read the documentation of the StateAbstractTpl class.

See also
diff(), integrate(), Jdiff(), Jintegrate() and JintegrateTransport()

Definition at line 35 of file multibody.hpp.

Constructor & Destructor Documentation

◆ StateMultibodyTpl()

StateMultibodyTpl ( boost::shared_ptr< PinocchioModel >  model)
explicit

Initialize the multibody state.

Parameters
[in]modelPinocchio model

Member Function Documentation

◆ zero()

virtual VectorXs zero ( ) const
virtual

Generate a zero state.

Note that the zero configuration is computed using pinocchio::neutral.

Implements StateAbstractTpl< _Scalar >.

◆ rand()

virtual VectorXs rand ( ) const
virtual

Generate a random state.

Note that the random configuration is computed using pinocchio::random which satisfies the manifold definition (e.g., the quaterion definition)

Implements StateAbstractTpl< _Scalar >.

◆ diff()

virtual void diff ( const Eigen::Ref< const VectorXs > &  x0,
const Eigen::Ref< const VectorXs > &  x1,
Eigen::Ref< VectorXs >  dxout 
) const
virtual

Compute the state manifold differentiation.

The state differentiation is defined as:

\begin{equation*} \delta\mathbf{x} = \mathbf{x}_{1} \ominus \mathbf{x}_{0}, \end{equation*}

where \(\mathbf{x}_{1}\), \(\mathbf{x}_{0}\) are the current and previous state which lie in a manifold \(\mathcal{M}\), and \(\delta\mathbf{x} \in T_\mathbf{x} \mathcal{M}\) is the rate of change in the state in the tangent space of the manifold.

Parameters
[in]x0Previous state point (size nx)
[in]x1Current state point (size nx)
[out]dxoutDifference between the current and previous state points (size ndx)

Implements StateAbstractTpl< _Scalar >.

◆ integrate()

virtual void integrate ( const Eigen::Ref< const VectorXs > &  x,
const Eigen::Ref< const VectorXs > &  dx,
Eigen::Ref< VectorXs >  xout 
) const
virtual

Compute the state manifold integration.

The state integration is defined as:

\begin{equation*} \mathbf{x}_{next} = \mathbf{x} \oplus \delta\mathbf{x}, \end{equation*}

where \(\mathbf{x}\), \(\mathbf{x}_{next}\) are the current and next state which lie in a manifold \(\mathcal{M}\), and \(\delta\mathbf{x} \in T_\mathbf{x} \mathcal{M}\) is the rate of change in the state in the tangent space of the manifold.

Parameters
[in]xState point (size nx)
[in]dxVelocity vector (size ndx)
[out]xoutNext state point (size nx)

Implements StateAbstractTpl< _Scalar >.

◆ Jdiff()

virtual void Jdiff ( const Eigen::Ref< const VectorXs > &  x0,
const Eigen::Ref< const VectorXs > &  x1,
Eigen::Ref< MatrixXs >  Jfirst,
Eigen::Ref< MatrixXs >  Jsecond,
const Jcomponent  firstsecond = both 
) const
virtual

Compute the Jacobian of the state manifold differentiation.

The state differentiation is defined as:

\begin{equation*} \delta\mathbf{x} = \mathbf{x}_{1} \ominus \mathbf{x}_{0}, \end{equation*}

where \(\mathbf{x}_{1}\), \(\mathbf{x}_{0}\) are the current and previous state which lie in a manifold \(\mathcal{M}\), and \(\delta\mathbf{x} \in T_\mathbf{x} \mathcal{M}\) is the rate of change in the state in the tangent space of the manifold.

The Jacobians lie in the tangent space of manifold, i.e. \(\mathbb{R}^{\textrm{ndx}\times\textrm{ndx}}\). Note that the state is represented as a tuple of nx values and its dimension is ndx. Calling \(\boldsymbol{\Delta}(\mathbf{x}_{0}, \mathbf{x}_{1}) \), the difference function, these Jacobians satisfy the following relationships:

  • \(\boldsymbol{\Delta}(\mathbf{x}_{0},\mathbf{x}_{0}\oplus\delta\mathbf{y}) - \boldsymbol{\Delta}(\mathbf{x}_{0},\mathbf{x}_{1}) = \mathbf{J}_{\mathbf{x}_{1}}\delta\mathbf{y} + \mathbf{o}(\mathbf{x}_{0})\).
  • \(\boldsymbol{\Delta}(\mathbf{x}_{0}\oplus\delta\mathbf{y},\mathbf{x}_{1}) - \boldsymbol{\Delta}(\mathbf{x}_{0},\mathbf{x}_{1}) = \mathbf{J}_{\mathbf{x}_{0}}\delta\mathbf{y} + \mathbf{o}(\mathbf{x}_{0})\),

where \(\mathbf{J}_{\mathbf{x}_{1}}\) and \(\mathbf{J}_{\mathbf{x}_{0}}\) are the Jacobian with respect to the current and previous state, respectively.

Parameters
[in]x0Previous state point (size nx)
[in]x1Current state point (size nx)
[out]JfirstJacobian of the difference operation relative to the previous state point (size ndx \(\times\)ndx)
[out]JsecondJacobian of the difference operation relative to the current state point (size ndx \(\times\)ndx)
[in]firstsecondArgument (either x0 and / or x1) with respect to which the differentiation is performed.

Implements StateAbstractTpl< _Scalar >.

◆ Jintegrate()

virtual void Jintegrate ( const Eigen::Ref< const VectorXs > &  x,
const Eigen::Ref< const VectorXs > &  dx,
Eigen::Ref< MatrixXs >  Jfirst,
Eigen::Ref< MatrixXs >  Jsecond,
const Jcomponent  firstsecond = both,
const  op = setto 
) const
virtual

Compute the Jacobian of the state manifold integration.

The state integration is defined as:

\begin{equation*} \mathbf{x}_{next} = \mathbf{x} \oplus \delta\mathbf{x}, \end{equation*}

where \(\mathbf{x}\), \(\mathbf{x}_{next}\) are the current and next state which lie in a manifold \(\mathcal{M}\), and \(\delta\mathbf{x} \in T_\mathbf{x} \mathcal{M}\) is the rate of change in the state in the tangent space of the manifold.

The Jacobians lie in the tangent space of manifold, i.e. \(\mathbb{R}^{\textrm{ndx}\times\textrm{ndx}}\). Note that the state is represented as a tuple of nx values and its dimension is ndx. Calling \( \mathbf{f}(\mathbf{x}, \delta\mathbf{x}) \), the integrate function, these Jacobians satisfy the following relationships:

  • \(\mathbf{f}(\mathbf{x}\oplus\delta\mathbf{y},\delta\mathbf{x})\ominus\mathbf{f}(\mathbf{x},\delta\mathbf{x}) = \mathbf{J}_\mathbf{x}\delta\mathbf{y} + \mathbf{o}(\delta\mathbf{x})\).
  • \(\mathbf{f}(\mathbf{x},\delta\mathbf{x}+\delta\mathbf{y})\ominus\mathbf{f}(\mathbf{x},\delta\mathbf{x}) = \mathbf{J}_{\delta\mathbf{x}}\delta\mathbf{y} + \mathbf{o}(\delta\mathbf{x})\),

where \(\mathbf{J}_{\delta\mathbf{x}}\) and \(\mathbf{J}_{\mathbf{x}}\) are the Jacobian with respect to the state and velocity, respectively.

Parameters
[in]xState point (size nx)
[in]dxVelocity vector (size ndx)
[out]JfirstJacobian of the integration operation relative to the state point (size ndx \(\times\)ndx)
[out]JsecondJacobian of the integration operation relative to the velocity vector (size ndx \(\times\)ndx)
[in]firstsecondArgument (either x and / or dx) with respect to which the differentiation is performed
[in]opAssignment operator which sets, adds, or removes the given Jacobian matrix

Implements StateAbstractTpl< _Scalar >.

◆ JintegrateTransport()

virtual void JintegrateTransport ( const Eigen::Ref< const VectorXs > &  x,
const Eigen::Ref< const VectorXs > &  dx,
Eigen::Ref< MatrixXs >  Jin,
const Jcomponent  firstsecond 
) const
virtual

Parallel transport from integrate(x, dx) to x.

This function performs the parallel transportation of an input matrix whose columns are expressed in the tangent space at \(\mathbf{x}\oplus\delta\mathbf{x}\) to the tangent space at \(\mathbf{x}\) point.

Parameters
[in]xState point (size nx).
[in]dxVelocity vector (size ndx)
[out]JinInput matrix (number of rows = nv).
[in]firstsecondArgument (either x or dx) with respect to which the differentiation of Jintegrate is performed.

Implements StateAbstractTpl< _Scalar >.


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