Crocoddyl
activation.hpp
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, LAAS-CNRS, New York University,
5 // Max Planck Gesellschaft, University of Edinburgh
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
9 
10 #ifndef CROCODDYL_CORE_NUMDIFF_ACTIVATION_HPP_
11 #define CROCODDYL_CORE_NUMDIFF_ACTIVATION_HPP_
12 
13 #include "crocoddyl/core/activation-base.hpp"
14 #include "crocoddyl/core/fwd.hpp"
15 
16 namespace crocoddyl {
17 
18 template <typename _Scalar>
20  public:
21  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
22  CROCODDYL_DERIVED_CAST(ActivationModelBase, ActivationModelNumDiffTpl)
23 
24  typedef _Scalar Scalar;
29  typedef typename MathBase::VectorXs VectorXs;
30  typedef typename MathBase::MatrixXs MatrixXs;
31 
37  explicit ActivationModelNumDiffTpl(std::shared_ptr<Base> model);
38 
43 
47  virtual void calc(const std::shared_ptr<ActivationDataAbstract>& data,
48  const Eigen::Ref<const VectorXs>& r) override;
49 
53  virtual void calcDiff(const std::shared_ptr<ActivationDataAbstract>& data,
54  const Eigen::Ref<const VectorXs>& r) override;
55 
61  virtual std::shared_ptr<ActivationDataAbstract> createData() override;
62 
63  template <typename NewScalar>
65 
71  const std::shared_ptr<Base>& get_model() const;
72 
77  const Scalar get_disturbance() const;
78 
83  void set_disturbance(const Scalar disturbance);
84 
85  private:
86  std::shared_ptr<Base>
87  model_;
88  Scalar e_jac_;
90 
91  protected:
92  using Base::nr_;
93 };
94 
95 template <typename _Scalar>
97  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
98 
99  typedef _Scalar Scalar;
101  typedef typename MathBase::VectorXs VectorXs;
103  typedef typename MathBase::MatrixXs MatrixXs;
104 
111  template <template <typename Scalar> class Model>
112  explicit ActivationDataNumDiffTpl(Model<Scalar>* const model)
113  : Base(model),
114  dr(model->get_model()->get_nr()),
115  rp(model->get_model()->get_nr()),
116  Arr_(Arr.rows(), Arr.cols()) {
117  dr.setZero();
118  rp.setZero();
119  Arr_.setZero();
120  data_0 = model->get_model()->createData();
121  const std::size_t nr = model->get_model()->get_nr();
122  data_rp.clear();
123  for (std::size_t i = 0; i < nr; ++i) {
124  data_rp.push_back(model->get_model()->createData());
125  }
126 
127  data_r2p.clear();
128  for (std::size_t i = 0; i < 4; ++i) {
129  data_r2p.push_back(model->get_model()->createData());
130  }
131  }
132 
133  VectorXs dr;
134  VectorXs rp;
136  std::shared_ptr<Base> data_0;
137  std::vector<std::shared_ptr<Base> >
139  std::vector<std::shared_ptr<Base> >
141 
142  MatrixXs Arr_;
143  using Base::a_value;
144  using Base::Ar;
145  using Base::Arr;
146 };
147 
148 } // namespace crocoddyl
149 
150 /* --- Details -------------------------------------------------------------- */
151 /* --- Details -------------------------------------------------------------- */
152 /* --- Details -------------------------------------------------------------- */
153 #include "crocoddyl/core/numdiff/activation.hxx"
154 
155 CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ActivationModelNumDiffTpl)
156 CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::ActivationDataNumDiffTpl)
157 
158 #endif // CROCODDYL_CORE_NUMDIFF_ACTIVATION_HPP_
const std::shared_ptr< Base > & get_model() const
Get the model_ object.
virtual void calcDiff(const std::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r) override
const Scalar get_disturbance() const
Return the disturbance constant used in the numerical differentiation routine.
void set_disturbance(const Scalar disturbance)
Modify the disturbance constant used in the numerical differentiation routine.
virtual std::shared_ptr< ActivationDataAbstract > createData() override
Create a Data object from the given model.
virtual void calc(const std::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r) override
ActivationModelNumDiffTpl(std::shared_ptr< Base > model)
Construct a new ActivationModelNumDiff object.
virtual ~ActivationModelNumDiffTpl()
Destroy the ActivationModelNumDiff object.
std::vector< std::shared_ptr< Base > > data_r2p
The temporary data associated with the input variation.
Definition: activation.hpp:140
ActivationDataNumDiffTpl(Model< Scalar > *const model)
Construct a new ActivationDataNumDiff object.
Definition: activation.hpp:112
std::shared_ptr< Base > data_0
The data that contains the final results.
Definition: activation.hpp:136
std::vector< std::shared_ptr< Base > > data_rp
The temporary data associated with the input variation.
Definition: activation.hpp:138