Template Class DifferentialActionModelAbstractTpl
Defined in File diff-action-base.hpp
Inheritance Relationships
Base Type
public crocoddyl::DifferentialActionModelBase(Class DifferentialActionModelBase)
Derived Types
public crocoddyl::DifferentialActionModelContactFwdDynamicsTpl< _Scalar >(Template Class DifferentialActionModelContactFwdDynamicsTpl)public crocoddyl::DifferentialActionModelContactInvDynamicsTpl< _Scalar >(Template Class DifferentialActionModelContactInvDynamicsTpl)public crocoddyl::DifferentialActionModelFreeFwdDynamicsTpl< _Scalar >(Template Class DifferentialActionModelFreeFwdDynamicsTpl)public crocoddyl::DifferentialActionModelFreeInvDynamicsTpl< _Scalar >(Template Class DifferentialActionModelFreeInvDynamicsTpl)public crocoddyl::DifferentialActionModelLQRTpl< _Scalar >(Template Class DifferentialActionModelLQRTpl)public crocoddyl::DifferentialActionModelNumDiffTpl< _Scalar >(Template Class DifferentialActionModelNumDiffTpl)
Class Documentation
-
template<typename _Scalar>
class DifferentialActionModelAbstractTpl : public crocoddyl::DifferentialActionModelBase Abstract class for differential action model.
A differential action model combines dynamics, cost and constraints models. We can use it in each node of our optimal control problem thanks to dedicated integration rules (e.g.,
IntegratedActionModelEulerTplorIntegratedActionModelRKTpl). These integrated action models produce action models (ActionModelAbstractTpl). Thus, every time that we want to describe a problem, we need to provide ways of computing the dynamics, cost, constraints functions and their derivatives. All these are described inside the differential action model.Concretely speaking, the differential action model is the time-continuous version of an action model, i.e.,
\[\begin{split} \begin{aligned} &\dot{\mathbf{v}} = \mathbf{f}(\mathbf{q}, \mathbf{v}, \mathbf{u}), &\textrm{(dynamics)}\\ &\ell(\mathbf{q}, \mathbf{v},\mathbf{u}) = \int_0^{\delta t} a(\mathbf{r}(\mathbf{q}, \mathbf{v},\mathbf{u}))\,dt, &\textrm{(cost)}\\ &\mathbf{g}(\mathbf{q}, \mathbf{v},\mathbf{u})<\mathbf{0}, &\textrm{(inequality constraint)}\\ &\mathbf{h}(\mathbf{q}, \mathbf{v},\mathbf{u})=\mathbf{0}, &\textrm{(equality constraint)} \end{aligned} \end{split}\]wherethe configuration \(\mathbf{q}\in\mathcal{Q}\) lies in the configuration manifold described with a
nq-tuple,the velocity \(\mathbf{v}\in T_{\mathbf{q}}\mathcal{Q}\) is the tangent vector to the configuration manifold with
nvdimension,the control input \(\mathbf{u}\in\mathbb{R}^{nu}\) is an Euclidean vector,
\(\mathbf{r}(\cdot)\) and \(a(\cdot)\) are the residual and activation functions (see
ResidualModelAbstractTplandActivationModelAbstractTpl, respectively),\(\mathbf{g}(\cdot)\in\mathbb{R}^{ng}\) and \(\mathbf{h}(\cdot)\in\mathbb{R}^{nh}\) are the inequality and equality vector functions, respectively.
Both configuration and velocity describe the system space \(\mathbf{x}=(\mathbf{q}, \mathbf{v})\in\mathcal{X}\) which lies in the state manifold. Note that the acceleration \(\dot{\mathbf{v}}\in T_{\mathbf{q}}\mathcal{Q}\) lies also in the tangent space of the configuration manifold. The computation of these equations are carried out inside
calc()function. In short, this function computes the system acceleration, cost and constraints values (also called constraints violations). This procedure is equivalent to running a forward pass of the action model.However, during numerical optimization, we also need to run backward passes of the differential action model. These calculations are performed by
calcDiff(). In short, this function builds a linear-quadratic approximation of the differential action model, i.e.,\[\begin{split} \begin{aligned} &\delta\dot{\mathbf{v}} = \mathbf{f_{q}}\delta\mathbf{q}+\mathbf{f_{v}}\delta\mathbf{v}+\mathbf{f_{u}}\delta\mathbf{u}, &\textrm{(dynamics)}\\ &\ell(\delta\mathbf{q},\delta\mathbf{v},\delta\mathbf{u}) = \begin{bmatrix}1 \\ \delta\mathbf{q} \\ \delta\mathbf{v} \\ \delta\mathbf{u}\end{bmatrix}^T \begin{bmatrix}0 & \mathbf{\ell_q}^T & \mathbf{\ell_v}^T & \mathbf{\ell_u}^T \\ \mathbf{\ell_q} & \mathbf{\ell_{qq}} & \mathbf{\ell_{qv}} & \mathbf{\ell_{uq}}^T \\ \mathbf{\ell_v} & \mathbf{\ell_{vq}} & \mathbf{\ell_{vv}} & \mathbf{\ell_{uv}}^T \\ \mathbf{\ell_u} & \mathbf{\ell_{uq}} & \mathbf{\ell_{uv}} & \mathbf{\ell_{uu}}\end{bmatrix} \begin{bmatrix}1 \\ \delta\mathbf{q} \\ \delta\mathbf{v} \\ \delta\mathbf{u}\end{bmatrix}, &\textrm{(cost)}\\ &\mathbf{g_q}\delta\mathbf{q}+\mathbf{g_v}\delta\mathbf{v}+\mathbf{g_u}\delta\mathbf{u}\leq\mathbf{0}, &\textrm{(inequality constraints)}\\ &\mathbf{h_q}\delta\mathbf{q}+\mathbf{h_v}\delta\mathbf{v}+\mathbf{h_u}\delta\mathbf{u}=\mathbf{0}, &\textrm{(equality constraints)} \end{aligned} \end{split}\]where\(\mathbf{f_x}=(\mathbf{f_q};\,\, \mathbf{f_v})\in\mathbb{R}^{nv\times ndx}\) and \(\mathbf{f_u}\in\mathbb{R}^{nv\times nu}\) are the Jacobians of the dynamics,
\(\mathbf{\ell_x}=(\mathbf{\ell_q};\,\, \mathbf{\ell_v})\in\mathbb{R}^{ndx}\) and \(\mathbf{\ell_u}\in\mathbb{R}^{nu}\) are the Jacobians of the cost function,
\(\mathbf{\ell_{xx}}=(\mathbf{\ell_{qq}}\,\, \mathbf{\ell_{qv}};\,\, \mathbf{\ell_{vq}}\, \mathbf{\ell_{vv}})\in\mathbb{R}^{ndx\times ndx}\), \(\mathbf{\ell_{xu}}=(\mathbf{\ell_q};\,\, \mathbf{\ell_v})\in\mathbb{R}^{ndx\times nu}\) and \(\mathbf{\ell_{uu}}\in\mathbb{R}^{nu\times nu}\) are the Hessians of the cost function,
\(\mathbf{g_x}=(\mathbf{g_q};\,\, \mathbf{g_v})\in\mathbb{R}^{ng\times ndx}\) and \(\mathbf{g_u}\in\mathbb{R}^{ng\times nu}\) are the Jacobians of the inequality constraints, and
\(\mathbf{h_x}=(\mathbf{h_q};\,\, \mathbf{h_v})\in\mathbb{R}^{nh\times ndx}\) and \(\mathbf{h_u}\in\mathbb{R}^{nh\times nu}\) are the Jacobians of the equality constraints.
Additionally, it is important to note that
calcDiff()computes the derivatives using the latest stored values bycalc(). Thus, we need to first runcalc().See also
Subclassed by crocoddyl::DifferentialActionModelContactFwdDynamicsTpl< _Scalar >, crocoddyl::DifferentialActionModelContactInvDynamicsTpl< _Scalar >, crocoddyl::DifferentialActionModelFreeFwdDynamicsTpl< _Scalar >, crocoddyl::DifferentialActionModelFreeInvDynamicsTpl< _Scalar >, crocoddyl::DifferentialActionModelLQRTpl< _Scalar >, crocoddyl::DifferentialActionModelNumDiffTpl< _Scalar >
Public Types
-
typedef ScalarSelector<Scalar>::type ScalarType
-
typedef MathBaseTpl<Scalar> MathBase
-
typedef DifferentialActionDataAbstractTpl<Scalar> DifferentialActionDataAbstract
-
typedef StateAbstractTpl<Scalar> StateAbstract
Public Functions
Initialize the differential action model.
- Parameters:
state – [in] State description
nu – [in] Dimension of control vector
nr – [in] Dimension of cost-residual vector
ng – [in] Number of inequality constraints (default 0)
nh – [in] Number of equality constraints (default 0)
ng_T – [in] Number of inequality terminal constraints (default 0)
nh_T – [in] Number of equality terminal constraints (default 0)
-
virtual ~DifferentialActionModelAbstractTpl() = default
Compute the system acceleration and cost value.
- Parameters:
data – [in] Differential action data
x – [in] State point \(\mathbf{x}\in\mathbb{R}^{ndx}\)
u – [in] Control input \(\mathbf{u}\in\mathbb{R}^{nu}\)
Compute the total cost value for nodes that depends only on the state.
It updates the total cost and the system acceleration is not updated as the control input is undefined. This function is used in the terminal nodes of an optimal control problem.
- Parameters:
data – [in] Differential action data
x – [in] State point \(\mathbf{x}\in\mathbb{R}^{ndx}\)
Compute the derivatives of the dynamics and cost functions.
It computes the partial derivatives of the dynamical system and the cost function. It assumes that
calc()has been run first. This function builds a quadratic approximation of the time-continuous action model (i.e. dynamical system and cost function).- Parameters:
data – [in] Differential action data
x – [in] State point \(\mathbf{x}\in\mathbb{R}^{ndx}\)
u – [in] Control input \(\mathbf{u}\in\mathbb{R}^{nu}\)
Compute the derivatives of the cost functions with respect to the state only.
It updates the derivatives of the cost function with respect to the state only. This function is used in the terminal nodes of an optimal control problem.
- Parameters:
data – [in] Differential action data
x – [in] State point \(\mathbf{x}\in\mathbb{R}^{ndx}\)
-
virtual std::shared_ptr<DifferentialActionDataAbstract> createData()
Create the differential action data.
- Returns:
the differential action data
Checks that a specific data belongs to this model.
Computes the quasic static commands.
The quasic static commands are the ones produced for a the reference posture as an equilibrium point, i.e. for \(\mathbf{f}(\mathbf{q},\mathbf{v}=\mathbf{0},\mathbf{u})=\mathbf{0}\)
- Parameters:
data – [in] Differential action data
u – [out] Quasic static commands
x – [in] State point (velocity has to be zero)
maxiter – [in] Maximum allowed number of iterations
tol – [in] Tolerance
- Parameters:
data – [in] Differential action data
x – [in] State point (velocity has to be zero)
maxiter – [in] Maximum allowed number of iterations
tol – [in] Tolerance
- Returns:
Quasic static commands
-
std::size_t get_nu() const
Return the dimension of the control input.
-
std::size_t get_nr() const
Return the dimension of the cost-residual vector.
-
virtual std::size_t get_ng() const
Return the number of inequality constraints.
-
virtual std::size_t get_nh() const
Return the number of equality constraints.
-
virtual std::size_t get_ng_T() const
Return the number of inequality terminal constraints.
-
virtual std::size_t get_nh_T() const
Return the number of equality terminal constraints.
-
const std::shared_ptr<StateAbstract> &get_state() const
Return the state.
-
bool get_has_control_limits() const
Indicates if there are defined control limits.
-
virtual void print(std::ostream &os) const
Print relevant information of the differential action model.
- Parameters:
os – [out] Output stream object
Public Members
- EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Protected Functions
-
inline DifferentialActionModelAbstractTpl()
-
void update_has_control_limits()
Update the status of the control limits (i.e. if there are defined limits)
Protected Attributes
-
std::size_t nu_
Control dimension.
-
std::size_t nr_
Dimension of the cost residual.
-
std::size_t ng_
Number of inequality constraints.
-
std::size_t nh_
Number of equality constraints.
-
std::size_t ng_T_
Number of inequality terminal constraints.
-
std::size_t nh_T_
Number of equality terminal constraints.
-
std::shared_ptr<StateAbstract> state_
Model of the state.
-
bool has_control_limits_
Indicates whether any of the control limits is finite
Friends
- friend class IntegratedActionModelAbstractTpl
- friend class ConstraintModelManagerTpl
-
template<class Scalar>
friend std::ostream &operator<<(std::ostream &os, const DifferentialActionModelAbstractTpl<Scalar> &model) Print information on the differential action model.