9#ifndef CROCODDYL_CORE_GUIDANCE_COMPONENTWISE_SATURATION_HPP_ 10#define CROCODDYL_CORE_GUIDANCE_COMPONENTWISE_SATURATION_HPP_ 12#include "crocoddyl/core/guidance-base.hpp" 34template <
typename _Scalar>
38 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
42 typedef _Scalar Scalar;
44 typedef typename Base::GuidanceDataAbstract GuidanceDataAbstract;
47 typedef typename MathBase::VectorXs VectorXs;
48 typedef typename MathBase::MatrixXs MatrixXs;
58 const VectorXs& max_rate);
67 virtual void calc(
const std::shared_ptr<GuidanceDataAbstract>& data,
68 const Eigen::Ref<const VectorXs>& error)
const override;
76 virtual void calcDiff(
const std::shared_ptr<GuidanceDataAbstract>& data,
77 const Eigen::Ref<const VectorXs>& error)
const override;
84 virtual std::shared_ptr<GuidanceDataAbstract>
createData()
const override;
96 template <
typename NewScalar>
125 virtual void print(std::ostream& os)
const override;
128 void checkParameters(
const VectorXs& gain,
const VectorXs& max_rate)
const;
133 using Base::checkErrorDimension;
134 using Base::checkJacobianDimension;
135 using Base::checkRateDimension;
145template <
typename _Scalar>
146struct GuidanceDataComponentwiseSaturationTpl
148 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
150 typedef _Scalar Scalar;
153 typedef typename MathBase::VectorXs VectorXs;
154 typedef typename MathBase::MatrixXs MatrixXs;
156 template <
typename Gu
idance>
157 explicit GuidanceDataComponentwiseSaturationTpl(Guidance*
const guidance)
159 z(VectorXs::Zero(guidance->get_nr())),
160 tanh_z(VectorXs::Zero(guidance->get_nr())) {}
161 virtual ~GuidanceDataComponentwiseSaturationTpl() =
default;
173#include "crocoddyl/core/guidance/componentwise-saturation.hxx" 175CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(
177CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(
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 tanh_z
Cached componentwise tanh values.
VectorXs z
Cached componentwise saturation arguments.