aligator  0.16.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Loading...
Searching...
No Matches
expose-explicit-dynamics.cpp
Go to the documentation of this file.
1
7
8namespace aligator {
9namespace python {
10
13using context::Scalar;
14using PolyManifold = xyz::polymorphic<context::Manifold>;
16
17// fwd declaration
20// fwd declaration, see expose-direct-sum.cpp
22
24
30
32 bp::wrapper<ExplicitDynamicsData> {
33 using ExplicitDynamicsData::ExplicitDynamicsData;
34};
35
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
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_)
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")))
87}
88
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_)
106}
107
108} // namespace python
109} // namespace aligator
ExplicitDynamicsModelTpl< Scalar > ExplicitDynamics
Definition context.hpp:39
ExplicitDynamicsDataTpl< Scalar > ExplicitDynamicsData
Definition context.hpp:40
Namespace for modelling system dynamics.
The Python bindings.
Definition blk-matrix.hpp:5
xyz::polymorphic< Manifold > PolyManifold
static PolymorphicMultiBaseVisitor< ExplicitDynamics > exp_dynamics_visitor
void register_polymorphic_to_python()
Expose a polymorphic value type, e.g. xyz::polymorphic<T, A>.
Main package namespace.
virtual void forward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const=0
virtual void dForward(const ConstVectorRef &x, const ConstVectorRef &u, Data &data) const=0