9#ifndef CROCODDYL_MULTIBODY_TASKS_FRAME_TRANSLATION_HPP_ 10#define CROCODDYL_MULTIBODY_TASKS_FRAME_TRANSLATION_HPP_ 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" 40template <
typename _Scalar>
43 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
46 typedef _Scalar Scalar;
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;
63 const pinocchio::FrameIndex
id,
64 const Vector3s& xref,
const std::size_t nu);
71 const pinocchio::FrameIndex
id,
73 const pinocchio::ReferenceFrame
type,
74 const std::size_t nu);
81 const pinocchio::FrameIndex
id,
82 const Vector3s& xref);
89 const pinocchio::FrameIndex
id,
91 const pinocchio::ReferenceFrame
type);
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;
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;
113 DataCollectorAbstract*
const data)
override;
118 template <
typename NewScalar>
128 void set_id(
const pinocchio::FrameIndex
id);
135 virtual void print(std::ostream& os)
const override;
140 using Base::q_dependent_;
142 using Base::u_dependent_;
143 using Base::v_dependent_;
146 pinocchio::FrameIndex id_;
148 pinocchio::ReferenceFrame type_;
149 std::shared_ptr<typename StateMultibody::PinocchioModel> pin_model_;
155template <
typename _Scalar>
157 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
159 typedef _Scalar Scalar;
163 typedef typename MathBase::Matrix6xs Matrix6xs;
164 typedef pinocchio::MotionTpl<Scalar> Motion;
166 template <
template <
typename Scalar>
class Model>
167 TaskDataFrameTranslationTpl(Model<Scalar>*
const model,
168 DataCollectorAbstract*
const data)
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()) {
187 "Invalid argument: the shared data should be derived from " 188 "DataCollectorMultibody");
199 virtual ~TaskDataFrameTranslationTpl() =
default;
202 std::shared_ptr<JointDataAbstractTpl<Scalar>>
218#include "crocoddyl/multibody/tasks/frame-translation.hxx" State multibody representation.
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.
Frame translation 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.
DataCollectorAbstract * shared
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.