Crocoddyl
Loading...
Searching...
No Matches
smooth-saturation.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2026, Heriot-Watt University
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_CORE_GUIDANCE_SMOOTH_SATURATION_HPP_
10#define CROCODDYL_CORE_GUIDANCE_SMOOTH_SATURATION_HPP_
11
12#include "crocoddyl/core/guidance-base.hpp"
13#include "crocoddyl/core/utils/conversions.hpp"
14
15namespace crocoddyl {
16
33template <typename _Scalar>
35 : public GuidanceModelAbstractTpl<_Scalar> {
36 public:
37 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
39
40 typedef _Scalar Scalar;
42 typedef typename Base::GuidanceDataAbstract GuidanceDataAbstract;
44 typedef MathBaseTpl<Scalar> MathBase;
45 typedef typename MathBase::VectorXs VectorXs;
46 typedef typename MathBase::MatrixXs MatrixXs;
47
56 GuidanceModelSmoothSaturationTpl(const std::size_t nr, const Scalar& gain,
57 const Scalar& max_rate,
58 const Scalar epsilon = Scalar(1e-6));
59 virtual ~GuidanceModelSmoothSaturationTpl() = default;
60
67 virtual void calc(const std::shared_ptr<GuidanceDataAbstract>& data,
68 const Eigen::Ref<const VectorXs>& error) const override;
69
76 virtual void calcDiff(const std::shared_ptr<GuidanceDataAbstract>& data,
77 const Eigen::Ref<const VectorXs>& error) const override;
78
85 virtual std::shared_ptr<GuidanceDataAbstract> createData() const override;
86
92 const Scalar& get_gain() const;
93
97 template <typename NewScalar>
99
105 const Scalar& get_max_rate() const;
106
112 const Scalar& get_epsilon() const;
113
119 void set_gain(const Scalar& gain);
120
126 void set_max_rate(const Scalar& max_rate);
127
133 void set_epsilon(const Scalar& epsilon);
134
140 virtual void print(std::ostream& os) const override;
141
142 private:
143 void checkParameters(const Scalar& gain, const Scalar& max_rate,
144 const Scalar& epsilon) const;
145
146 Scalar gain_;
147 Scalar max_rate_;
148 Scalar epsilon_;
149
150 using Base::checkErrorDimension;
151 using Base::checkJacobianDimension;
152 using Base::checkRateDimension;
153 using Base::nr_;
154};
155
162template <typename _Scalar>
163struct GuidanceDataSmoothSaturationTpl
164 : public GuidanceDataAbstractTpl<_Scalar> {
165 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
166
167 typedef _Scalar Scalar;
169 typedef MathBaseTpl<Scalar> MathBase;
170 typedef typename MathBase::VectorXs VectorXs;
171 typedef typename MathBase::MatrixXs MatrixXs;
172
173 template <typename Guidance>
174 explicit GuidanceDataSmoothSaturationTpl(Guidance* const guidance)
175 : Base(guidance),
176 radius(Scalar(0)),
177 scale(Scalar(0)),
178 z(Scalar(0)),
179 tanh_z(Scalar(0)) {}
180 virtual ~GuidanceDataSmoothSaturationTpl() = default;
181
182 Scalar radius;
183 Scalar scale;
184 Scalar z;
185 Scalar tanh_z;
186
187 using Base::g;
188 using Base::Ge;
189};
190
191} // namespace crocoddyl
192
193/* --- Details -------------------------------------------------------------- */
194#include "crocoddyl/core/guidance/smooth-saturation.hxx"
195
196CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(
198CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(
200
201#endif // CROCODDYL_CORE_GUIDANCE_SMOOTH_SATURATION_HPP_
GuidanceModelAbstractTpl(const std::size_t nr)
Initialize the guidance-model dimension.
Direction-preserving, smoothly bounded guidance model.
const Scalar & get_gain() const
Return the local linear gain.
virtual void calc(const std::shared_ptr< GuidanceDataAbstract > &data, const Eigen::Ref< const VectorXs > &error) const override
Compute the smooth-saturation guidance output.
void set_max_rate(const Scalar &max_rate)
Update the maximum desired-rate norm.
GuidanceModelSmoothSaturationTpl< NewScalar > cast() const
Cast the guidance model to a different scalar type.
const Scalar & get_max_rate() const
Return the maximum desired-rate norm.
virtual void calcDiff(const std::shared_ptr< GuidanceDataAbstract > &data, const Eigen::Ref< const VectorXs > &error) const override
Compute the Jacobian of the smooth-saturation law.
virtual std::shared_ptr< GuidanceDataAbstract > createData() const override
Allocate the cached guidance data.
GuidanceModelSmoothSaturationTpl(const std::size_t nr, const Scalar &gain, const Scalar &max_rate, const Scalar epsilon=Scalar(1e-6))
Initialize the smoothly saturated guidance model.
const Scalar & get_epsilon() const
Return the smoothing parameter.
void set_gain(const Scalar &gain)
Update the local linear gain.
virtual void print(std::ostream &os) const override
Print the model parameters.
void set_epsilon(const Scalar &epsilon)
Update the smoothing parameter.
GuidanceDataAbstractTpl(const GuidanceModelAbstract *const model)
Allocate guidance data with the size inferred from the model.
Cached values for the smooth saturation guidance model.
Scalar z
Cached saturation argument .