aligator 0.19.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
7
8namespace aligator {
9namespace dynamics {
15template <typename _Scalar> struct LinearODETpl : ODEAbstractTpl<_Scalar> {
16 using Scalar = _Scalar;
21 using ManifoldPtr = xyz::polymorphic<Manifold>;
22
23 MatrixXs A_, B_;
24 VectorXs c_;
25
28 LinearODETpl(const ManifoldPtr &space, const MatrixXs &A, const MatrixXs &B,
29 const VectorXs &c)
30 : Base(space, (int)B.cols())
31 , A_(A)
32 , B_(B)
33 , c_(c) {
34 if (A.cols() != space->ndx()) {
35 ALIGATOR_DOMAIN_ERROR(
36 "A.cols() should be equal to space.ndx()! (got {:d} and {:d})",
37 A.cols(), space->ndx());
38 }
39 bool rows_ok = (A.rows() == space->ndx()) && (B.rows() == space->ndx()) &&
40 (c.rows() == space->ndx());
41 if (!rows_ok) {
42 ALIGATOR_DOMAIN_ERROR("Input matrices have wrong number of rows.");
43 }
44 }
45
50 LinearODETpl(const MatrixXs &A, const MatrixXs &B, const VectorXs &c)
51 : LinearODETpl(xyz::polymorphic<Manifold>(
52 ::aligator::VectorSpaceTpl<Scalar>((int)A.rows())),
53 A, B, c) {}
54
55 void forward(const ConstVectorRef &x, const ConstVectorRef &u,
56 ODEData &data) const;
57 void dForward(const ConstVectorRef &x, const ConstVectorRef &u,
58 ODEData &data) const;
59 virtual shared_ptr<ContinuousDynamicsDataTpl<Scalar>> createData() const {
60 auto data = Base::createData();
61 data->Jx_ = A_;
62 data->Ju_ = B_;
63 return data;
64 }
65};
66
67#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
68extern template struct LinearODETpl<context::Scalar>;
69#endif
70
71} // namespace dynamics
72} // namespace aligator
73
74#include "aligator/modelling/dynamics/linear-ode.hxx"
#define ALIGATOR_DOMAIN_ERROR(...)
Namespace for modelling system dynamics.
Main package namespace.
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 .