crocoddyl  1.4.0
Contact RObot COntrol by Differential DYnamic programming Library (Crocoddyl)
actuation-base.hpp
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2018-2020, LAAS-CNRS, University of Edinburgh
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
8 
9 #ifndef CROCODDYL_CORE_ACTUATION_BASE_HPP_
10 #define CROCODDYL_CORE_ACTUATION_BASE_HPP_
11 
12 #include <stdexcept>
13 #include <boost/shared_ptr.hpp>
14 #include <boost/make_shared.hpp>
15 
16 #include "crocoddyl/core/fwd.hpp"
17 #include "crocoddyl/core/mathbase.hpp"
18 #include "crocoddyl/core/state-base.hpp"
19 #include "crocoddyl/core/utils/to-string.hpp"
20 #include "crocoddyl/core/utils/exception.hpp"
21 
22 namespace crocoddyl {
23 
24 template <typename _Scalar>
26  public:
27  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
28 
29  typedef _Scalar Scalar;
33  typedef typename MathBase::VectorXs VectorXs;
34  typedef typename MathBase::MatrixXs MatrixXs;
35 
36  ActuationModelAbstractTpl(boost::shared_ptr<StateAbstract> state, const std::size_t& nu) : nu_(nu), state_(state) {
37  if (nu_ == 0) {
38  throw_pretty("Invalid argument: "
39  << "nu cannot be zero");
40  }
41  };
42  virtual ~ActuationModelAbstractTpl(){};
43 
44  virtual void calc(const boost::shared_ptr<ActuationDataAbstract>& data, const Eigen::Ref<const VectorXs>& x,
45  const Eigen::Ref<const VectorXs>& u) = 0;
46  virtual void calcDiff(const boost::shared_ptr<ActuationDataAbstract>& data, const Eigen::Ref<const VectorXs>& x,
47  const Eigen::Ref<const VectorXs>& u) = 0;
48  virtual boost::shared_ptr<ActuationDataAbstract> createData() {
49  return boost::allocate_shared<ActuationDataAbstract>(Eigen::aligned_allocator<ActuationDataAbstract>(), this);
50  };
51 
52  const std::size_t& get_nu() const { return nu_; };
53  const boost::shared_ptr<StateAbstract>& get_state() const { return state_; };
54 
55  protected:
56  std::size_t nu_;
57  boost::shared_ptr<StateAbstract> state_;
58 };
59 
60 template <typename _Scalar>
62  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
63 
64  typedef _Scalar Scalar;
66  typedef typename MathBase::VectorXs VectorXs;
67  typedef typename MathBase::MatrixXs MatrixXs;
68 
69  template <template <typename Scalar> class Model>
70  explicit ActuationDataAbstractTpl(Model<Scalar>* const model)
71  : tau(model->get_state()->get_nv()),
72  dtau_dx(model->get_state()->get_nv(), model->get_state()->get_ndx()),
73  dtau_du(model->get_state()->get_nv(), model->get_nu()) {
74  tau.setZero();
75  dtau_dx.setZero();
76  dtau_du.setZero();
77  }
78  virtual ~ActuationDataAbstractTpl() {}
79 
80  VectorXs tau;
81  MatrixXs dtau_dx;
82  MatrixXs dtau_du;
83 };
84 
85 } // namespace crocoddyl
86 
87 #endif // CROCODDYL_CORE_ACTUATION_BASE_HPP_
Abstract class for the state representation.
Definition: fwd.hpp:71