aligator
0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Toggle main menu visibility
Loading...
Searching...
No Matches
expose-explicit-dynamics.cpp
Go to the documentation of this file.
1
3
#include "
aligator/python/fwd.hpp
"
4
#include "
aligator/python/visitors.hpp
"
5
#include "
aligator/python/modelling/explicit-dynamics.hpp
"
6
#include "
aligator/modelling/linear-discrete-dynamics.hpp
"
7
8
namespace
aligator
{
9
namespace
python
{
10
11
using
context::ExplicitDynamics
;
12
using
context::ExplicitDynamicsData
;
13
using
context::Scalar
;
14
using
PolyManifold
= xyz::polymorphic<context::Manifold>;
15
static
PolymorphicMultiBaseVisitor<ExplicitDynamics>
exp_dynamics_visitor
;
16
17
// fwd declaration
18
void
exposeExplicitBase
();
19
void
exposeLinearDiscreteDynamics
();
20
// fwd declaration, see expose-direct-sum.cpp
21
void
exposeExplicitDynDirectSum
();
22
24
25
void
exposeExplicitDynamics
() {
26
exposeExplicitBase
();
27
exposeLinearDiscreteDynamics
();
28
exposeExplicitDynDirectSum
();
29
}
30
31
struct
ExplicitDataWrapper
:
ExplicitDynamicsData
,
32
bp::wrapper<ExplicitDynamicsData> {
33
using
ExplicitDynamicsData::ExplicitDynamicsData;
34
};
35
36
void
exposeExplicitBase
() {
37
38
using
PolyExplicitDynamics = xyz::polymorphic<ExplicitDynamics>;
39
StdVectorPythonVisitor<std::vector<PolyExplicitDynamics>,
true
>::expose(
40
"StdVec_ExplicitDynamics"
,
41
eigenpy::details::overload_base_get_item_for_std_vector<
42
std::vector<PolyExplicitDynamics>>{});
43
44
register_polymorphic_to_python<PolyExplicitDynamics>
();
45
46
bp::class_<PyExplicitDynamics<>, boost::noncopyable>(
47
"ExplicitDynamicsModel"
,
"Base class for explicit dynamics."
,
48
bp::init<const PolyManifold &, const int>(
49
"Constructor with state space and control dimension."
,
50
(
"self"
_a,
"space"
,
"nu"
)))
51
.def(
"forward"
, bp::pure_virtual(&
ExplicitDynamics::forward
),
52
(
"self"
_a,
"x"
,
"u"
,
"data"
),
"Call for forward discrete dynamics."
)
53
.def(
"dForward"
, bp::pure_virtual(&
ExplicitDynamics::dForward
),
54
(
"self"
_a,
"x"
,
"u"
,
"data"
),
55
"Compute the derivatives of forward discrete dynamics."
)
56
.add_property(
"nx1"
, &
ExplicitDynamics::nx1
)
57
.add_property(
"ndx1"
, &
ExplicitDynamics::ndx1
)
58
.add_property(
"nx2"
, &
ExplicitDynamics::nx2
)
59
.add_property(
"ndx2"
, &
ExplicitDynamics::ndx2
)
60
.def_readonly(
"nu"
, &
ExplicitDynamics::nu
)
61
.def_readonly(
"space"
, &
ExplicitDynamics::space_
)
62
.def_readonly(
"space_next"
, &
ExplicitDynamics::space_next_
)
63
.def(
CreateDataPolymorphicPythonVisitor
<
ExplicitDynamics
,
64
PyExplicitDynamics<>
>())
65
.def(
exp_dynamics_visitor
)
66
.enable_pickling_(
true
);
67
68
bp::register_ptr_to_python<shared_ptr<ExplicitDynamicsData>>();
69
70
bp::class_<ExplicitDataWrapper, boost::noncopyable>(
71
"ExplicitDynamicsData"
,
"Data struct for explicit dynamics models."
,
72
bp::no_init)
73
.def_readwrite(
"xnext"
, &
ExplicitDataWrapper::xnext_
)
74
.def_readwrite(
"jac_buffer"
, &
ExplicitDataWrapper::jac_buffer_
)
75
.add_property(
76
"Jx"
,
77
+[](
ExplicitDynamicsData
&self) -> context::MatrixRef {
78
return
self.
Jx
();
79
})
80
.add_property(
81
"Ju"
,
82
+[](
ExplicitDynamicsData
&self) -> context::MatrixRef {
83
return
self.
Ju
();
84
})
85
.def(bp::init<const ExplicitDynamics &>((
"self"
_a,
"model"
)))
86
.def(
PrintableVisitor<ExplicitDynamicsData>
());
87
}
88
89
void
exposeLinearDiscreteDynamics
() {
90
using
context::MatrixXs;
91
using
context::VectorXs;
92
using namespace
aligator::dynamics
;
93
94
bp::class_<LinearDiscreteDynamicsTpl<Scalar>,
95
bp::bases<context::ExplicitDynamics>>(
96
"LinearDiscreteDynamics"
,
97
"Linear discrete dynamics :math:`x[t+1] = Ax[t] + Bu[t] + c[t]` in "
98
"Euclidean space, or "
99
"on the tangent state space."
,
100
bp::init<const MatrixXs &, const MatrixXs &, const VectorXs &>(
101
(
"self"
_a,
"A"
,
"B"
,
"c"
)))
102
.def_readonly(
"A"
, &
LinearDiscreteDynamicsTpl<Scalar>::A_
)
103
.def_readonly(
"B"
, &
LinearDiscreteDynamicsTpl<Scalar>::B_
)
104
.def_readonly(
"c"
, &
LinearDiscreteDynamicsTpl<Scalar>::c_
)
105
.def(
exp_dynamics_visitor
);
106
}
107
108
}
// namespace python
109
}
// namespace aligator
fwd.hpp
explicit-dynamics.hpp
linear-discrete-dynamics.hpp
aligator::context::ExplicitDynamics
ExplicitDynamicsModelTpl< Scalar > ExplicitDynamics
Definition
context.hpp:38
aligator::context::Scalar
double Scalar
Definition
context.hpp:9
aligator::context::ExplicitDynamicsData
ExplicitDynamicsDataTpl< Scalar > ExplicitDynamicsData
Definition
context.hpp:39
aligator::dynamics
Namespace for modelling system dynamics.
Definition
centroidal-fwd.hpp:10
aligator::python
The Python bindings.
Definition
blk-matrix.hpp:7
aligator::python::PolyManifold
xyz::polymorphic< Manifold > PolyManifold
Definition
expose-manifold.cpp:19
aligator::python::exp_dynamics_visitor
static PolymorphicMultiBaseVisitor< ExplicitDynamics > exp_dynamics_visitor
Definition
expose-explicit-dynamics.cpp:15
aligator::python::exposeExplicitDynamics
void exposeExplicitDynamics()
Definition
expose-explicit-dynamics.cpp:25
aligator::python::exposeExplicitBase
void exposeExplicitBase()
Definition
expose-explicit-dynamics.cpp:36
aligator::python::exposeExplicitDynDirectSum
void exposeExplicitDynDirectSum()
Definition
expose-direct-sum.cpp:15
aligator::python::register_polymorphic_to_python
void register_polymorphic_to_python()
Expose a polymorphic value type, e.g. xyz::polymorphic<T, A>.
Definition
polymorphic.hpp:23
aligator::python::exposeLinearDiscreteDynamics
void exposeLinearDiscreteDynamics()
Definition
expose-explicit-dynamics.cpp:89
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
aligator::ExplicitDynamicsDataTpl::Ju
auto Ju()
Definition
explicit-dynamics.hpp:103
aligator::ExplicitDynamicsDataTpl::Jx
auto Jx()
Definition
explicit-dynamics.hpp:101
aligator::ExplicitDynamicsDataTpl< Scalar >::xnext_
VectorXs xnext_
Definition
explicit-dynamics.hpp:91
aligator::ExplicitDynamicsDataTpl< Scalar >::jac_buffer_
MatrixXs jac_buffer_
Definition
explicit-dynamics.hpp:93
aligator::ExplicitDynamicsModelTpl< Scalar >::ndx2
int ndx2() const
Definition
explicit-dynamics.hpp:41
aligator::ExplicitDynamicsModelTpl< Scalar >::forward
virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const=0
aligator::ExplicitDynamicsModelTpl< Scalar >::space_next_
polymorphic< Manifold > space_next_
Definition
explicit-dynamics.hpp:58
aligator::ExplicitDynamicsModelTpl< Scalar >::space_
polymorphic< Manifold > space_
Definition
explicit-dynamics.hpp:57
aligator::ExplicitDynamicsModelTpl< Scalar >::nx1
int nx1() const
Definition
explicit-dynamics.hpp:38
aligator::ExplicitDynamicsModelTpl< Scalar >::dForward
virtual void dForward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const=0
aligator::ExplicitDynamicsModelTpl< Scalar >::nx2
int nx2() const
Definition
explicit-dynamics.hpp:40
aligator::ExplicitDynamicsModelTpl< Scalar >::ndx1
int ndx1() const
Definition
explicit-dynamics.hpp:39
aligator::ExplicitDynamicsModelTpl< Scalar >::nu
int nu
Definition
explicit-dynamics.hpp:59
aligator::dynamics::LinearDiscreteDynamicsTpl::c_
const VectorXs c_
Definition
linear-discrete-dynamics.hpp:17
aligator::dynamics::LinearDiscreteDynamicsTpl::B_
const MatrixXs B_
Definition
linear-discrete-dynamics.hpp:16
aligator::dynamics::LinearDiscreteDynamicsTpl::A_
const MatrixXs A_
Definition
linear-discrete-dynamics.hpp:15
aligator::python::CreateDataPolymorphicPythonVisitor
Definition
visitors.hpp:30
aligator::python::ExplicitDataWrapper
Definition
expose-explicit-dynamics.cpp:32
aligator::python::PolymorphicMultiBaseVisitor
Definition
polymorphic.hpp:107
aligator::python::PrintableVisitor
Definition
visitors.hpp:49
aligator::python::PyExplicitDynamics
Definition
explicit-dynamics.hpp:22
visitors.hpp
bindings
python
src
modelling
expose-explicit-dynamics.cpp
Generated by
1.17.0