25 #ifndef SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_QUADRATURE_INTERFACE_H_ 26 #define SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_QUADRATURE_INTERFACE_H_ 34 #ifdef MESSAGE_SUPPORT 35 #include <corbo-communication/messages/numerics/quadrature.pb.h> 46 using Ptr = std::shared_ptr<QuadratureCollocationInterface>;
47 using UPtr = std::unique_ptr<QuadratureCollocationInterface>;
49 using UnaryFunction =
const std::function<void(const Eigen::VectorXd&, Eigen::Ref<Eigen::VectorXd>)>;
50 using BinaryFunction =
const std::function<void(const Eigen::VectorXd&, const Eigen::VectorXd&, Eigen::Ref<Eigen::VectorXd>)>;
74 virtual void quadrature(
const std::vector<const Eigen::VectorXd*>& x1_points,
const std::vector<const Eigen::VectorXd*>& u1_points,
79 virtual void quadrature(
const std::vector<const Eigen::VectorXd*>& x1_points,
const std::vector<const Eigen::VectorXd*>& u1_points,
80 const Eigen::VectorXd& u2,
const Eigen::VectorXd& x2,
double dt,
83 virtual bool interpolate(
const std::vector<const Eigen::VectorXd*>& x1_points,
const std::vector<const Eigen::VectorXd*>& u1_points,
84 const Eigen::VectorXd& u2,
const Eigen::VectorXd& x2,
double t1,
double dt,
double dt_interp,
107 std::vector<Eigen::VectorXd*>& intermediate_x, std::vector<Eigen::VectorXd*>& intermediate_u) = 0;
115 const std::vector<Eigen::VectorXd*>& intermediate_x,
const UnaryFunction& fun,
130 const std::vector<Eigen::VectorXd*>& intermediate_x,
const std::vector<Eigen::VectorXd*>& intermediate_u,
137 std::vector<Eigen::VectorXd*>& intermediate_u) = 0;
140 std::vector<Eigen::VectorXd*>& intermediate_u) = 0;
152 quadrature(x1, u1, x2, u2, dt, system, error);
166 std::vector<Eigen::VectorXd>& controls)
override = 0;
168 #ifdef MESSAGE_SUPPORT 169 virtual void toMessage(messages::Quadrature& message)
const {}
172 virtual void fromMessage(
const messages::Quadrature& message, std::stringstream* issues =
nullptr) {}
175 void toMessage(corbo::messages::Collocation& message)
const override { toMessage(*message.mutable_quadrature()); }
177 void fromMessage(
const corbo::messages::Collocation& message, std::stringstream* issues =
nullptr)
override 179 if (message.has_quadrature()) fromMessage(message.quadrature());
192 #define FACTORY_REGISTER_QUADRATURE_COLLOCATION(type) FACTORY_REGISTER_COLLOCATION(type) 196 #endif // SRC_NUMERICS_INCLUDE_CORBO_NUMERICS_QUADRATURE_INTERFACE_H_
virtual int getNumIntermediatePoints() const =0
Time Series (trajectory resp. sequence of values w.r.t. time)
virtual ~QuadratureCollocationInterface()
Virtual destructor.
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)
Eigen::VectorXd StateVector
void computeEqualityConstraint(const StateVector &x1, const InputVector &u1, const StateVector &x2, const InputVector &u2, double dt, const SystemDynamicsInterface &system, Eigen::Ref< Eigen::VectorXd > error)
virtual bool isSupportingCompressedStatesMode() const =0
const std::function< void(const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)> UnaryFunction
std::shared_ptr< DynamicsEvalInterface > Ptr
std::shared_ptr< CollocationInterface > Ptr
virtual void quadrature(const std::vector< const Eigen::VectorXd *> &x1_points, const std::vector< const Eigen::VectorXd *> &u1_points, const Eigen::VectorXd &u2, const Eigen::VectorXd &x2, double dt, const SystemDynamicsInterface &system, Eigen::Ref< Eigen::VectorXd > integral_value)=0
Allocate memory for a given state dimension.
std::unique_ptr< CollocationInterface > UPtr
virtual bool computeIntermediateControls(const Eigen::Ref< const Eigen::VectorXd > &u1, const Eigen::Ref< const Eigen::VectorXd > &u2, std::vector< Eigen::VectorXd *> &intermediate_u)=0
A matrix or vector expression mapping an existing expression.
Interface class for system dynamic equations.
virtual bool isIntermediateControlSubjectToOptim() const =0
virtual bool interpolate(const std::vector< const Eigen::VectorXd *> &x1_points, const std::vector< const Eigen::VectorXd *> &u1_points, const Eigen::VectorXd &u2, const Eigen::VectorXd &x2, double t1, double dt, double dt_interp, const SystemDynamicsInterface &system, bool skip_u2_x2, TimeSeries &ts_x, TimeSeries &ts_u)=0
DynamicsEvalInterface::Ptr getInstance() const override=0
Return a newly created shared instance of the implemented class.
virtual int getNumIntermediateStates() const =0
const std::function< void(const Eigen::VectorXd &, const Eigen::VectorXd &, Eigen::Ref< Eigen::VectorXd >)> BinaryFunction
Interface class for collocation based system dynamics evaluation.
void computeEqualityConstraint(const StateVector &x1, const InputVector &u1, const StateVector &x2, double dt, const SystemDynamicsInterface &system, Eigen::Ref< Eigen::VectorXd > error) override
Compute differentiation error (system dynamics)
virtual int getNumIntermediateControls() const =0
Eigen::VectorXd InputVector