tomlankhorst/control
ss.h
1 /*
2  * State-space
3  */
4 
5 #pragma once
6 
7 #include <Eigen/Dense>
8 
9 namespace control::system {
10 
23 template<typename T, size_t Nx, size_t Nu = 1, size_t Ny = 1>
24 class ss {
25  public:
26  using Tx = Eigen::Matrix<T, Nx, 1>;
27  using Tu = Eigen::Matrix<T, Nu, 1>;
28  using Ty = Eigen::Matrix<T, Ny, 1>;
29  using TA = Eigen::Matrix<T, Nx, Nx>;
30  using TB = Eigen::Matrix<T, Nx, Nu>;
31  using TC = Eigen::Matrix<T, Ny, Nx>;
32  using TD = Eigen::Matrix<T, Ny, Nu>;
33 
34  private:
35  const TA A;
36  const TB B;
37  const TC C;
38  const TD D;
39 
40  public:
41  EIGEN_MAKE_ALIGNED_OPERATOR_NEW;
50  ss(TA A, TB B, TC C, TD D) : A{A}, B{B}, C{C}, D{D} {
51  x = Tx::Zero();
52  y = Ty::Zero();
53  }
54 
58  Tx x;
59 
63  Ty y;
64 
71  Ty step(Tu u) {
72  x = A * x + B * u;
73  y = C * x + D * u;
74  return y;
75  }
76 };
77 
78 }
79 
Ty step(Tu u)
Definition: ss.h:71
Definition: ss.h:9
Definition: ss.h:24
ss(TA A, TB B, TC C, TD D)
Definition: ss.h:50