aligator  0.14.0
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#ifdef ALIGATOR_WITH_PINOCCHIO
7
8#include <Eigen/LU>
10#include <pinocchio/multibody/model.hpp>
11#include <pinocchio/multibody/data.hpp>
12
13namespace aligator {
14namespace dynamics {
15template <typename Scalar> struct KinodynamicsFwdDataTpl;
16
31template <typename _Scalar>
32struct KinodynamicsFwdDynamicsTpl : ODEAbstractTpl<_Scalar> {
33 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
34 using Scalar = _Scalar;
36 using Base = ODEAbstractTpl<Scalar>;
37 using BaseData = ContinuousDynamicsDataTpl<Scalar>;
38 using ContDataAbstract = ContinuousDynamicsDataTpl<Scalar>;
39 using Data = KinodynamicsFwdDataTpl<Scalar>;
40 using Manifold = MultibodyPhaseSpace<Scalar>;
41 using Model = pinocchio::ModelTpl<Scalar>;
42 using Matrix3s = Eigen::Matrix<Scalar, 3, 3>;
43
44 using Base::nu_;
45
46 Manifold space_;
47 Model pin_model_;
48 double mass_;
49 Vector3s gravity_;
50 int force_size_;
51
52 std::vector<bool> contact_states_;
53 std::vector<pinocchio::FrameIndex> contact_ids_;
54
55 const Manifold &space() const { return space_; }
56
57 KinodynamicsFwdDynamicsTpl(
58 const Manifold &state, const Model &model, const Vector3s &gravity,
59 const std::vector<bool> &contact_states,
60 const std::vector<pinocchio::FrameIndex> &contact_ids,
61 const int force_size);
62
63 void forward(const ConstVectorRef &x, const ConstVectorRef &u,
64 BaseData &data) const;
65 void dForward(const ConstVectorRef &x, const ConstVectorRef &u,
66 BaseData &data) const;
67
68 shared_ptr<ContDataAbstract> createData() const;
69};
70
71template <typename Scalar>
72struct KinodynamicsFwdDataTpl : ContinuousDynamicsDataTpl<Scalar> {
73 using Base = ContinuousDynamicsDataTpl<Scalar>;
74 using PinData = pinocchio::DataTpl<Scalar>;
75 using VectorXs = typename math_types<Scalar>::VectorXs;
76 using Matrix6Xs = typename math_types<Scalar>::Matrix6Xs;
77 using Matrix3Xs = typename math_types<Scalar>::Matrix3Xs;
78 using Matrix3s = Eigen::Matrix<Scalar, 3, 3>;
79 using Matrix6s = Eigen::Matrix<Scalar, 6, 6>;
80 using Vector6s = Eigen::Matrix<Scalar, 6, 1>;
81
82 PinData pin_data_;
83 Matrix6Xs dh_dq_;
84 Matrix6Xs dhdot_dq_;
85 Matrix6Xs dhdot_dv_;
86 Matrix6Xs dhdot_da_;
87 Matrix6Xs temp1_;
88 Matrix3Xs temp2_;
89 Matrix6Xs fJf_;
90 VectorXs v0_;
91 VectorXs a0_;
92
93 Vector6s cforces_;
94 Matrix3s Jtemp_;
95 Matrix6s Agu_inv_;
96 Eigen::PartialPivLU<Eigen::Matrix<Scalar, 6, 6>> PivLU_;
97
98 KinodynamicsFwdDataTpl(const KinodynamicsFwdDynamicsTpl<Scalar> *model);
99};
100
101#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
102extern template struct KinodynamicsFwdDynamicsTpl<context::Scalar>;
103extern template struct KinodynamicsFwdDataTpl<context::Scalar>;
104#endif
105
106} // namespace dynamics
107} // namespace aligator
108
109#endif
#define ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
Definition math.hpp:8
::aligator::context::Scalar Scalar
Definition context.hpp:14
ManifoldAbstractTpl< Scalar > Manifold
Definition context.hpp:14
pinocchio::DataTpl< Scalar, Options > PinData
Definition context.hpp:13
Namespace for modelling system dynamics.
typename math_types< Scalar >::Vector3s Vector3s
Main package namespace.
Defines a class representing ODEs.
Data struct for ContinuousDynamicsAbstractTpl.
Base class for ODE dynamics .