25 #ifndef SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_INTEGRATOR_INTERFACE_H_ 26 #define SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_INTEGRATOR_INTERFACE_H_ 34 #ifdef MESSAGE_SUPPORT 35 #include <corbo-communication/messages/numerics/explicit_integrators.pb.h> 161 using Ptr = std::shared_ptr<NumericalIntegratorExplicitInterface>;
162 using UPtr = std::unique_ptr<NumericalIntegratorExplicitInterface>;
164 using UnaryFunction =
const std::function<void(const Eigen::VectorXd&, Eigen::Ref<Eigen::VectorXd>)>;
220 solveIVP(x1, u1, dt, system, error);
234 std::vector<Eigen::VectorXd>& controls)
override 243 states.push_back(x1);
244 controls.push_back(u1);
248 Eigen::VectorXd x_cur = x1;
249 Eigen::VectorXd x_next(x1.size());
252 for (
int i = 0; i <
n; ++i)
254 states.push_back(x_cur);
255 controls.push_back(u1);
271 #ifdef MESSAGE_SUPPORT 272 virtual void toMessage(messages::ExplicitIntegrator& message)
const {}
275 virtual void fromMessage(
const messages::ExplicitIntegrator& message, std::stringstream* issues =
nullptr) {}
286 void toMessage(corbo::messages::DynamicsEval& message)
const override { toMessage(*message.mutable_integrator()); }
288 void fromMessage(
const corbo::messages::DynamicsEval& message, std::stringstream* issues =
nullptr)
override 290 if (message.has_integrator()) fromMessage(message.integrator());
296 #define FACTORY_REGISTER_EXPLICIT_INTEGRATOR(type) FACTORY_REGISTER_DYNAMICS_EVAL(type) 369 #endif // SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_INTEGRATOR_INTERFACE_H_ Eigen::VectorXd StateVector
#define PRINT_ERROR_NAMED(msg)
int getNumInRange() const
virtual void solveIVP(const Eigen::VectorXd &x1, double dt, const UnaryFunction &fun, Eigen::Ref< Eigen::VectorXd > x2)=0
Solution of the initial value problem.
Interface for numerical integrators (explicit and implicit)
DynamicsEvalInterface::Ptr getInstance() const override=0
Return a newly created shared instance of the implemented class.
virtual void initialize(int state_dim)
Allocate memory for a given state dimension.
virtual ~NumericalIntegratorExplicitInterface()
Virtual destructor.
std::shared_ptr< DynamicsEvalInterface > Ptr
virtual int getConvergenceOrder() const =0
Return the convergence order.
Eigen::VectorXd InputVector
void computeEqualityConstraint(const StateVector &x1, const InputVector &u1, const StateVector &x2, double dt, const SystemDynamicsInterface &system, Eigen::Ref< Eigen::VectorXd > error) override
Compute error between two consecutive (discrete) states.
const std::function< void(const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)> UnaryFunction
Interface class for solving and evaluating dynamics.
A matrix or vector expression mapping an existing expression.
std::unique_ptr< DynamicsEvalInterface > UPtr
Interface class for system dynamic equations.
bool interpolate(const Eigen::Ref< const Eigen::VectorXd > &x1, const Eigen::Ref< const Eigen::VectorXd > &u1, const Eigen::Ref< const Eigen::VectorXd > &, const Eigen::Ref< const Eigen::VectorXd > &, double dt, const SystemDynamicsInterface &system, const Range &range, std::vector< Eigen::VectorXd > &states, std::vector< Eigen::VectorXd > &controls) override
double getRemainder() const
void computeEqualityConstraint(const Eigen::Ref< const Eigen::VectorXd > &x1, const Eigen::Ref< const Eigen::VectorXd > &x2, double dt, const UnaryFunction &fun, Eigen::Ref< Eigen::VectorXd > error)