25 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
28 using Base = ODEAbstractTpl<Scalar>;
31 using Data = MultibodyFreeFwdDataTpl<Scalar>;
32 using Manifold = proxsuite::nlp::MultibodyPhaseSpace<Scalar>;
44 const MatrixXs &actuation);
53 long nv =
space().getModel().nv;
54 return act_matrix_rank < nv;
59 virtual void forward(
const ConstVectorRef &x,
const ConstVectorRef &u,
61 virtual void dForward(
const ConstVectorRef &x,
const ConstVectorRef &u,
67 Eigen::FullPivLU<MatrixXs> lu_decomp_;
68 Eigen::Index act_matrix_rank;
ODEDataTpl< Scalar > Base
MultibodyFreeFwdDataTpl(const MultibodyFreeFwdDynamicsTpl< Scalar > *cont_dyn)
pinocchio::DataTpl< Scalar > PinDataType
typename math_types< Scalar >::MatrixXs MatrixXs
typename math_types< Scalar >::VectorXs VectorXs
Free-space multibody forward dynamics, using Pinocchio.
virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
Evaluate the ODE vector field: this returns the value of .
const Manifold & space() const
MultibodyFreeFwdDataTpl< Scalar > Data
proxsuite::nlp::MultibodyPhaseSpace< Scalar > Manifold
virtual void dForward(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
Evaluate the vector field Jacobians.
MultibodyFreeFwdDynamicsTpl(const ManifoldPtr &state)
shared_ptr< ContDataAbstract > createData() const
Create a data holder instance.
ODEDataTpl< Scalar > BaseData
MultibodyFreeFwdDynamicsTpl(const ManifoldPtr &state, const MatrixXs &actuation)
bool isUnderactuated() const
Determine whether the system is underactuated.
Eigen::Index getActuationMatrixRank() const
shared_ptr< Manifold > ManifoldPtr