9#ifndef CROCODDYL_MULTIBODY_TASKS_FRAME_PLACEMENT_HPP_ 10#define CROCODDYL_MULTIBODY_TASKS_FRAME_PLACEMENT_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" 49template <
typename _Scalar>
52 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
55 typedef _Scalar Scalar;
62 typedef typename MathBase::Matrix3s Matrix3s;
63 typedef typename MathBase::Matrix6s Matrix6s;
64 typedef typename MathBase::VectorXs VectorXs;
65 typedef pinocchio::MotionTpl<Scalar> Motion;
66 typedef pinocchio::SE3Tpl<Scalar> SE3;
72 const pinocchio::FrameIndex
id,
const SE3& pref,
73 const std::size_t nu);
80 const pinocchio::FrameIndex
id,
const SE3& pref);
86 const pinocchio::FrameIndex
id,
const SE3& pref,
87 const pinocchio::ReferenceFrame
type,
88 const std::size_t nu);
94 const pinocchio::FrameIndex
id,
const SE3& pref,
95 const pinocchio::ReferenceFrame
type);
102 virtual void calc(
const std::shared_ptr<TaskDataAbstract>& data,
103 const Eigen::Ref<const VectorXs>& x,
104 const Eigen::Ref<const VectorXs>& u)
override;
109 virtual void calcDiff(
const std::shared_ptr<TaskDataAbstract>& data,
110 const Eigen::Ref<const VectorXs>& x,
111 const Eigen::Ref<const VectorXs>& u)
override;
117 DataCollectorAbstract*
const data)
override;
122 template <
typename NewScalar>
132 void set_id(
const pinocchio::FrameIndex
id);
139 virtual void print(std::ostream& os)
const override;
144 using Base::q_dependent_;
146 using Base::u_dependent_;
147 using Base::v_dependent_;
150 pinocchio::FrameIndex id_;
153 pinocchio::ReferenceFrame type_;
154 std::shared_ptr<typename StateMultibody::PinocchioModel> pin_model_;
160template <
typename _Scalar>
162 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
164 typedef _Scalar Scalar;
168 typedef typename MathBase::Matrix6s Matrix6s;
169 typedef typename MathBase::Matrix6xs Matrix6xs;
170 typedef pinocchio::MotionTpl<Scalar> Motion;
171 typedef pinocchio::SE3Tpl<Scalar> SE3;
173 template <
template <
typename Scalar>
class Model>
174 TaskDataFramePlacementTpl(Model<Scalar>*
const model,
175 DataCollectorAbstract*
const data)
177 rMf(SE3::Identity()),
178 rJf(Matrix6s::Zero()),
182 Yx_local(6, model->get_state()->get_nv()),
183 fJf(6, model->get_state()->get_nv()),
184 fVdq(6, model->get_state()->get_nv()),
185 fVdv(6, model->get_state()->get_nv()),
186 fAdq(6, model->get_state()->get_nv()),
187 fAdv(6, model->get_state()->get_nv()) {
199 "Invalid argument: the shared data should be derived from " 200 "DataCollectorMultibody");
211 virtual ~TaskDataFramePlacementTpl() =
default;
214 std::shared_ptr<JointDataAbstractTpl<Scalar>>
234#include "crocoddyl/multibody/tasks/frame-placement.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 placement 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.
TaskModelFramePlacementTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const SE3 &pref, const std::size_t nu)
Construct a frame placement task.
TaskModelFramePlacementTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const SE3 &pref, const pinocchio::ReferenceFrame type)
Construct a frame placement task with an explicit reference frame.
TaskModelFramePlacementTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const SE3 &pref)
Construct a frame placement task using the default control dimension.
void set_id(const pinocchio::FrameIndex id)
Update the frame index.
TaskModelFramePlacementTpl< NewScalar > cast() const
Cast the task model to a different scalar type.
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.
const SE3 & get_reference() const
Return the reference placement.
void set_reference(const SE3 &reference)
Update the reference placement.
TaskModelFramePlacementTpl(std::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const SE3 &pref, const pinocchio::ReferenceFrame type, const std::size_t nu)
Construct a frame placement task with an explicit reference frame.
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-placement task.
Motion vf
Frame velocity in the selected reference frame.
Motion y_local
Local pose error used by LOCAL_WORLD_ALIGNED.
Matrix6s rJf
Jacobian of the SE(3) logarithm.
Matrix6xs fAdq
Partial derivative of frame acceleration w.r.t. q.
Matrix6xs fAdv
Partial derivative of frame acceleration w.r.t. v.
Matrix6xs fJf
Frame Jacobian in the selected intermediate 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 selected reference frame.
Matrix6xs fVdq
Partial derivative of frame velocity with respect to q.
SE3 rMf
Pose-error composition for the selected convention.
Matrix6xs Yx_local
Jacobian of the local pose error.
pinocchio::DataTpl< Scalar > * pinocchio
Shared Pinocchio data.