aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
explicit-dynamics-direct-sum.hpp
Go to the documentation of this file.
1
3#pragma once
4
6#include <proxsuite-nlp/modelling/spaces/cartesian-product.hpp>
7
8namespace aligator {
9
15template <typename _Scalar>
17 using Scalar = _Scalar;
19 using Base = ExplicitDynamicsModelTpl<Scalar>;
20 using Manifold = ManifoldAbstractTpl<Scalar>;
21 using CartesianProduct = proxsuite::nlp::CartesianProductTpl<Scalar>;
22 using BaseData = ExplicitDynamicsDataTpl<Scalar>;
23
24 struct Data;
25
26 DirectSumExplicitDynamicsTpl(shared_ptr<Base> f, shared_ptr<Base> g)
27 : Base(get_product_space(*f, *g), f->nu + g->nu), f_(f), g_(g) {
28 product_space_ = static_cast<CartesianProduct *>(this->space_next_.get());
29 }
30
31 void forward(const ConstVectorRef &x, const ConstVectorRef &u,
32 BaseData &data) const override;
33
34 void dForward(const ConstVectorRef &x, const ConstVectorRef &u,
35 BaseData &data) const override;
36
37 shared_ptr<DynamicsDataTpl<Scalar>> createData() const override {
38 return std::make_shared<Data>(*this);
39 }
40
41 shared_ptr<Base> f_, g_;
42
43private:
44 static auto get_product_space(Base const &f, Base const &g);
45 static Data &data_cast(BaseData &data) { return static_cast<Data &>(data); }
46
49 CartesianProduct const *product_space_;
50};
51
52template <typename Scalar>
53auto directSum(shared_ptr<ExplicitDynamicsModelTpl<Scalar>> const &m1,
54 shared_ptr<ExplicitDynamicsModelTpl<Scalar>> const &m2) {
55 return std::make_shared<DirectSumExplicitDynamicsTpl<Scalar>>(m1, m2);
56}
57
58} // namespace aligator
59
60#include "aligator/modelling/explicit-dynamics-direct-sum.hxx"
61
62#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
63#include "./explicit-dynamics-direct-sum.txx"
64#endif
Main package namespace.
auto directSum(shared_ptr< CostAbstractTpl< Scalar > > const &c1, shared_ptr< CostAbstractTpl< Scalar > > const &c2)
DirectSumExplicitDynamicsTpl(shared_ptr< Base > f, shared_ptr< Base > g)
void forward(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const override
Evaluate the forward discrete dynamics.
proxsuite::nlp::CartesianProductTpl< Scalar > CartesianProduct
void dForward(const ConstVectorRef &x, const ConstVectorRef &u, BaseData &data) const override
Compute the Jacobians of the forward dynamics.
shared_ptr< DynamicsDataTpl< Scalar > > createData() const override
Instantiate a Data object.
ManifoldPtr space_next_
State space for the output of this dynamics model.
Definition dynamics.hpp:29
Explicit forward dynamics model .
const int nu
Control dimension.