Crocoddyl
Loading...
Searching...
No Matches
componentwise-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_COMPONENTWISE_SATURATION_HPP_
10#define CROCODDYL_CORE_GUIDANCE_COMPONENTWISE_SATURATION_HPP_
11
12#include "crocoddyl/core/guidance-base.hpp"
13
14namespace crocoddyl {
15
34template <typename _Scalar>
36 : public GuidanceModelAbstractTpl<_Scalar> {
37 public:
38 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
39 CROCODDYL_DERIVED_CAST(GuidanceModelBase,
41
42 typedef _Scalar Scalar;
44 typedef typename Base::GuidanceDataAbstract GuidanceDataAbstract;
46 typedef MathBaseTpl<Scalar> MathBase;
47 typedef typename MathBase::VectorXs VectorXs;
48 typedef typename MathBase::MatrixXs MatrixXs;
49
58 const VectorXs& max_rate);
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
84 virtual std::shared_ptr<GuidanceDataAbstract> createData() const override;
85
91 const VectorXs& get_gain() const;
92
96 template <typename NewScalar>
98
104 const VectorXs& get_max_rate() const;
105
111 void set_gain(const VectorXs& gain);
112
118 void set_max_rate(const VectorXs& max_rate);
119
125 virtual void print(std::ostream& os) const override;
126
127 private:
128 void checkParameters(const VectorXs& gain, const VectorXs& max_rate) const;
129
130 VectorXs gain_;
131 VectorXs max_rate_;
132
133 using Base::checkErrorDimension;
134 using Base::checkJacobianDimension;
135 using Base::checkRateDimension;
136 using Base::nr_;
137};
138
145template <typename _Scalar>
146struct GuidanceDataComponentwiseSaturationTpl
147 : public GuidanceDataAbstractTpl<_Scalar> {
148 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
149
150 typedef _Scalar Scalar;
152 typedef MathBaseTpl<Scalar> MathBase;
153 typedef typename MathBase::VectorXs VectorXs;
154 typedef typename MathBase::MatrixXs MatrixXs;
155
156 template <typename Guidance>
157 explicit GuidanceDataComponentwiseSaturationTpl(Guidance* const guidance)
158 : Base(guidance),
159 z(VectorXs::Zero(guidance->get_nr())),
160 tanh_z(VectorXs::Zero(guidance->get_nr())) {}
161 virtual ~GuidanceDataComponentwiseSaturationTpl() = default;
162
163 VectorXs z;
164 VectorXs tanh_z;
165
166 using Base::g;
167 using Base::Ge;
168};
169
170} // namespace crocoddyl
171
172/* --- Details -------------------------------------------------------------- */
173#include "crocoddyl/core/guidance/componentwise-saturation.hxx"
174
175CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(
177CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(
179
180#endif // CROCODDYL_CORE_GUIDANCE_COMPONENTWISE_SATURATION_HPP_
GuidanceModelAbstractTpl(const std::size_t nr)
Initialize the guidance-model dimension.
Independently bounded guidance model for heterogeneous task channels.
const VectorXs & get_max_rate() const
Return the componentwise saturation bounds.
virtual void calc(const std::shared_ptr< GuidanceDataAbstract > &data, const Eigen::Ref< const VectorXs > &error) const override
Compute the saturated guidance output.
GuidanceModelComponentwiseSaturationTpl< NewScalar > cast() const
Cast the guidance model to a different scalar type.
virtual void calcDiff(const std::shared_ptr< GuidanceDataAbstract > &data, const Eigen::Ref< const VectorXs > &error) const override
Compute the Jacobian of the saturated guidance law.
GuidanceModelComponentwiseSaturationTpl(const VectorXs &gain, const VectorXs &max_rate)
Initialize the componentwise saturation guidance model.
void set_gain(const VectorXs &gain)
Update the componentwise gains.
const VectorXs & get_gain() const
Return the componentwise gains.
virtual std::shared_ptr< GuidanceDataAbstract > createData() const override
Allocate the cached guidance data.
void set_max_rate(const VectorXs &max_rate)
Update the componentwise saturation bounds.
virtual void print(std::ostream &os) const override
Print the model parameters.
GuidanceDataAbstractTpl(const GuidanceModelAbstract *const model)
Allocate guidance data with the size inferred from the model.
Cached values for the componentwise saturation guidance model.
VectorXs z
Cached componentwise saturation arguments.