aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
kinodynamics-fwd.hpp
Go to the documentation of this file.
1
2#pragma once
3
5
6#include <Eigen/src/LU/PartialPivLU.h>
7#include <proxsuite-nlp/modelling/spaces/multibody.hpp>
8#include <pinocchio/multibody/model.hpp>
9
10namespace aligator {
11namespace dynamics {
12template <typename Scalar> struct KinodynamicsFwdDataTpl;
13
28template <typename _Scalar>
30 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
31 using Scalar = _Scalar;
33 using Base = ODEAbstractTpl<Scalar>;
34 using BaseData = ODEDataTpl<Scalar>;
35 using ContDataAbstract = ContinuousDynamicsDataTpl<Scalar>;
36 using Data = KinodynamicsFwdDataTpl<Scalar>;
37 using Manifold = proxsuite::nlp::MultibodyPhaseSpace<Scalar>;
38 using ManifoldPtr = shared_ptr<Manifold>;
39 using Model = pinocchio::ModelTpl<Scalar>;
40 using Matrix3s = Eigen::Matrix<Scalar, 3, 3>;
41
42 using Base::nu_;
43
46 double mass_;
47 Vector3s gravity_;
49
50 std::vector<bool> contact_states_;
51 std::vector<pinocchio::FrameIndex> contact_ids_;
52
53 const Manifold &space() const { return *space_; }
54
56 const ManifoldPtr &state, const Model &model, const Vector3s &gravity,
57 const std::vector<bool> &contact_states,
58 const std::vector<pinocchio::FrameIndex> &contact_ids,
59 const int force_size);
60
61 void forward(const ConstVectorRef &x, const ConstVectorRef &u,
62 BaseData &data) const;
63 void dForward(const ConstVectorRef &x, const ConstVectorRef &u,
64 BaseData &data) const;
65
66 shared_ptr<ContDataAbstract> createData() const;
67};
68
69template <typename Scalar> struct KinodynamicsFwdDataTpl : ODEDataTpl<Scalar> {
70 using Base = ODEDataTpl<Scalar>;
71 using PinData = pinocchio::DataTpl<Scalar>;
72 using VectorXs = typename math_types<Scalar>::VectorXs;
73 using Matrix6Xs = typename math_types<Scalar>::Matrix6Xs;
74 using Matrix3Xs = typename math_types<Scalar>::Matrix3Xs;
75 using Matrix3s = Eigen::Matrix<Scalar, 3, 3>;
76 using Matrix6s = Eigen::Matrix<Scalar, 6, 6>;
77 using Vector6s = Eigen::Matrix<Scalar, 6, 1>;
78
89
93 Eigen::PartialPivLU<Eigen::Matrix<Scalar, 6, 6>> PivLU_;
94
95 KinodynamicsFwdDataTpl(const KinodynamicsFwdDynamicsTpl<Scalar> *model);
96};
97
98} // namespace dynamics
99} // namespace aligator
100
101#include "aligator/modelling/dynamics/kinodynamics-fwd.hxx"
Main package namespace.
Defines a class representing ODEs.
typename math_types< Scalar >::Matrix6Xs Matrix6Xs
KinodynamicsFwdDataTpl(const KinodynamicsFwdDynamicsTpl< Scalar > *model)
typename math_types< Scalar >::VectorXs VectorXs
Eigen::PartialPivLU< Eigen::Matrix< Scalar, 6, 6 > > PivLU_
typename math_types< Scalar >::Matrix3Xs Matrix3Xs
Nonlinear centroidal and full kinematics forward dynamics.
proxsuite::nlp::MultibodyPhaseSpace< Scalar > Manifold
void dForward(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
Evaluate the vector field Jacobians.
std::vector< pinocchio::FrameIndex > contact_ids_
void forward(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const
Evaluate the ODE vector field: this returns the value of .
shared_ptr< ContDataAbstract > createData() const
Create a data holder instance.
KinodynamicsFwdDynamicsTpl(const ManifoldPtr &state, const Model &model, const Vector3s &gravity, const std::vector< bool > &contact_states, const std::vector< pinocchio::FrameIndex > &contact_ids, const int force_size)
Base class for ODE dynamics .