9 #ifndef CROCODDYL_CORE_INTEGRATOR_EULER_HPP_
10 #define CROCODDYL_CORE_INTEGRATOR_EULER_HPP_
12 #include "crocoddyl/core/fwd.hpp"
13 #include "crocoddyl/core/action-base.hpp"
14 #include "crocoddyl/core/diff-action-base.hpp"
18 template <
typename _Scalar>
19 class IntegratedActionModelEulerTpl :
public ActionModelAbstractTpl<_Scalar> {
21 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
23 typedef _Scalar Scalar;
24 typedef MathBaseTpl<Scalar> MathBase;
25 typedef ActionModelAbstractTpl<Scalar> Base;
26 typedef IntegratedActionDataEulerTpl<Scalar> Data;
27 typedef ActionDataAbstractTpl<Scalar> ActionDataAbstract;
28 typedef DifferentialActionModelAbstractTpl<Scalar> DifferentialActionModelAbstract;
29 typedef typename MathBase::VectorXs VectorXs;
30 typedef typename MathBase::MatrixXs MatrixXs;
32 IntegratedActionModelEulerTpl(boost::shared_ptr<DifferentialActionModelAbstract> model,
33 const Scalar time_step = Scalar(1e-3),
const bool with_cost_residual =
true);
34 virtual ~IntegratedActionModelEulerTpl();
36 virtual void calc(
const boost::shared_ptr<ActionDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
37 const Eigen::Ref<const VectorXs>& u);
38 virtual void calcDiff(
const boost::shared_ptr<ActionDataAbstract>& data,
const Eigen::Ref<const VectorXs>& x,
39 const Eigen::Ref<const VectorXs>& u);
40 virtual boost::shared_ptr<ActionDataAbstract> createData();
41 virtual bool checkData(
const boost::shared_ptr<ActionDataAbstract>& data);
43 virtual void quasiStatic(
const boost::shared_ptr<ActionDataAbstract>& data, Eigen::Ref<VectorXs> u,
44 const Eigen::Ref<const VectorXs>& x,
const std::size_t maxiter = 100,
45 const Scalar tol = Scalar(1e-9));
47 const boost::shared_ptr<DifferentialActionModelAbstract>& get_differential()
const;
48 const Scalar get_dt()
const;
50 void set_dt(
const Scalar dt);
51 void set_differential(boost::shared_ptr<DifferentialActionModelAbstract> model);
56 template <
class Scalar>
57 friend std::ostream&
operator<<(std::ostream& os,
const IntegratedActionModelEulerTpl<Scalar>& problem);
69 boost::shared_ptr<DifferentialActionModelAbstract> differential_;
72 bool with_cost_residual_;
73 bool enable_integration_;
76 template <
typename _Scalar>
77 struct IntegratedActionDataEulerTpl :
public ActionDataAbstractTpl<_Scalar> {
78 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
80 typedef _Scalar Scalar;
81 typedef MathBaseTpl<Scalar> MathBase;
82 typedef ActionDataAbstractTpl<Scalar> Base;
83 typedef typename MathBase::VectorXs VectorXs;
84 typedef typename MathBase::MatrixXs MatrixXs;
86 template <
template <
typename Scalar>
class Model>
87 explicit IntegratedActionDataEulerTpl(Model<Scalar>*
const model) : Base(model) {
88 differential = model->get_differential()->createData();
89 const std::size_t ndx = model->get_state()->get_ndx();
90 dx = VectorXs::Zero(ndx);
92 virtual ~IntegratedActionDataEulerTpl() {}
94 boost::shared_ptr<DifferentialActionDataAbstractTpl<Scalar> > differential;
114 #include "crocoddyl/core/integrator/euler.hxx"
116 #endif // CROCODDYL_CORE_INTEGRATOR_EULER_HPP_