Crocoddyl
Loading...
Searching...
No Matches
task-base.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2026, Heriot-Watt University
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_CORE_TASK_BASE_HPP_
10#define CROCODDYL_CORE_TASK_BASE_HPP_
11
12#include "crocoddyl/core/data-collector-base.hpp"
13#include "crocoddyl/core/fwd.hpp"
14#include "crocoddyl/core/state-base.hpp"
15#include "crocoddyl/core/utils/exception.hpp"
16
17namespace crocoddyl {
18
20 public:
21 virtual ~TaskModelBase() = default;
22
23 CROCODDYL_BASE_CAST(TaskModelBase, TaskModelAbstractTpl)
24};
25
46template <typename _Scalar>
48 public:
49 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
50
51 typedef _Scalar Scalar;
52 typedef MathBaseTpl<Scalar> MathBase;
53 typedef StateAbstractTpl<Scalar> StateAbstract;
54 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
55 typedef TaskDataAbstractTpl<Scalar> TaskDataAbstract;
56 typedef typename MathBase::VectorXs VectorXs;
57 typedef typename MathBase::MatrixXs MatrixXs;
58
70 TaskModelAbstractTpl(std::shared_ptr<StateAbstract> state,
71 const std::size_t nr, const std::size_t nu,
72 const bool q_dependent = true,
73 const bool v_dependent = true,
74 const bool u_dependent = true,
75 const bool has_acceleration = true);
76 virtual ~TaskModelAbstractTpl() = default;
77
81 virtual void calc(const std::shared_ptr<TaskDataAbstract>& data,
82 const Eigen::Ref<const VectorXs>& x,
83 const Eigen::Ref<const VectorXs>& u) = 0;
84
88 virtual void calcDiff(const std::shared_ptr<TaskDataAbstract>& data,
89 const Eigen::Ref<const VectorXs>& x,
90 const Eigen::Ref<const VectorXs>& u) = 0;
91
95 virtual std::shared_ptr<TaskDataAbstract> createData(
96 DataCollectorAbstract* const data);
97
98 const std::shared_ptr<StateAbstract>& get_state() const;
99 std::size_t get_nr() const;
100 std::size_t get_nu() const;
101 bool get_q_dependent() const;
102 bool get_v_dependent() const;
103 bool get_u_dependent() const;
106
110 virtual void print(std::ostream& os) const;
111
112 protected:
113 std::shared_ptr<StateAbstract> state_;
114 std::size_t nr_;
115 std::size_t nu_;
116 bool q_dependent_;
117 bool v_dependent_;
118 bool u_dependent_;
119 bool has_acceleration_;
120};
121
125template <typename _Scalar>
127 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
128
129 typedef _Scalar Scalar;
130 typedef MathBaseTpl<Scalar> MathBase;
131 typedef TaskModelAbstractTpl<Scalar> TaskModelAbstract;
132 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
133 typedef typename MathBase::VectorXs VectorXs;
134 typedef typename MathBase::MatrixXs MatrixXs;
135
145 TaskDataAbstractTpl(TaskModelAbstract* const model,
146 DataCollectorAbstract* const data)
147 : shared(data),
148 compute_acceleration(model->get_has_acceleration()),
149 y(model->get_nr()),
150 v(model->get_nr()),
151 a(model->get_nr()),
152 Yx(model->get_nr(), model->get_state()->get_ndx()),
153 Yu(model->get_nr(), model->get_nu()),
154 Vx(model->get_nr(), model->get_state()->get_ndx()),
155 Vu(model->get_nr(), model->get_nu()),
156 Ax(model->get_nr(), model->get_state()->get_ndx()),
157 Au(model->get_nr(), model->get_nu()) {
158 y.setZero();
159 v.setZero();
160 a.setZero();
161 Yx.setZero();
162 Yu.setZero();
163 Vx.setZero();
164 Vu.setZero();
165 Ax.setZero();
166 Au.setZero();
167 }
168 virtual ~TaskDataAbstractTpl() = default;
169
170 DataCollectorAbstract* shared;
172
173 VectorXs y;
174 VectorXs v;
175 VectorXs a;
176
177 MatrixXs Yx;
178 MatrixXs Yu;
179 MatrixXs Vx;
180 MatrixXs Vu;
181 MatrixXs Ax;
182 MatrixXs Au;
183};
184
185template <typename Scalar>
186std::ostream& operator<<(std::ostream& os,
187 const TaskModelAbstractTpl<Scalar>& model);
188
189} // namespace crocoddyl
190
191/* --- Details -------------------------------------------------------------- */
192#include "crocoddyl/core/task-base.hxx"
193
194CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::TaskModelAbstractTpl)
195CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::TaskDataAbstractTpl)
196
197#endif // CROCODDYL_CORE_TASK_BASE_HPP_
Abstract class for the state representation.
Abstract task model for convergence residuals.
Definition task-base.hpp:47
bool get_has_acceleration() const
Return whether the task defines an acceleration component.
virtual std::shared_ptr< TaskDataAbstract > createData(DataCollectorAbstract *const data)
Allocate task data and bind it to the action model's shared data.
virtual void print(std::ostream &os) const
Print relevant information about the task model.
virtual void calcDiff(const std::shared_ptr< TaskDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute task Jacobians using values stored by calc().
TaskModelAbstractTpl(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, const bool has_acceleration=true)
Initialize the task model.
virtual void calc(const std::shared_ptr< TaskDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)=0
Compute the task quantity, rate, and acceleration.
Preallocated values and derivatives produced by a task model.
TaskDataAbstractTpl(TaskModelAbstract *const model, DataCollectorAbstract *const data)
Allocate and initialize the common task data.