Crocoddyl
actuation.hpp
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2023, University of Edinburgh, LAAS-CNRS
5 // Heriot-Watt University
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
9 
10 #ifndef CROCODDYL_CORE_NUMDIFF_ACTUATION_HPP_
11 #define CROCODDYL_CORE_NUMDIFF_ACTUATION_HPP_
12 
13 #include <iostream>
14 #include <vector>
15 
16 #include "crocoddyl/core/actuation-base.hpp"
17 #include "crocoddyl/core/fwd.hpp"
18 
19 namespace crocoddyl {
20 
33 template <typename _Scalar>
34 class ActuationModelNumDiffTpl : public ActuationModelAbstractTpl<_Scalar> {
35  public:
36  typedef _Scalar Scalar;
37  typedef MathBaseTpl<Scalar> MathBase;
38  typedef ActuationModelAbstractTpl<Scalar> Base;
39  typedef ActuationDataNumDiffTpl<Scalar> Data;
40  typedef ActuationDataAbstractTpl<Scalar> ActuationDataAbstract;
41  typedef typename MathBase::VectorXs VectorXs;
42  typedef typename MathBase::MatrixXs MatrixXs;
43 
50  explicit ActuationModelNumDiffTpl(boost::shared_ptr<Base> model);
51 
55  virtual ~ActuationModelNumDiffTpl();
56 
60  virtual void calc(const boost::shared_ptr<ActuationDataAbstract>& data,
61  const Eigen::Ref<const VectorXs>& x,
62  const Eigen::Ref<const VectorXs>& u);
63 
68  virtual void calc(const boost::shared_ptr<ActuationDataAbstract>& data,
69  const Eigen::Ref<const VectorXs>& x);
70 
74  virtual void calcDiff(const boost::shared_ptr<ActuationDataAbstract>& data,
75  const Eigen::Ref<const VectorXs>& x,
76  const Eigen::Ref<const VectorXs>& u);
77 
83  virtual void calcDiff(const boost::shared_ptr<ActuationDataAbstract>& data,
84  const Eigen::Ref<const VectorXs>& x);
85 
89  virtual void commands(const boost::shared_ptr<ActuationDataAbstract>& data,
90  const Eigen::Ref<const VectorXs>& x,
91  const Eigen::Ref<const VectorXs>& tau);
92 
96  virtual boost::shared_ptr<ActuationDataAbstract> createData();
97 
101  const boost::shared_ptr<Base>& get_model() const;
102 
107  const Scalar get_disturbance() const;
108 
113  void set_disturbance(const Scalar disturbance);
114 
115  private:
116  boost::shared_ptr<Base> model_;
117  Scalar e_jac_;
119 
121  protected:
122  using Base::nu_;
123 };
124 
125 template <typename _Scalar>
126 struct ActuationDataNumDiffTpl : public ActuationDataAbstractTpl<_Scalar> {
127  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
128 
129  typedef _Scalar Scalar;
130  typedef MathBaseTpl<Scalar> MathBase;
131  typedef typename MathBase::VectorXs VectorXs;
132  typedef ActuationDataAbstractTpl<Scalar> Base;
133 
140  template <template <typename Scalar> class Model>
141  explicit ActuationDataNumDiffTpl(Model<Scalar>* const model)
142  : Base(model),
143  dx(model->get_model()->get_state()->get_ndx()),
144  du(model->get_model()->get_nu()),
145  xp(model->get_model()->get_state()->get_nx()) {
146  dx.setZero();
147  du.setZero();
148  xp.setZero();
149  const std::size_t ndx = model->get_model()->get_state()->get_ndx();
150  const std::size_t nu = model->get_model()->get_nu();
151  data_0 = model->get_model()->createData();
152  for (std::size_t i = 0; i < ndx; ++i) {
153  data_x.push_back(model->get_model()->createData());
154  }
155  for (std::size_t i = 0; i < nu; ++i) {
156  data_u.push_back(model->get_model()->createData());
157  }
158  }
159 
160  Scalar x_norm;
161  Scalar
163  Scalar
165  VectorXs dx;
166  VectorXs du;
167  VectorXs xp;
168  boost::shared_ptr<Base> data_0;
170  std::vector<boost::shared_ptr<Base> >
172  std::vector<boost::shared_ptr<Base> >
174 
175  using Base::dtau_du;
176  using Base::dtau_dx;
177  using Base::tau;
178 };
179 
180 } // namespace crocoddyl
181 
182 /* --- Details -------------------------------------------------------------- */
183 /* --- Details -------------------------------------------------------------- */
184 /* --- Details -------------------------------------------------------------- */
185 #include "crocoddyl/core/numdiff/actuation.hxx"
186 
187 #endif // CROCODDYL_CORE_NUMDIFF_ACTUATION_HPP_
crocoddyl::ActuationModelNumDiffTpl::createData
virtual boost::shared_ptr< ActuationDataAbstract > createData()
Create the actuation data.
crocoddyl::ActuationModelNumDiffTpl::calcDiff
virtual void calcDiff(const boost::shared_ptr< ActuationDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)
Compute the Jacobians of the actuation function.
crocoddyl::ActuationModelNumDiffTpl::set_disturbance
void set_disturbance(const Scalar disturbance)
Modify the disturbance constant used by the numerical differentiation routine.
crocoddyl::ActuationModelNumDiffTpl::get_disturbance
const Scalar get_disturbance() const
Return the disturbance constant used by the numerical differentiation routine.
crocoddyl::ActuationDataNumDiffTpl::dx
VectorXs dx
State disturbance.
Definition: actuation.hpp:165
crocoddyl::ActuationModelNumDiffTpl::~ActuationModelNumDiffTpl
virtual ~ActuationModelNumDiffTpl()
Destroy the numdiff actuation model.
crocoddyl::ActuationDataNumDiffTpl::data_x
std::vector< boost::shared_ptr< Base > > data_x
The temporary data associated with the state variation.
Definition: actuation.hpp:171
crocoddyl::ActuationModelNumDiffTpl::commands
virtual void commands(const boost::shared_ptr< ActuationDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &tau)
Compute the joint torque input from the generalized torques.
crocoddyl::ActuationModelAbstractTpl::nu_
std::size_t nu_
Dimension of joint torque inputs.
Definition: actuation-base.hpp:172
crocoddyl::ActuationDataNumDiffTpl::xp
VectorXs xp
Definition: actuation.hpp:167
crocoddyl::ActuationDataAbstractTpl::tau
VectorXs tau
Generalized torques.
Definition: actuation-base.hpp:201
crocoddyl::ActuationDataNumDiffTpl::xh_jac
Scalar xh_jac
Disturbance value used for computing .
Definition: actuation.hpp:162
crocoddyl::ActuationDataNumDiffTpl::ActuationDataNumDiffTpl
ActuationDataNumDiffTpl(Model< Scalar > *const model)
Initialize the numdiff actuation data.
Definition: actuation.hpp:141
crocoddyl::ActuationModelNumDiffTpl::get_model
const boost::shared_ptr< Base > & get_model() const
Return the original actuation model.
crocoddyl::ActuationDataAbstractTpl::dtau_du
MatrixXs dtau_du
Definition: actuation-base.hpp:205
crocoddyl::ActuationDataNumDiffTpl::du
VectorXs du
Control disturbance.
Definition: actuation.hpp:166
crocoddyl::ActuationDataNumDiffTpl::data_u
std::vector< boost::shared_ptr< Base > > data_u
The temporary data associated with the control variation.
Definition: actuation.hpp:173
crocoddyl::ActuationDataAbstractTpl::dtau_dx
MatrixXs dtau_dx
Definition: actuation-base.hpp:203
crocoddyl::ActuationDataNumDiffTpl::data_0
boost::shared_ptr< Base > data_0
The data that contains the final results.
Definition: actuation.hpp:169
crocoddyl::ActuationDataNumDiffTpl::uh_jac
Scalar uh_jac
Disturbance value used for computing .
Definition: actuation.hpp:164
crocoddyl::ActuationDataNumDiffTpl::x_norm
Scalar x_norm
Norm of the state vector.
Definition: actuation.hpp:160
crocoddyl::ActuationDataAbstractTpl
Definition: actuation-base.hpp:177
crocoddyl::ActuationModelNumDiffTpl::calc
virtual void calc(const boost::shared_ptr< ActuationDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)
Compute the actuation signal from the state point and joint torque inputs .
crocoddyl::ActuationModelNumDiffTpl::ActuationModelNumDiffTpl
ActuationModelNumDiffTpl(boost::shared_ptr< Base > model)
Initialize the numdiff residual model.