aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
explicit-dynamics.hpp
Go to the documentation of this file.
1
3#pragma once
4
6
7#include <proxsuite-nlp/manifold-base.hpp>
8
9#include <fmt/core.h>
10
11namespace aligator {
12
19template <typename _Scalar>
21public:
22 using Scalar = _Scalar;
24 using Base = DynamicsModelTpl<Scalar>;
25 using BaseData = DynamicsDataTpl<Scalar>;
26 using Data = ExplicitDynamicsDataTpl<Scalar>;
27 using Manifold = ManifoldAbstractTpl<Scalar>;
28 using ManifoldPtr = shared_ptr<Manifold>;
29
30 bool is_explicit() const { return true; }
31
33 ExplicitDynamicsModelTpl(ManifoldPtr next_state, const int nu);
34 virtual ~ExplicitDynamicsModelTpl() = default;
35
37 void virtual forward(const ConstVectorRef &x, const ConstVectorRef &u,
38 Data &data) const = 0;
39
41 void virtual dForward(const ConstVectorRef &x, const ConstVectorRef &u,
42 Data &data) const = 0;
43
44 void evaluate(const ConstVectorRef &x, const ConstVectorRef &u,
45 const ConstVectorRef &y, BaseData &data) const;
46
47 void computeJacobians(const ConstVectorRef &x, const ConstVectorRef &u,
48 const ConstVectorRef &y, BaseData &data) const;
49
50 virtual shared_ptr<BaseData> createData() const;
51};
52
55template <typename _Scalar>
57 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
58 using Scalar = _Scalar;
60 using Base = StageFunctionDataTpl<Scalar>;
61 using Base::Ju_;
62 using Base::Jx_;
63 using Base::Jy_;
64 using Base::value_;
66 VectorXs xnext_;
68 VectorXs dx_;
70 MatrixXs Jtmp_xnext;
71
72 VectorRef xnext_ref;
73 VectorRef dx_ref;
74
75 ExplicitDynamicsDataTpl(const int ndx1, const int nu, const int nx2,
76 const int ndx2);
77 virtual ~ExplicitDynamicsDataTpl() = default;
78
79 template <typename S>
80 friend std::ostream &operator<<(std::ostream &oss,
81 const ExplicitDynamicsDataTpl<S> &self);
82};
83
84template <typename S>
85std::ostream &operator<<(std::ostream &oss,
86 const ExplicitDynamicsDataTpl<S> &self) {
87 oss << "ExplicitDynamicsData { ";
88 oss << fmt::format("ndx: {:d}, ", self.ndx1);
89 oss << fmt::format("nu: {:d}", self.nu);
90 oss << " }";
91 return oss;
92}
93
94} // namespace aligator
95
96#include "aligator/core/explicit-dynamics.hxx"
97
98#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
99#include "aligator/core/explicit-dynamics.txx"
100#endif
Main package namespace.
std::ostream & operator<<(std::ostream &oss, const ExplicitDynamicsDataTpl< S > &self)
Dynamics model: describes system dynamics through an implicit relation .
Definition dynamics.hpp:18
ExplicitDynamicsDataTpl(const int ndx1, const int nu, const int nx2, const int ndx2)
VectorXs dx_
Difference vector between current state x and xnext_.
friend std::ostream & operator<<(std::ostream &oss, const ExplicitDynamicsDataTpl< S > &self)
virtual ~ExplicitDynamicsDataTpl()=default
Explicit forward dynamics model .
ExplicitDynamicsModelTpl(ManifoldPtr next_state, const int nu)
Constructor requires providing the next state's manifold.
virtual ~ExplicitDynamicsModelTpl()=default
virtual shared_ptr< BaseData > createData() const
Instantiate a Data object.
virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const =0
Evaluate the forward discrete dynamics.
ManifoldAbstractTpl< Scalar > Manifold
void evaluate(const ConstVectorRef &x, const ConstVectorRef &u, const ConstVectorRef &y, BaseData &data) const
void computeJacobians(const ConstVectorRef &x, const ConstVectorRef &u, const ConstVectorRef &y, BaseData &data) const
bool is_explicit() const
Check if this dynamics model is implicit or explicit.
virtual void dForward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const =0
Compute the Jacobians of the forward dynamics.
MatrixRef Jx_
Jacobian with respect to .
MatrixRef Ju_
Jacobian with respect to .
MatrixRef Jy_
Jacobian with respect to .
const int nu
Control dimension.