Crocoddyl
 
Loading...
Searching...
No Matches
activation.hpp
1
2// 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
16namespace crocoddyl {
17
18template <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
95template <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
155CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ActivationModelNumDiffTpl)
156CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::ActivationDataNumDiffTpl)
157
158#endif // CROCODDYL_CORE_NUMDIFF_ACTIVATION_HPP_
virtual void calcDiff(const std::shared_ptr< ActivationDataAbstract > &data, const Eigen::Ref< const VectorXs > &r) override
const std::shared_ptr< Base > & get_model() const
Get the model_ object.
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.
ActivationDataNumDiffTpl(Model< Scalar > *const model)
Construct a new ActivationDataNumDiff object.
std::shared_ptr< Base > data_0
The data that contains the final results.
std::vector< std::shared_ptr< Base > > data_rp
The temporary data associated with the input variation.