aligator
0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Toggle main menu visibility
Loading...
Searching...
No Matches
explicit-dynamics.hpp
Go to the documentation of this file.
1
3
#pragma once
4
5
#include "
aligator/context.hpp
"
6
#include "
aligator/core/manifold-base.hpp
"
7
#include "
aligator/third-party/polymorphic_cxx14.h
"
8
9
#include <fmt/format.h>
10
11
namespace
aligator
{
12
using
xyz::polymorphic;
13
18
// are \f[ \bar{f}(x_k, u_k, x_{k+1}) = f(x_k, u_k) \ominus
19
// x_{k+1}. \f]
21
template
<
typename
_Scalar>
struct
ExplicitDynamicsModelTpl
{
22
using
Scalar
= _Scalar;
23
ALIGATOR_DYNAMIC_TYPEDEFS
(
Scalar
);
24
using
Data
=
ExplicitDynamicsDataTpl<Scalar>
;
25
using
Manifold
=
ManifoldAbstractTpl<Scalar>
;
26
27
static
constexpr
bool
is_explicit
=
true
;
28
30
ExplicitDynamicsModelTpl
(
const
polymorphic<Manifold> &
space
,
const
int
nu
)
31
:
space_
(
space
)
32
,
space_next_
(
space
)
33
,
nu
(
nu
) {}
34
35
const
Manifold
&
space
()
const
{
return
*
space_
; }
36
const
Manifold
&
space_next
()
const
{
return
*
space_next_
; }
37
38
int
nx1
()
const
{
return
space_
->nx(); }
39
int
ndx1
()
const
{
return
space_
->ndx(); }
40
int
nx2
()
const
{
return
space_next_
->nx(); }
41
int
ndx2
()
const
{
return
space_next_
->ndx(); }
42
44
void
virtual
forward
(
const
ConstVectorRef &x,
const
ConstVectorRef &u,
45
Data
&data)
const
= 0;
46
48
void
virtual
dForward
(
const
ConstVectorRef &x,
const
ConstVectorRef &u,
49
Data
&data)
const
= 0;
50
51
virtual
shared_ptr<Data>
createData
()
const
{
52
return
std::make_shared<Data>(*
this
);
53
}
54
55
virtual
~ExplicitDynamicsModelTpl
() =
default
;
56
57
polymorphic<Manifold>
space_
;
58
polymorphic<Manifold>
space_next_
;
59
int
nu
;
60
};
61
64
template
<
typename
_Scalar>
struct
ExplicitDynamicsDataTpl
{
65
protected
:
66
int
ndx1
,
nu
,
ndx2
;
67
68
ExplicitDynamicsDataTpl
(
int
ndx1
,
int
nu
,
int
nx2,
int
ndx2
)
69
:
ndx1
(
ndx1
)
70
,
nu
(
nu
)
71
,
ndx2
(
ndx2
)
72
,
xnext_
(nx2)
73
,
jac_buffer_
(
ndx2
,
ndx1
+
nu
)
74
,
Jtmp_xnext
(
ndx2
,
ndx2
)
75
,
Hxx_
(
ndx1
,
ndx1
)
76
,
Hxu_
(
ndx1
,
nu
)
77
,
Huu_
(
nu
,
nu
) {
78
xnext_
.setZero();
79
jac_buffer_
.setZero();
80
Jtmp_xnext
.setZero();
81
Hxx_
.setZero();
82
Hxu_
.setZero();
83
Huu_
.setZero();
84
}
85
86
public
:
87
using
Scalar
= _Scalar;
88
using
Model
=
ExplicitDynamicsModelTpl<Scalar>
;
89
ALIGATOR_DYNAMIC_TYPEDEFS
(
Scalar
);
91
VectorXs
xnext_
;
92
// Jacobians
93
MatrixXs
jac_buffer_
;
94
MatrixXs
Jtmp_xnext
;
95
96
// Vector-Hessian products
97
MatrixXs
Hxx_
;
98
MatrixXs
Hxu_
;
99
MatrixXs
Huu_
;
100
101
auto
Jx
() {
return
jac_buffer_
.leftCols(
ndx1
); }
102
auto
Jx
()
const
{
return
jac_buffer_
.leftCols(
ndx1
); }
103
auto
Ju
() {
return
jac_buffer_
.rightCols(
nu
); }
104
auto
Ju
()
const
{
return
jac_buffer_
.rightCols(
nu
); }
105
106
explicit
ExplicitDynamicsDataTpl
(
const
Model
&model)
107
:
ExplicitDynamicsDataTpl
(model.
ndx1
(), model.
nu
, model.nx2(),
108
model.
ndx2
()) {
109
xnext_
= model.
space
().neutral();
110
}
111
112
virtual
~ExplicitDynamicsDataTpl
() =
default
;
113
114
friend
std::ostream &
operator<<
(std::ostream &oss,
115
const
ExplicitDynamicsDataTpl
&self) {
116
oss <<
"ExplicitDynamicsData { "
;
117
oss << fmt::format(
"ndx: {:d}, "
, self.
ndx1
);
118
oss << fmt::format(
"nu: {:d}"
, self.
nu
);
119
oss <<
" }"
;
120
return
oss;
121
}
122
};
123
124
#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
125
extern
template
struct
ExplicitDynamicsModelTpl<context::Scalar>;
126
extern
template
struct
ExplicitDynamicsDataTpl<context::Scalar>;
127
#endif
128
}
// namespace aligator
context.hpp
manifold-base.hpp
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
polymorphic_cxx14.h
aligator::ExplicitDynamicsDataTpl
Specific data struct for explicit dynamics ExplicitDynamicsModelTpl.
Definition
explicit-dynamics.hpp:64
aligator::ExplicitDynamicsDataTpl::ExplicitDynamicsDataTpl
ExplicitDynamicsDataTpl(int ndx1, int nu, int nx2, int ndx2)
Definition
explicit-dynamics.hpp:68
aligator::ExplicitDynamicsDataTpl::ExplicitDynamicsDataTpl
ExplicitDynamicsDataTpl(const Model &model)
Definition
explicit-dynamics.hpp:106
aligator::ExplicitDynamicsDataTpl< Scalar >::Hxx_
MatrixXs Hxx_
Definition
explicit-dynamics.hpp:97
aligator::ExplicitDynamicsDataTpl::Ju
auto Ju()
Definition
explicit-dynamics.hpp:103
aligator::ExplicitDynamicsDataTpl< Scalar >::Hxu_
MatrixXs Hxu_
Definition
explicit-dynamics.hpp:98
aligator::ExplicitDynamicsDataTpl< Scalar >::Model
ExplicitDynamicsModelTpl< Scalar > Model
Definition
explicit-dynamics.hpp:88
aligator::ExplicitDynamicsDataTpl::Jx
auto Jx() const
Definition
explicit-dynamics.hpp:102
aligator::ExplicitDynamicsDataTpl< Scalar >::ndx1
int ndx1
Definition
explicit-dynamics.hpp:66
aligator::ExplicitDynamicsDataTpl< Scalar >::Huu_
MatrixXs Huu_
Definition
explicit-dynamics.hpp:99
aligator::ExplicitDynamicsDataTpl::Jx
auto Jx()
Definition
explicit-dynamics.hpp:101
aligator::ExplicitDynamicsDataTpl< Scalar >::Jtmp_xnext
MatrixXs Jtmp_xnext
Definition
explicit-dynamics.hpp:94
aligator::ExplicitDynamicsDataTpl::operator<<
friend std::ostream & operator<<(std::ostream &oss, const ExplicitDynamicsDataTpl &self)
Definition
explicit-dynamics.hpp:114
aligator::ExplicitDynamicsDataTpl::~ExplicitDynamicsDataTpl
virtual ~ExplicitDynamicsDataTpl()=default
aligator::ExplicitDynamicsDataTpl< Scalar >::xnext_
VectorXs xnext_
Definition
explicit-dynamics.hpp:91
aligator::ExplicitDynamicsDataTpl< Scalar >::nu
int nu
Definition
explicit-dynamics.hpp:66
aligator::ExplicitDynamicsDataTpl::ALIGATOR_DYNAMIC_TYPEDEFS
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
aligator::ExplicitDynamicsDataTpl< Scalar >::ndx2
int ndx2
Definition
explicit-dynamics.hpp:66
aligator::ExplicitDynamicsDataTpl< Scalar >::jac_buffer_
MatrixXs jac_buffer_
Definition
explicit-dynamics.hpp:93
aligator::ExplicitDynamicsDataTpl::Ju
auto Ju() const
Definition
explicit-dynamics.hpp:104
aligator::ExplicitDynamicsDataTpl< Scalar >::Scalar
Scalar Scalar
Definition
explicit-dynamics.hpp:87
aligator::ExplicitDynamicsModelTpl
Explicit forward dynamics model .
Definition
explicit-dynamics.hpp:21
aligator::ExplicitDynamicsModelTpl::space_next
const Manifold & space_next() const
Definition
explicit-dynamics.hpp:36
aligator::ExplicitDynamicsModelTpl::ndx2
int ndx2() const
Definition
explicit-dynamics.hpp:41
aligator::ExplicitDynamicsModelTpl< Scalar >::Data
ExplicitDynamicsDataTpl< Scalar > Data
Definition
explicit-dynamics.hpp:24
aligator::ExplicitDynamicsModelTpl< Scalar >::is_explicit
static constexpr bool is_explicit
Definition
explicit-dynamics.hpp:27
aligator::ExplicitDynamicsModelTpl< Scalar >::Scalar
Scalar Scalar
Definition
explicit-dynamics.hpp:22
aligator::ExplicitDynamicsModelTpl::~ExplicitDynamicsModelTpl
virtual ~ExplicitDynamicsModelTpl()=default
aligator::ExplicitDynamicsModelTpl::forward
virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const =0
Evaluate the forward discrete dynamics.
aligator::ExplicitDynamicsModelTpl::createData
virtual shared_ptr< Data > createData() const
Definition
explicit-dynamics.hpp:51
aligator::ExplicitDynamicsModelTpl< Scalar >::space_next_
polymorphic< Manifold > space_next_
Definition
explicit-dynamics.hpp:58
aligator::ExplicitDynamicsModelTpl< Scalar >::Manifold
ManifoldAbstractTpl< Scalar > Manifold
Definition
explicit-dynamics.hpp:25
aligator::ExplicitDynamicsModelTpl< Scalar >::space_
polymorphic< Manifold > space_
Definition
explicit-dynamics.hpp:57
aligator::ExplicitDynamicsModelTpl::ExplicitDynamicsModelTpl
ExplicitDynamicsModelTpl(const polymorphic< Manifold > &space, const int nu)
Constructor requires providing the next state's manifold.
Definition
explicit-dynamics.hpp:30
aligator::ExplicitDynamicsModelTpl::ALIGATOR_DYNAMIC_TYPEDEFS
ALIGATOR_DYNAMIC_TYPEDEFS(Scalar)
aligator::ExplicitDynamicsModelTpl::nx1
int nx1() const
Definition
explicit-dynamics.hpp:38
aligator::ExplicitDynamicsModelTpl::dForward
virtual void dForward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const =0
Compute the Jacobians of the forward dynamics.
aligator::ExplicitDynamicsModelTpl::nx2
int nx2() const
Definition
explicit-dynamics.hpp:40
aligator::ExplicitDynamicsModelTpl::ndx1
int ndx1() const
Definition
explicit-dynamics.hpp:39
aligator::ExplicitDynamicsModelTpl< Scalar >::space
const Manifold & space() const
Definition
explicit-dynamics.hpp:35
aligator::ExplicitDynamicsModelTpl< Scalar >::nu
int nu
Definition
explicit-dynamics.hpp:59
aligator::ManifoldAbstractTpl
Base class for manifolds, to use in cost funcs, solvers...
Definition
manifold-base.hpp:11
include
aligator
core
explicit-dynamics.hpp
Generated by
1.17.0