37 assert(A.rows() == x0.size());
38 assert(A.cols() == x0.size());
42 auto inc = [&
x](
int idx,
double inc) { x[idx] += inc; };
51 assert(B.rows() == x0.size());
52 assert(B.cols() == u0.size());
56 auto inc = [&u](
int idx,
double inc) { u[idx] += inc; };
63 #ifdef MESSAGE_SUPPORT 64 void SystemDynamicsInterface::toMessage(corbo::messages::SystemDynamics& message)
const 70 void SystemDynamicsInterface::fromMessage(
const corbo::messages::SystemDynamics& message, std::stringstream* issues)
72 if (message.deadtime() >= 0)
78 if (issues) *issues <<
"Deadtime must be >= 0" << std::endl;
std::shared_ptr< FiniteDifferencesInterface > _linearization_method
Eigen::VectorXd StateVector
void setLinearizationMethod(std::shared_ptr< FiniteDifferencesInterface > lin_method)
Set linearization method in case getLinearA() or getLinearB() are not overriden.
MatrixType A(a, *n, *n, *lda)
virtual void dynamics(const Eigen::Ref< const StateVector > &x, const Eigen::Ref< const ControlVector > &u, Eigen::Ref< StateVector > f) const =0
Evaluate the system dynamics equation.
Eigen::VectorXd ControlVector
virtual int getInputDimension() const =0
Return the plant input dimension (u)
virtual void getLinearA(const StateVector &x0, const ControlVector &u0, Eigen::MatrixXd &A) const
Return linear system matrix A (linearized system dynamics)
virtual int getStateDimension() const =0
Return state dimension (x)
MatrixType B(b, *n, *nrhs, *ldb)
SystemDynamicsInterface()
Default constructor.
virtual void getLinearB(const StateVector &x0, const ControlVector &u0, Eigen::MatrixXd &B) const
Return linear control input matrix B (linearized system dynamics)
Finite differences via forward differences.
#define PRINT_ERROR(msg)
Print msg-stream as error msg.