9#ifndef CROCODDYL_CORE_CONSTRAINTS_RESIDUAL_CONSTRAINT_HPP_ 10#define CROCODDYL_CORE_CONSTRAINTS_RESIDUAL_CONSTRAINT_HPP_ 12#include "crocoddyl/core/fwd.hpp" 14#include "crocoddyl/core/constraint-base.hpp" 15#include "crocoddyl/core/residual-base.hpp" 46template <
typename _Scalar>
49 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
52 typedef _Scalar Scalar;
59 typedef typename MathBase::VectorXs VectorXs;
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);
85 std::shared_ptr<typename Base::StateAbstract> state,
86 std::shared_ptr<ResidualModelAbstract> residual,
const bool T_act =
true);
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;
109 virtual void calc(
const std::shared_ptr<ConstraintDataAbstract>& data,
110 const Eigen::Ref<const VectorXs>& x)
override;
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;
134 virtual void calcDiff(
const std::shared_ptr<ConstraintDataAbstract>& data,
135 const Eigen::Ref<const VectorXs>& x)
override;
141 DataCollectorAbstract*
const data)
override;
152 template <
typename NewScalar>
160 virtual void print(std::ostream& os)
const override;
163 void updateCalc(
const std::shared_ptr<ConstraintDataAbstract>& data);
164 void updateCalcDiff(
const std::shared_ptr<ConstraintDataAbstract>& data);
179template <
typename _Scalar>
180struct ConstraintDataResidualTpl :
public ConstraintDataAbstractTpl<_Scalar> {
181 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
183 typedef _Scalar Scalar;
185 typedef ConstraintDataAbstractTpl<Scalar> Base;
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;
209#include "crocoddyl/core/constraints/residual.hxx" std::shared_ptr< StateAbstract > state_
ConstraintModelAbstractTpl(std::shared_ptr< StateAbstract > state, std::shared_ptr< ResidualModelAbstract > residual, const std::size_t ng, const std::size_t nh)
Initialize the constraint model.
std::shared_ptr< ResidualModelAbstract > residual_
Residual-based constraint.
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.
std::shared_ptr< ResidualDataAbstract > residual
DataCollectorAbstract * shared