9#ifndef CROCODDYL_CORE_RESIDUALS_TASK_FIRST_ORDER_HPP_ 10#define CROCODDYL_CORE_RESIDUALS_TASK_FIRST_ORDER_HPP_ 12#include "crocoddyl/core/fwd.hpp" 13#include "crocoddyl/core/guidance-base.hpp" 14#include "crocoddyl/core/residual-base.hpp" 15#include "crocoddyl/core/task-base.hpp" 39template <
typename _Scalar>
43 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
46 typedef _Scalar Scalar;
54 typedef typename MathBase::VectorXs VectorXs;
76 std::shared_ptr<TaskModelAbstract> task,
77 std::shared_ptr<GuidanceModelAbstract> guidance);
88 virtual void calc(
const std::shared_ptr<ResidualDataAbstract>& data,
89 const Eigen::Ref<const VectorXs>& x,
90 const Eigen::Ref<const VectorXs>& u)
override;
100 virtual void calcDiff(
const std::shared_ptr<ResidualDataAbstract>& data,
101 const Eigen::Ref<const VectorXs>& x,
102 const Eigen::Ref<const VectorXs>& u)
override;
108 DataCollectorAbstract*
const data)
override;
113 template <
typename NewScalar>
116 const std::shared_ptr<TaskModelAbstract>& get_task()
const;
117 const std::shared_ptr<GuidanceModelAbstract>& get_guidance()
const;
118 void set_guidance(std::shared_ptr<GuidanceModelAbstract> guidance);
120 virtual void print(std::ostream& os)
const override;
130 void checkDimensions()
const;
132 std::shared_ptr<TaskModelAbstract> task_;
133 std::shared_ptr<GuidanceModelAbstract> guidance_;
143template <
typename _Scalar>
145 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
147 typedef _Scalar Scalar;
149 typedef ResidualDataAbstractTpl<Scalar> Base;
153 typedef typename MathBase::VectorXs VectorXs;
154 typedef typename MathBase::MatrixXs MatrixXs;
161 template <
template <
typename Scalar>
class Model>
163 DataCollectorAbstract*
const data)
165 task(model->get_task()->createData(data)),
166 guidance(model->get_guidance()->createData()) {
167 task->compute_acceleration =
false;
172 std::shared_ptr<TaskDataAbstract> task;
173 std::shared_ptr<GuidanceDataAbstract> guidance;
186#include "crocoddyl/core/residuals/task-first-order.hxx" Differentiable mapping from a task error to a desired task rate.
std::shared_ptr< StateAbstract > state_
ResidualModelAbstractTpl(std::shared_ptr< StateAbstract > state, const std::size_t nr, const std::size_t nu, const bool q_dependent=true, const bool v_dependent=true, const bool u_dependent=true)
Initialize the residual model.
ResidualModelTaskFirstOrderTpl(std::shared_ptr< TaskModelAbstract > task, std::shared_ptr< GuidanceModelAbstract > guidance)
Initialize the first-order task residual.
virtual void calcDiff(const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the residual Jacobians.
virtual std::shared_ptr< ResidualDataAbstract > createData(DataCollectorAbstract *const data) override
Allocate data for the residual.
ResidualModelTaskFirstOrderTpl< NewScalar > cast() const
Cast the residual model to a different scalar type.
virtual void calc(const std::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the first-order task residual.
virtual void print(std::ostream &os) const override
Print relevant information of the residual model.
Abstract task model for convergence residuals.
Preallocated values and derivatives produced by a guidance model.
DataCollectorAbstract * shared
Data for the first-order task residual.
ResidualDataTaskFirstOrderTpl(Model< Scalar > *const model, DataCollectorAbstract *const data)
Construct the residual data.
Preallocated values and derivatives produced by a task model.