aligator  0.15.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Loading...
Searching...
No Matches
linear-ode.hpp
Go to the documentation of this file.
1
2#pragma once
3
6
7namespace aligator {
8namespace dynamics {
14template <typename _Scalar> struct LinearODETpl : ODEAbstractTpl<_Scalar> {
15 using Scalar = _Scalar;
21
22 MatrixXs A_, B_;
23 VectorXs c_;
24
27 LinearODETpl(const ManifoldPtr &space, const MatrixXs &A, const MatrixXs &B,
28 const VectorXs &c)
29 : Base(space, (int)B.cols())
30 , A_(A)
31 , B_(B)
32 , c_(c) {
33 if (A.cols() != space->ndx()) {
34 ALIGATOR_DOMAIN_ERROR(
35 "A.cols() should be equal to space.ndx()! (got {:d} and {:d})",
36 A.cols(), space->ndx());
37 }
38 bool rows_ok = (A.rows() == space->ndx()) && (B.rows() == space->ndx()) &&
39 (c.rows() == space->ndx());
40 if (!rows_ok) {
41 ALIGATOR_DOMAIN_ERROR("Input matrices have wrong number of rows.");
42 }
43 }
44
49 LinearODETpl(const MatrixXs &A, const MatrixXs &B, const VectorXs &c)
50 : LinearODETpl(xyz::polymorphic<Manifold>(
51 ::aligator::VectorSpaceTpl<Scalar>((int)A.rows())),
52 A, B, c) {}
53
54 void forward(const ConstVectorRef &x, const ConstVectorRef &u,
55 ODEData &data) const;
56 void dForward(const ConstVectorRef &x, const ConstVectorRef &u,
57 ODEData &data) const;
58 virtual shared_ptr<ContinuousDynamicsDataTpl<Scalar>> createData() const {
59 auto data = Base::createData();
60 data->Jx_ = A_;
61 data->Ju_ = B_;
62 return data;
63 }
64};
65
66} // namespace dynamics
67} // namespace aligator
68
69#include "aligator/modelling/dynamics/linear-ode.hxx"
70
71#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
72#include "aligator/modelling/dynamics/linear-ode.txx"
73#endif
#define ALIGATOR_DOMAIN_ERROR(...)
Namespace for modelling system dynamics.
Main package namespace.
Definition fwd.hpp:52
Defines a class representing ODEs.
Base class for manifolds, to use in cost funcs, solvers...
Standard Euclidean vector space.
const Manifold & space() const
Return a reference to the state space.
Data struct for ContinuousDynamicsAbstractTpl.
ODEAbstractTpl< Scalar > Base
ManifoldAbstractTpl< Scalar > Manifold
xyz::polymorphic< Manifold > ManifoldPtr
LinearODETpl(const MatrixXs &A, const MatrixXs &B, const VectorXs &c)
void forward(const ConstVectorRef &x, const ConstVectorRef &u, ODEData &data) const
Evaluate the ODE vector field: this returns the value of .
virtual shared_ptr< ContinuousDynamicsDataTpl< Scalar > > createData() const
Create a data holder instance.
void dForward(const ConstVectorRef &x, const ConstVectorRef &u, ODEData &data) const
Evaluate the vector field Jacobians.
LinearODETpl(const ManifoldPtr &space, const MatrixXs &A, const MatrixXs &B, const VectorXs &c)
Standard constructor with state space, matrices and constant term .
ContinuousDynamicsDataTpl< Scalar > ODEData
Base class for ODE dynamics .