Crocoddyl
control.hpp
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, LAAS-CNRS, University of Edinburgh,
5 // Heriot-Watt University
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
9 
10 #ifndef CROCODDYL_CORE_RESIDUALS_CONTROL_HPP_
11 #define CROCODDYL_CORE_RESIDUALS_CONTROL_HPP_
12 
13 #include "crocoddyl/core/fwd.hpp"
14 #include "crocoddyl/core/residual-base.hpp"
15 
16 namespace crocoddyl {
17 
34 template <typename _Scalar>
36  public:
37  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
38  CROCODDYL_DERIVED_CAST(ResidualModelBase, ResidualModelControlTpl)
39 
40  typedef _Scalar Scalar;
47  typedef typename MathBase::VectorXs VectorXs;
48  typedef typename MathBase::MatrixXs MatrixXs;
49 
58  ResidualModelControlTpl(std::shared_ptr<typename Base::StateAbstract> state,
59  const VectorXs& uref);
60 
69  ResidualModelControlTpl(std::shared_ptr<typename Base::StateAbstract> state,
70  const std::size_t nu);
71 
81  std::shared_ptr<typename Base::StateAbstract> state);
82  virtual ~ResidualModelControlTpl() = default;
83 
91  virtual void calc(const std::shared_ptr<ResidualDataAbstract>& data,
92  const Eigen::Ref<const VectorXs>& x,
93  const Eigen::Ref<const VectorXs>& u) override;
94 
99  virtual void calc(const std::shared_ptr<ResidualDataAbstract>& data,
100  const Eigen::Ref<const VectorXs>& x) override;
101 
109  virtual void calcDiff(const std::shared_ptr<ResidualDataAbstract>& data,
110  const Eigen::Ref<const VectorXs>& x,
111  const Eigen::Ref<const VectorXs>& u) override;
112 
116  virtual std::shared_ptr<ResidualDataAbstract> createData(
117  DataCollectorAbstract* const data) override;
118 
131  virtual void calcCostDiff(
132  const std::shared_ptr<CostDataAbstract>& cdata,
133  const std::shared_ptr<ResidualDataAbstract>& rdata,
134  const std::shared_ptr<ActivationDataAbstract>& adata,
135  const bool update_u = true) override;
136 
146  template <typename NewScalar>
148 
152  const VectorXs& get_reference() const;
153 
157  void set_reference(const VectorXs& reference);
158 
164  virtual void print(std::ostream& os) const override;
165 
166  protected:
167  using Base::nu_;
168  using Base::state_;
169 
170  private:
171  VectorXs uref_;
172 };
173 
174 } // namespace crocoddyl
175 
176 /* --- Details -------------------------------------------------------------- */
177 /* --- Details -------------------------------------------------------------- */
178 /* --- Details -------------------------------------------------------------- */
179 #include "crocoddyl/core/residuals/control.hxx"
180 
181 CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ResidualModelControlTpl)
182 
183 #endif // CROCODDYL_CORE_RESIDUALS_CONTROL_HPP_
Abstract class for residual models.
std::shared_ptr< StateAbstract > state_
State description.
std::size_t nu_
Control dimension.
Define a control residual.
Definition: control.hpp:35
virtual void calc(const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override
ResidualModelControlTpl(std::shared_ptr< typename Base::StateAbstract > state, const VectorXs &uref)
Initialize the control residual model.
virtual void calcDiff(const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the derivatives of the control residual.
ResidualModelControlTpl< NewScalar > cast() const
Cast the control residual model to a different scalar type.
void set_reference(const VectorXs &reference)
Modify the reference control vector.
virtual void calcCostDiff(const std::shared_ptr< CostDataAbstract > &cdata, const std::shared_ptr< ResidualDataAbstract > &rdata, const std::shared_ptr< ActivationDataAbstract > &adata, const bool update_u=true) override
Compute the derivative of the control-cost function.
const VectorXs & get_reference() const
Return the reference control vector.
ResidualModelControlTpl(std::shared_ptr< typename Base::StateAbstract > state, const std::size_t nu)
Initialize the control residual model.
ResidualModelControlTpl(std::shared_ptr< typename Base::StateAbstract > state)
Initialize the control residual model.
virtual void calc(const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the control residual.
virtual void print(std::ostream &os) const override
Print relevant information of the control residual.
virtual std::shared_ptr< ResidualDataAbstract > createData(DataCollectorAbstract *const data) override
Create the control residual data.