Crocoddyl
Loading...
Searching...
No Matches
frame-translation.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_MULTIBODY_TASKS_FRAME_TRANSLATION_HPP_
10#define CROCODDYL_MULTIBODY_TASKS_FRAME_TRANSLATION_HPP_
11
12#include "crocoddyl/core/task-base.hpp"
13#include "crocoddyl/core/utils/conversions.hpp"
14#include "crocoddyl/multibody/data/multibody.hpp"
15#include "crocoddyl/multibody/fwd.hpp"
16#include "crocoddyl/multibody/states/multibody.hpp"
17
18namespace crocoddyl {
19
40template <typename _Scalar>
42 public:
43 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
44 CROCODDYL_DERIVED_CAST(TaskModelBase, TaskModelFrameTranslationTpl)
45
46 typedef _Scalar Scalar;
47 typedef MathBaseTpl<Scalar> MathBase;
49 typedef TaskDataAbstractTpl<Scalar> TaskDataAbstract;
51 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
52 typedef StateMultibodyTpl<Scalar> StateMultibody;
53 typedef typename MathBase::Matrix3s Matrix3s;
54 typedef typename MathBase::Matrix6xs Matrix6xs;
55 typedef typename MathBase::Vector3s Vector3s;
56 typedef typename MathBase::VectorXs VectorXs;
57 typedef pinocchio::MotionTpl<Scalar> Motion;
58
62 TaskModelFrameTranslationTpl(std::shared_ptr<StateMultibody> state,
63 const pinocchio::FrameIndex id,
64 const Vector3s& xref, const std::size_t nu);
65
70 TaskModelFrameTranslationTpl(std::shared_ptr<StateMultibody> state,
71 const pinocchio::FrameIndex id,
72 const Vector3s& xref,
73 const pinocchio::ReferenceFrame type,
74 const std::size_t nu);
75
80 TaskModelFrameTranslationTpl(std::shared_ptr<StateMultibody> state,
81 const pinocchio::FrameIndex id,
82 const Vector3s& xref);
83
88 TaskModelFrameTranslationTpl(std::shared_ptr<StateMultibody> state,
89 const pinocchio::FrameIndex id,
90 const Vector3s& xref,
91 const pinocchio::ReferenceFrame type);
92
93 virtual ~TaskModelFrameTranslationTpl() = default;
94
98 virtual void calc(const std::shared_ptr<TaskDataAbstract>& data,
99 const Eigen::Ref<const VectorXs>& x,
100 const Eigen::Ref<const VectorXs>& u) override;
101
105 virtual void calcDiff(const std::shared_ptr<TaskDataAbstract>& data,
106 const Eigen::Ref<const VectorXs>& x,
107 const Eigen::Ref<const VectorXs>& u) override;
108
112 virtual std::shared_ptr<TaskDataAbstract> createData(
113 DataCollectorAbstract* const data) override;
114
118 template <typename NewScalar>
120
122 pinocchio::FrameIndex get_id() const;
124 const Vector3s& get_reference() const;
126 pinocchio::ReferenceFrame get_type() const;
128 void set_id(const pinocchio::FrameIndex id);
130 void set_reference(const Vector3s& reference);
132 void set_type(const pinocchio::ReferenceFrame type);
133
135 virtual void print(std::ostream& os) const override;
136
137 protected:
138 using Base::nr_;
139 using Base::nu_;
140 using Base::q_dependent_;
141 using Base::state_;
142 using Base::u_dependent_;
143 using Base::v_dependent_;
144
145 private:
146 pinocchio::FrameIndex id_;
147 Vector3s xref_;
148 pinocchio::ReferenceFrame type_;
149 std::shared_ptr<typename StateMultibody::PinocchioModel> pin_model_;
150};
151
155template <typename _Scalar>
156struct TaskDataFrameTranslationTpl : public TaskDataAbstractTpl<_Scalar> {
157 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
158
159 typedef _Scalar Scalar;
160 typedef MathBaseTpl<Scalar> MathBase;
161 typedef TaskDataAbstractTpl<Scalar> Base;
162 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
163 typedef typename MathBase::Matrix6xs Matrix6xs;
164 typedef pinocchio::MotionTpl<Scalar> Motion;
165
166 template <template <typename Scalar> class Model>
167 TaskDataFrameTranslationTpl(Model<Scalar>* const model,
168 DataCollectorAbstract* const data)
169 : Base(model, data),
170 vf(Motion::Zero()),
171 af(Motion::Zero()),
172 fJf(6, model->get_state()->get_nv()),
173 fVdq(6, model->get_state()->get_nv()),
174 fVdv(6, model->get_state()->get_nv()),
175 fAdq(6, model->get_state()->get_nv()),
176 fAdv(6, model->get_state()->get_nv()) {
177 fJf.setZero();
178 fVdq.setZero();
179 fVdv.setZero();
180 fAdq.setZero();
181 fAdv.setZero();
182
185 if (d == nullptr) {
186 throw_pretty(
187 "Invalid argument: the shared data should be derived from "
188 "DataCollectorMultibody");
189 }
190
191 pinocchio = d->pinocchio;
194 if (j != nullptr) {
195 joint = j->joint;
196 }
197 }
198
199 virtual ~TaskDataFrameTranslationTpl() = default;
200
201 pinocchio::DataTpl<Scalar>* pinocchio;
202 std::shared_ptr<JointDataAbstractTpl<Scalar>>
204 Motion vf;
205 Motion af;
206 Matrix6xs fJf;
207 Matrix6xs fVdq;
208 Matrix6xs fVdv;
209 Matrix6xs fAdq;
210 Matrix6xs fAdv;
211
212 using Base::shared;
213};
214
215} // namespace crocoddyl
216
217/* --- Details -------------------------------------------------------------- */
218#include "crocoddyl/multibody/tasks/frame-translation.hxx"
219
220CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::TaskModelFrameTranslationTpl)
221CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::TaskDataFrameTranslationTpl)
222
223#endif // CROCODDYL_MULTIBODY_TASKS_FRAME_TRANSLATION_HPP_
State multibody representation.
Definition multibody.hpp:34
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 calcDiff(const std::shared_ptr< TaskDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the task Jacobians.
void set_reference(const Vector3s &reference)
Update the reference translation.
const Vector3s & get_reference() const
Return the reference translation.
TaskModelFrameTranslationTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const Vector3s &xref, const pinocchio::ReferenceFrame type)
Construct a frame translation task with an explicit reference frame convention.
void set_id(const pinocchio::FrameIndex id)
Update the frame index.
TaskModelFrameTranslationTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const Vector3s &xref)
Construct a frame translation task using the default control dimension and LOCAL coordinates.
pinocchio::FrameIndex get_id() const
Return the frame index.
void set_type(const pinocchio::ReferenceFrame type)
Update the reference frame convention.
virtual std::shared_ptr< TaskDataAbstract > createData(DataCollectorAbstract *const data) override
Allocate task data.
pinocchio::ReferenceFrame get_type() const
Return the reference frame convention.
virtual void calc(const std::shared_ptr< TaskDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u) override
Compute the task value and task rate.
TaskModelFrameTranslationTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const Vector3s &xref, const pinocchio::ReferenceFrame type, const std::size_t nu)
Construct a frame translation task with an explicit reference frame convention.
TaskModelFrameTranslationTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const Vector3s &xref, const std::size_t nu)
Construct a frame translation task using LOCAL coordinates.
TaskModelFrameTranslationTpl< NewScalar > cast() const
Cast the task model to a different scalar type.
virtual void print(std::ostream &os) const override
Print relevant information.
Preallocated values and derivatives produced by a task model.
TaskDataAbstractTpl(TaskModelAbstract *const model, DataCollectorAbstract *const data)
Allocate and initialize the common task data.
Cached values and derivatives for the frame-translation task.
Motion vf
Frame velocity in the task's reference-frame convention.
Matrix6xs fAdq
Partial derivative of frame acceleration w.r.t. q.
Matrix6xs fAdv
Partial derivative of frame acceleration w.r.t. v.
Matrix6xs fJf
Local Jacobian of the frame.
Matrix6xs fVdv
Partial derivative of frame velocity with respect to v.
std::shared_ptr< JointDataAbstractTpl< Scalar > > joint
Shared generalized-acceleration data, when available.
DataCollectorAbstract * shared
Shared action-model data collector.
Motion af
Frame acceleration in the task's reference-frame convention.
Matrix6xs fVdq
Partial derivative of frame velocity with respect to q.
pinocchio::DataTpl< Scalar > * pinocchio
Shared Pinocchio data.