Crocoddyl
 
Loading...
Searching...
No Matches
residual.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2021-2025, Heriot-Watt University, University of Edinburgh
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_CORE_CONSTRAINTS_RESIDUAL_CONSTRAINT_HPP_
10#define CROCODDYL_CORE_CONSTRAINTS_RESIDUAL_CONSTRAINT_HPP_
11
12#include "crocoddyl/core/fwd.hpp"
13//
14#include "crocoddyl/core/constraint-base.hpp"
15#include "crocoddyl/core/residual-base.hpp"
16
17namespace crocoddyl {
18
46template <typename _Scalar>
48 public:
49 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
50 CROCODDYL_DERIVED_CAST(ConstraintModelBase, ConstraintModelResidualTpl)
51
52 typedef _Scalar Scalar;
59 typedef typename MathBase::VectorXs VectorXs;
60
72 std::shared_ptr<typename Base::StateAbstract> state,
73 std::shared_ptr<ResidualModelAbstract> residual, const VectorXs& lower,
74 const VectorXs& upper, const bool T_act = true);
75
85 std::shared_ptr<typename Base::StateAbstract> state,
86 std::shared_ptr<ResidualModelAbstract> residual, const bool T_act = true);
87 virtual ~ConstraintModelResidualTpl() = default;
88
96 virtual void calc(const std::shared_ptr<ConstraintDataAbstract>& data,
97 const Eigen::Ref<const VectorXs>& x,
98 const Eigen::Ref<const VectorXs>& u) override;
99
109 virtual void calc(const std::shared_ptr<ConstraintDataAbstract>& data,
110 const Eigen::Ref<const VectorXs>& x) override;
111
119 virtual void calcDiff(const std::shared_ptr<ConstraintDataAbstract>& data,
120 const Eigen::Ref<const VectorXs>& x,
121 const Eigen::Ref<const VectorXs>& u) override;
122
134 virtual void calcDiff(const std::shared_ptr<ConstraintDataAbstract>& data,
135 const Eigen::Ref<const VectorXs>& x) override;
136
140 virtual std::shared_ptr<ConstraintDataAbstract> createData(
141 DataCollectorAbstract* const data) override;
142
152 template <typename NewScalar>
154
160 virtual void print(std::ostream& os) const override;
161
162 private:
163 void updateCalc(const std::shared_ptr<ConstraintDataAbstract>& data);
164 void updateCalcDiff(const std::shared_ptr<ConstraintDataAbstract>& data);
165
166 protected:
167 using Base::lb_;
168 using Base::ng_;
169 using Base::nh_;
170 using Base::nu_;
171 using Base::residual_;
172 using Base::state_;
174 using Base::type_;
175 using Base::ub_;
176 using Base::unone_;
177};
178
179template <typename _Scalar>
181 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
182
183 typedef _Scalar Scalar;
187
188 template <template <typename Scalar> class Model>
189 ConstraintDataResidualTpl(Model<Scalar>* const model,
190 DataCollectorAbstract* const data)
191 : Base(model, data) {}
192 virtual ~ConstraintDataResidualTpl() = default;
193
194 using Base::g;
195 using Base::Gu;
196 using Base::Gx;
197 using Base::h;
198 using Base::Hu;
199 using Base::Hx;
200 using Base::residual;
201 using Base::shared;
202};
203
204} // namespace crocoddyl
205
206/* --- Details -------------------------------------------------------------- */
207/* --- Details -------------------------------------------------------------- */
208/* --- Details -------------------------------------------------------------- */
209#include "crocoddyl/core/constraints/residual.hxx"
210
211CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::ConstraintModelResidualTpl)
212CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::ConstraintDataResidualTpl)
213
214#endif // CROCODDYL_CORE_CONSTRAINTS_RESIDUAL_CONSTRAINT_HPP_
Abstract class for constraint models.
std::shared_ptr< StateAbstract > state_
State description.
std::size_t nu_
Control dimension.
std::size_t nh_
Number of equality constraints.
VectorXs lb_
Lower bound of the constraint.
ConstraintType type_
Type of constraint: inequality=0, equality=1, both=2.
std::shared_ptr< ResidualModelAbstract > residual_
Residual model.
VectorXs ub_
Upper bound of the constraint.
std::size_t ng_
Number of inequality constraints.
Residual-based constraint.
Definition residual.hpp:47
ConstraintModelResidualTpl< NewScalar > cast() const
Cast the residual constraint model to a different scalar type.
virtual void calc(const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the residual constraint.
ConstraintModelResidualTpl(std::shared_ptr< typename Base::StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual, const VectorXs &lower, const VectorXs &upper, const bool T_act=true)
Initialize the residual constraint model as an inequality constraint.
virtual void calcDiff(const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override
Compute the derivatives of the residual constraint with respect to the state only.
virtual std::shared_ptr< ConstraintDataAbstract > createData(DataCollectorAbstract *const data) override
Create the residual constraint data.
virtual void calcDiff(const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the derivatives of the residual constraint.
virtual void calc(const std::shared_ptr< ConstraintDataAbstract > &data, const Eigen::Ref< const VectorXs > &x) override
Compute the residual constraint based on state only.
virtual void print(std::ostream &os) const override
Print relevant information of the cost-residual model.
ConstraintModelResidualTpl(std::shared_ptr< typename Base::StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual, const bool T_act=true)
Initialize the residual constraint model as an equality constraint.
Abstract class for residual models.
MatrixXs Gx
Jacobian of the inequality constraint.
VectorXs h
Equality constraint values.
VectorXs g
Inequality constraint values.
MatrixXs Hx
Jacobian of the equality constraint.
std::shared_ptr< ResidualDataAbstract > residual
Residual data.
MatrixXs Hu
Jacobian of the equality constraint.
DataCollectorAbstract * shared
Shared data.
MatrixXs Gu
Jacobian of the inequality constraint.