aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
multibody-free-fwd.hpp
Go to the documentation of this file.
1
2#pragma once
3
5
6#include <proxsuite-nlp/modelling/spaces/multibody.hpp>
7#include <pinocchio/multibody/data.hpp>
8
9namespace aligator {
10namespace dynamics {
11template <typename Scalar> struct MultibodyFreeFwdDataTpl;
12
23template <typename _Scalar>
25 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
26 using Scalar = _Scalar;
28 using Base = ODEAbstractTpl<Scalar>;
29 using BaseData = ODEDataTpl<Scalar>;
30 using ContDataAbstract = ContinuousDynamicsDataTpl<Scalar>;
31 using Data = MultibodyFreeFwdDataTpl<Scalar>;
32 using Manifold = proxsuite::nlp::MultibodyPhaseSpace<Scalar>;
33 using ManifoldPtr = shared_ptr<Manifold>;
34
35 using Base::nu_;
36
39
40 const Manifold &space() const { return *space_; }
41 int ntau() const { return space_->getModel().nv; }
42
44 const MatrixXs &actuation);
46
52 bool isUnderactuated() const {
53 long nv = space().getModel().nv;
54 return act_matrix_rank < nv;
55 }
56
57 Eigen::Index getActuationMatrixRank() const { return act_matrix_rank; }
58
59 virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u,
60 BaseData &data) const;
61 virtual void dForward(const ConstVectorRef &x, const ConstVectorRef &u,
62 BaseData &data) const;
63
64 shared_ptr<ContDataAbstract> createData() const;
65
66private:
67 Eigen::FullPivLU<MatrixXs> lu_decomp_;
68 Eigen::Index act_matrix_rank;
69};
70
71template <typename Scalar> struct MultibodyFreeFwdDataTpl : ODEDataTpl<Scalar> {
72 using Base = ODEDataTpl<Scalar>;
73 using VectorXs = typename math_types<Scalar>::VectorXs;
74 using MatrixXs = typename math_types<Scalar>::MatrixXs;
75 using PinDataType = pinocchio::DataTpl<Scalar>;
80 MultibodyFreeFwdDataTpl(const MultibodyFreeFwdDynamicsTpl<Scalar> *cont_dyn);
81};
82
83} // namespace dynamics
84} // namespace aligator
85
86#include "aligator/modelling/dynamics/multibody-free-fwd.hxx"
87
88#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
89#include "aligator/modelling/dynamics/multibody-free-fwd.txx"
90#endif
Main package namespace.
Defines a class representing ODEs.
MultibodyFreeFwdDataTpl(const MultibodyFreeFwdDynamicsTpl< Scalar > *cont_dyn)
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 .
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.
MultibodyFreeFwdDynamicsTpl(const ManifoldPtr &state, const MatrixXs &actuation)
bool isUnderactuated() const
Determine whether the system is underactuated.
Base class for ODE dynamics .