crocoddyl  1.9.0
Contact RObot COntrol by Differential DYnamic programming Library (Crocoddyl)
diff-action-base.hpp
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2021, LAAS-CNRS, University of Edinburgh, University of Oxford
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
8 
9 #ifndef CROCODDYL_CORE_DIFF_ACTION_BASE_HPP_
10 #define CROCODDYL_CORE_DIFF_ACTION_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/state-base.hpp"
18 #include "crocoddyl/core/utils/math.hpp"
19 
20 namespace crocoddyl {
21 
52 template <typename _Scalar>
54  public:
55  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
56 
57  typedef _Scalar Scalar;
61  typedef typename MathBase::VectorXs VectorXs;
62  typedef typename MathBase::MatrixXs MatrixXs;
63 
71  DifferentialActionModelAbstractTpl(boost::shared_ptr<StateAbstract> state, const std::size_t nu,
72  const std::size_t nr = 0);
74 
82  virtual void calc(const boost::shared_ptr<DifferentialActionDataAbstract>& data, const Eigen::Ref<const VectorXs>& x,
83  const Eigen::Ref<const VectorXs>& u) = 0;
84 
94  virtual void calc(const boost::shared_ptr<DifferentialActionDataAbstract>& data,
95  const Eigen::Ref<const VectorXs>& x);
96 
108  virtual void calcDiff(const boost::shared_ptr<DifferentialActionDataAbstract>& data,
109  const Eigen::Ref<const VectorXs>& x, const Eigen::Ref<const VectorXs>& u) = 0;
110 
120  virtual void calcDiff(const boost::shared_ptr<DifferentialActionDataAbstract>& data,
121  const Eigen::Ref<const VectorXs>& x);
122 
128  virtual boost::shared_ptr<DifferentialActionDataAbstract> createData();
129 
133  virtual bool checkData(const boost::shared_ptr<DifferentialActionDataAbstract>& data);
134 
147  virtual void quasiStatic(const boost::shared_ptr<DifferentialActionDataAbstract>& data, Eigen::Ref<VectorXs> u,
148  const Eigen::Ref<const VectorXs>& x, const std::size_t maxiter = 100,
149  const Scalar tol = Scalar(1e-9));
150 
162  VectorXs quasiStatic_x(const boost::shared_ptr<DifferentialActionDataAbstract>& data, const VectorXs& x,
163  const std::size_t maxiter = 100, const Scalar tol = Scalar(1e-9));
164 
168  std::size_t get_nu() const;
169 
173  std::size_t get_nr() const;
174 
178  const boost::shared_ptr<StateAbstract>& get_state() const;
179 
183  const VectorXs& get_u_lb() const;
184 
188  const VectorXs& get_u_ub() const;
189 
193  bool get_has_control_limits() const;
194 
198  void set_u_lb(const VectorXs& u_lb);
199 
203  void set_u_ub(const VectorXs& u_ub);
204 
208  template <class Scalar>
209  friend std::ostream& operator<<(std::ostream& os, const DifferentialActionModelAbstractTpl<Scalar>& model);
210 
216  virtual void print(std::ostream& os) const;
217 
218  protected:
219  std::size_t nu_;
220  std::size_t nr_;
221  boost::shared_ptr<StateAbstract> state_;
222  VectorXs unone_;
223  VectorXs u_lb_;
224  VectorXs u_ub_;
226 
227  void update_has_control_limits();
228 };
229 
230 template <typename _Scalar>
232  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
233 
234  typedef _Scalar Scalar;
236  typedef typename MathBase::VectorXs VectorXs;
237  typedef typename MathBase::MatrixXs MatrixXs;
238 
239  template <template <typename Scalar> class Model>
240  explicit DifferentialActionDataAbstractTpl(Model<Scalar>* const model)
241  : cost(0.),
242  xout(model->get_state()->get_nv()),
243  Fx(model->get_state()->get_nv(), model->get_state()->get_ndx()),
244  Fu(model->get_state()->get_nv(), model->get_nu()),
245  r(model->get_nr()),
246  Lx(model->get_state()->get_ndx()),
247  Lu(model->get_nu()),
248  Lxx(model->get_state()->get_ndx(), model->get_state()->get_ndx()),
249  Lxu(model->get_state()->get_ndx(), model->get_nu()),
250  Luu(model->get_nu(), model->get_nu()) {
251  xout.setZero();
252  r.setZero();
253  Fx.setZero();
254  Fu.setZero();
255  Lx.setZero();
256  Lu.setZero();
257  Lxx.setZero();
258  Lxu.setZero();
259  Luu.setZero();
260  }
262 
263  Scalar cost;
264  VectorXs xout;
265  MatrixXs Fx;
266  MatrixXs Fu;
267  VectorXs r;
268  VectorXs Lx;
269  VectorXs Lu;
270  MatrixXs Lxx;
271  MatrixXs Lxu;
272  MatrixXs Luu;
273 };
274 
275 } // namespace crocoddyl
276 
277 /* --- Details -------------------------------------------------------------- */
278 /* --- Details -------------------------------------------------------------- */
279 /* --- Details -------------------------------------------------------------- */
280 #include "crocoddyl/core/diff-action-base.hxx"
281 
282 #endif // CROCODDYL_CORE_DIFF_ACTION_BASE_HPP_
crocoddyl::DifferentialActionDataAbstractTpl::Lxu
MatrixXs Lxu
Hessian of the cost function.
Definition: diff-action-base.hpp:271
crocoddyl::DifferentialActionModelAbstractTpl::get_u_lb
const VectorXs & get_u_lb() const
Return the control lower bound.
crocoddyl::DifferentialActionModelAbstractTpl::nr_
std::size_t nr_
Dimension of the cost residual.
Definition: diff-action-base.hpp:220
crocoddyl::MathBaseTpl< Scalar >
crocoddyl::DifferentialActionModelAbstractTpl::checkData
virtual bool checkData(const boost::shared_ptr< DifferentialActionDataAbstract > &data)
Checks that a specific data belongs to this model.
crocoddyl::DifferentialActionModelAbstractTpl::get_nr
std::size_t get_nr() const
Return the dimension of the cost-residual vector.
crocoddyl::DifferentialActionModelAbstractTpl::calcDiff
virtual void calcDiff(const boost::shared_ptr< DifferentialActionDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the derivatives of the dynamics and cost functions.
crocoddyl::DifferentialActionDataAbstractTpl::Lx
VectorXs Lx
Jacobian of the cost function.
Definition: diff-action-base.hpp:268
crocoddyl::DifferentialActionModelAbstractTpl::calc
virtual void calc(const boost::shared_ptr< DifferentialActionDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the system acceleration and cost value.
crocoddyl::DifferentialActionModelAbstractTpl::has_control_limits_
bool has_control_limits_
Indicates whether any of the control limits is finite.
Definition: diff-action-base.hpp:225
crocoddyl::DifferentialActionModelAbstractTpl::DifferentialActionModelAbstractTpl
DifferentialActionModelAbstractTpl(boost::shared_ptr< StateAbstract > state, const std::size_t nu, const std::size_t nr=0)
Initialize the differential action model.
crocoddyl::DifferentialActionModelAbstractTpl::set_u_lb
void set_u_lb(const VectorXs &u_lb)
Modify the control lower bounds.
crocoddyl::DifferentialActionDataAbstractTpl::Lu
VectorXs Lu
Jacobian of the cost function.
Definition: diff-action-base.hpp:269
crocoddyl::DifferentialActionModelAbstractTpl::unone_
VectorXs unone_
Neutral state.
Definition: diff-action-base.hpp:222
crocoddyl::DifferentialActionDataAbstractTpl::Fx
MatrixXs Fx
Jacobian of the dynamics.
Definition: diff-action-base.hpp:265
crocoddyl::DifferentialActionModelAbstractTpl::operator<<
friend std::ostream & operator<<(std::ostream &os, const DifferentialActionModelAbstractTpl< Scalar > &model)
Print information on the differential action model.
crocoddyl::DifferentialActionDataAbstractTpl::xout
VectorXs xout
evolution state
Definition: diff-action-base.hpp:264
crocoddyl::DifferentialActionModelAbstractTpl::nu_
std::size_t nu_
Control dimension.
Definition: diff-action-base.hpp:219
crocoddyl::DifferentialActionModelAbstractTpl::get_nu
std::size_t get_nu() const
Return the dimension of the control input.
crocoddyl::DifferentialActionDataAbstractTpl::r
VectorXs r
Cost residual.
Definition: diff-action-base.hpp:267
crocoddyl::DifferentialActionDataAbstractTpl
Definition: diff-action-base.hpp:231
crocoddyl::DifferentialActionModelAbstractTpl::state_
boost::shared_ptr< StateAbstract > state_
Model of the state.
Definition: diff-action-base.hpp:221
crocoddyl::DifferentialActionModelAbstractTpl::get_has_control_limits
bool get_has_control_limits() const
Indicates if there are defined control limits.
crocoddyl::DifferentialActionDataAbstractTpl::Luu
MatrixXs Luu
Hessian of the cost function.
Definition: diff-action-base.hpp:272
crocoddyl::DifferentialActionModelAbstractTpl::quasiStatic
virtual void quasiStatic(const boost::shared_ptr< DifferentialActionDataAbstract > &data, Eigen::Ref< VectorXs > u, const Eigen::Ref< const VectorXs > &x, const std::size_t maxiter=100, const Scalar tol=Scalar(1e-9))
Computes the quasic static commands.
crocoddyl::DifferentialActionModelAbstractTpl::createData
virtual boost::shared_ptr< DifferentialActionDataAbstract > createData()
Create the differential action data.
crocoddyl::DifferentialActionModelAbstractTpl::set_u_ub
void set_u_ub(const VectorXs &u_ub)
Modify the control upper bounds.
crocoddyl::DifferentialActionDataAbstractTpl::Lxx
MatrixXs Lxx
Hessian of the cost function.
Definition: diff-action-base.hpp:270
crocoddyl::DifferentialActionModelAbstractTpl::print
virtual void print(std::ostream &os) const
Print relevant information of the differential action model.
crocoddyl::DifferentialActionModelAbstractTpl::quasiStatic_x
VectorXs quasiStatic_x(const boost::shared_ptr< DifferentialActionDataAbstract > &data, const VectorXs &x, const std::size_t maxiter=100, const Scalar tol=Scalar(1e-9))
crocoddyl::DifferentialActionModelAbstractTpl
Abstract class for differential action model.
Definition: diff-action-base.hpp:53
crocoddyl::DifferentialActionDataAbstractTpl::cost
Scalar cost
cost value
Definition: diff-action-base.hpp:263
crocoddyl::DifferentialActionModelAbstractTpl::get_state
const boost::shared_ptr< StateAbstract > & get_state() const
Return the state.
crocoddyl::DifferentialActionModelAbstractTpl::get_u_ub
const VectorXs & get_u_ub() const
Return the control upper bound.
crocoddyl::StateAbstractTpl
Abstract class for the state representation.
Definition: fwd.hpp:131
crocoddyl::DifferentialActionDataAbstractTpl::Fu
MatrixXs Fu
Jacobian of the dynamics.
Definition: diff-action-base.hpp:266
crocoddyl::DifferentialActionModelAbstractTpl::u_lb_
VectorXs u_lb_
Lower control limits.
Definition: diff-action-base.hpp:223
crocoddyl::DifferentialActionModelAbstractTpl::u_ub_
VectorXs u_ub_
Upper control limits.
Definition: diff-action-base.hpp:224