Template Class StateAbstractTpl
Defined in File state-base.hpp
Inheritance Relationships
Base Type
public crocoddyl::StateBase(Class StateBase)
Derived Types
public crocoddyl::StateMultibodyTpl< _Scalar >(Template Class StateMultibodyTpl)public crocoddyl::StateNumDiffTpl< _Scalar >(Template Class StateNumDiffTpl)public crocoddyl::StateVectorTpl< _Scalar >(Template Class StateVectorTpl)
Class Documentation
-
template<typename _Scalar>
class StateAbstractTpl : public crocoddyl::StateBase Abstract class for the state representation.
A state is represented by its operators: difference, integrates, transport and their derivatives. The difference operator returns the value of \(\mathbf{x}_{1}\ominus\mathbf{x}_{0}\) operation. Instead the integrate operator returns the value of \(\mathbf{x}\oplus\delta\mathbf{x}\). These operators are used to compared two points on the state manifold \(\mathcal{M}\) or to advance the state given a tangential velocity ( \(T_\mathbf{x} \mathcal{M}\)). Therefore the points \(\mathbf{x}\), \(\mathbf{x}_{0}\) and \(\mathbf{x}_{1}\) belong to the manifold \(\mathcal{M}\); and \(\delta\mathbf{x}\) or \(\mathbf{x}_{1}\ominus\mathbf{x}_{0}\) lie on its tangential space.
See also
diff(),integrate(),Jdiff(),Jintegrate()andJintegrateTransport()Subclassed by crocoddyl::StateMultibodyTpl< _Scalar >, crocoddyl::StateNumDiffTpl< _Scalar >, crocoddyl::StateVectorTpl< _Scalar >
Public Types
-
typedef MathBaseTpl<Scalar> MathBase
Public Functions
-
StateAbstractTpl(const std::size_t nx, const std::size_t ndx)
Initialize the state dimensions.
- Parameters:
nx – [in] Dimension of state configuration tuple
ndx – [in] Dimension of state tangent vector
-
StateAbstractTpl()
-
virtual ~StateAbstractTpl()
-
virtual void diff(const Eigen::Ref<const VectorXs> &x0, const Eigen::Ref<const VectorXs> &x1, Eigen::Ref<VectorXs> dxout) const = 0
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:
x0 – [in] Previous state point (size
nx)x1 – [in] Current state point (size
nx)dxout – [out] Difference between the current and previous state points (size
ndx)
-
virtual void integrate(const Eigen::Ref<const VectorXs> &x, const Eigen::Ref<const VectorXs> &dx, Eigen::Ref<VectorXs> xout) const = 0
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:
x – [in] State point (size
nx)dx – [in] Velocity vector (size
ndx)xout – [out] Next state point (size
nx)
-
virtual void safe_diff(const Eigen::Ref<const VectorXs> &x0, const Eigen::Ref<const VectorXs> &x1, Eigen::Ref<VectorXs> dxout) const
Sanitized diff operator that neutralises invalid components and propagates NaNs where the result cannot be trusted”.
- Parameters:
x0 – Current state (size
nx).x1 – Next state (size
nx)dxout – x1 - x0 value with NaNs on invalid entries (size
ndx)
-
virtual void safe_integrate(const Eigen::Ref<const VectorXs> &x, const Eigen::Ref<const VectorXs> &dx, Eigen::Ref<VectorXs> xout) const
Sanitized integrate operator that clamps invalid inputs and marks affected configuration or velocity entries with NaNs.
- Parameters:
x – Current state (size
nx).dx – Displacement of the state (size
ndx).xout – x + dx value with NaNs on invalid entries (size
nx).
-
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 = 0
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
nxvalues and its dimension isndx. 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:
x0 – [in] Previous state point (size
nx)x1 – [in] Current state point (size
nx)Jfirst – [out] Jacobian of the difference operation relative to the previous state point (size
ndx\(\times\)ndx)Jsecond – [out] Jacobian of the difference operation relative to the current state point (size
ndx\(\times\)ndx)firstsecond – [in] Argument (either x0 and / or x1) with respect to which the differentiation is performed.
-
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 op = setto) const = 0
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
nxvalues and its dimension isndx. 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:
x – [in] State point (size
nx)dx – [in] Velocity vector (size
ndx)Jfirst – [out] Jacobian of the integration operation relative to the state point (size
ndx\(\times\)ndx)Jsecond – [out] Jacobian of the integration operation relative to the velocity vector (size
ndx\(\times\)ndx)firstsecond – [in] Argument (either x and / or dx) with respect to which the differentiation is performed
op – [in] Assignment operator which sets, adds, or removes the given Jacobian matrix
-
virtual void JintegrateTransport(const Eigen::Ref<const VectorXs> &x, const Eigen::Ref<const VectorXs> &dx, Eigen::Ref<MatrixXs> Jin, const Jcomponent firstsecond) const = 0
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:
x – [in] State point (size
nx).dx – [in] Velocity vector (size
ndx)Jin – [out] Input matrix (number of rows =
nv).firstsecond – [in] Argument (either x or dx) with respect to which the differentiation of Jintegrate is performed.
-
VectorXs diff_dx(const Eigen::Ref<const VectorXs> &x0, const Eigen::Ref<const VectorXs> &x1)
Compute the state manifold differentiation.
- Parameters:
x0 – [in] Previous state point (size
nx)x1 – [in] Current state point (size
nx)
- Returns:
Difference between the current and previous state points (size
ndx)
-
VectorXs integrate_x(const Eigen::Ref<const VectorXs> &x, const Eigen::Ref<const VectorXs> &dx)
Compute the state manifold integration.
- Parameters:
x – [in] State point (size
nx)dx – [in] Velocity vector (size
ndx)
- Returns:
Next state point (size
nx)
-
std::vector<MatrixXs> Jdiff_Js(const Eigen::Ref<const VectorXs> &x0, const Eigen::Ref<const VectorXs> &x1, const Jcomponent firstsecond = both)
- Parameters:
x0 – [in] Previous state point (size
nx)x1 – [in] Current state point (size
nx)
- Returns:
Jacobians
-
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.
- Parameters:
x – [in] State point (size
nx)dx – [in] Velocity vector (size
ndx)
- Returns:
Jacobians
-
virtual void print(std::ostream &os) const
Print relevant information of the state model.
- Parameters:
os – [out] Output stream object
-
std::size_t get_nx() const
Return the dimension of the state tuple.
-
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.
-
bool get_has_limits() const
Indicate if the state has defined limits.
Public Members
- EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Protected Functions
-
void update_has_limits()
Protected Attributes
-
std::size_t nx_
State dimension.
-
std::size_t ndx_
State rate dimension.
-
std::size_t nq_
Configuration dimension.
-
std::size_t nv_
Velocity dimension.
-
bool has_limits_
Indicates whether any of the state limits is finite.
Friends
-
template<class Scalar>
friend std::ostream &operator<<(std::ostream &os, const ActionModelAbstractTpl<Scalar> &model) Print information on the state model.
-
typedef MathBaseTpl<Scalar> MathBase