aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
expose-explicit-dynamics.cpp
Go to the documentation of this file.
1
6
7namespace aligator {
8namespace python {
9
13using context::Scalar;
14using ManifoldPtr = shared_ptr<context::Manifold>;
15using internal::PyExplicitDynamics;
16
17// fwd declaration
20// fwd declaration, see expose-direct-sum.cpp
22
24
30
31struct ExplicitDataWrapper : ExplicitDynamicsData,
32 bp::wrapper<ExplicitDynamicsData> {
33 using ExplicitDynamicsData::ExplicitDynamicsData;
34};
35
37
38 StdVectorPythonVisitor<std::vector<shared_ptr<ExplicitDynamics>>,
39 true>::expose("StdVec_ExplicitDynamics");
40
41 bp::class_<PyExplicitDynamics<>, bp::bases<DynamicsModel>,
42 boost::noncopyable>(
43 "ExplicitDynamicsModel", "Base class for explicit dynamics.",
44 bp::init<ManifoldPtr, const int>(
45 "Constructor with state space and control dimension.",
46 bp::args("self", "space", "nu")))
47 .def("forward", bp::pure_virtual(&ExplicitDynamics::forward),
48 bp::args("self", "x", "u", "data"),
49 "Call for forward discrete dynamics.")
50 .def("dForward", bp::pure_virtual(&ExplicitDynamics::dForward),
51 bp::args("self", "x", "u", "data"),
52 "Compute the derivatives of forward discrete dynamics.")
53 .def(CreateDataPolymorphicPythonVisitor<ExplicitDynamics,
54 PyExplicitDynamics<>>());
55
56 bp::register_ptr_to_python<shared_ptr<ExplicitDynamicsData>>();
57
58 bp::class_<ExplicitDataWrapper, bp::bases<context::StageFunctionData>,
59 boost::noncopyable>("ExplicitDynamicsData",
60 "Data struct for explicit dynamics models.",
61 bp::init<int, int, int, int>(bp::args(
62 "self", "ndx1", "nu", "nx2", "ndx2")))
63 .add_property(
64 "xnext",
65 bp::make_getter(&ExplicitDynamicsData::xnext_ref,
66 bp::return_value_policy<bp::return_by_value>()))
67 .add_property(
68 "dx", bp::make_getter(&ExplicitDynamicsData::dx_ref,
69 bp::return_value_policy<bp::return_by_value>()))
70 .def(PrintableVisitor<ExplicitDynamicsData>());
71}
72
74 using context::MatrixXs;
75 using context::VectorXs;
76 using namespace aligator::dynamics;
77
78 bp::class_<LinearDiscreteDynamicsTpl<Scalar>,
79 bp::bases<context::ExplicitDynamics>>(
80 "LinearDiscreteDynamics",
81 "Linear discrete dynamics :math:`x[t+1] = Ax[t] + Bu[t] + c[t]` in "
82 "Euclidean space, or "
83 "on the tangent state space.",
84 bp::init<const MatrixXs &, const MatrixXs &, const VectorXs &>(
85 bp::args("self", "A", "B", "c")))
86 .def_readonly("A", &LinearDiscreteDynamicsTpl<Scalar>::A_)
87 .def_readonly("B", &LinearDiscreteDynamicsTpl<Scalar>::B_)
88 .def_readonly("c", &LinearDiscreteDynamicsTpl<Scalar>::c_);
89}
90
91} // namespace python
92} // namespace aligator
DynamicsModelTpl< Scalar > DynamicsModel
Definition context.hpp:28
ExplicitDynamicsModelTpl< Scalar > ExplicitDynamics
Definition context.hpp:38
ExplicitDynamicsDataTpl< Scalar > ExplicitDynamicsData
Definition context.hpp:39
Namespace for modelling system dynamics.
shared_ptr< Manifold > ManifoldPtr
Main package namespace.