9#ifndef CROCODDYL_MULTIBODY_TASKS_COM_POSITION_HPP_ 10#define CROCODDYL_MULTIBODY_TASKS_COM_POSITION_HPP_ 12#include <pinocchio/algorithm/center-of-mass-derivatives.hpp> 13#include <pinocchio/algorithm/center-of-mass.hpp> 15#include "crocoddyl/core/task-base.hpp" 16#include "crocoddyl/core/utils/conversions.hpp" 17#include "crocoddyl/multibody/data/multibody.hpp" 18#include "crocoddyl/multibody/fwd.hpp" 19#include "crocoddyl/multibody/states/multibody.hpp" 43template <
typename _Scalar>
46 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
49 typedef _Scalar Scalar;
56 typedef typename MathBase::Matrix3xs Matrix3xs;
57 typedef typename MathBase::Vector3s Vector3s;
58 typedef typename MathBase::VectorXs VectorXs;
64 const Vector3s& cref,
const std::size_t nu);
71 const Vector3s& cref);
78 virtual void calc(
const std::shared_ptr<TaskDataAbstract>& data,
79 const Eigen::Ref<const VectorXs>& x,
80 const Eigen::Ref<const VectorXs>& u)
override;
85 virtual void calcDiff(
const std::shared_ptr<TaskDataAbstract>& data,
86 const Eigen::Ref<const VectorXs>& x,
87 const Eigen::Ref<const VectorXs>& u)
override;
93 DataCollectorAbstract*
const data)
override;
98 template <
typename NewScalar>
107 virtual void print(std::ostream& os)
const override;
112 using Base::q_dependent_;
114 using Base::u_dependent_;
115 using Base::v_dependent_;
119 std::shared_ptr<typename StateMultibody::PinocchioModel> pin_model_;
125template <
typename _Scalar>
127 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
129 typedef _Scalar Scalar;
133 typedef typename MathBase::Matrix3xs Matrix3xs;
134 typedef typename MathBase::Vector3s Vector3s;
136 template <
template <
typename Scalar>
class Model>
137 TaskDataCoMPositionTpl(Model<Scalar>*
const model,
138 DataCollectorAbstract*
const data)
140 com(Vector3s::Zero()),
141 vcom(Vector3s::Zero()),
142 acom(Vector3s::Zero()),
143 dvc_dq(3, model->get_state()->get_nv()),
144 dacom_dq(3, model->get_state()->get_nv()),
145 dacom_dv(3, model->get_state()->get_nv()) {
154 "Invalid argument: the shared data should be derived from " 155 "DataCollectorMultibody");
166 virtual ~TaskDataCoMPositionTpl() =
default;
169 std::shared_ptr<JointDataAbstractTpl<Scalar>>
184#include "crocoddyl/multibody/tasks/com-position.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.
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.
TaskModelCoMPositionTpl< NewScalar > cast() const
Cast the task model to a different scalar type.
const Vector3s & get_reference() const
Return the reference CoM position.
TaskModelCoMPositionTpl(std::shared_ptr< StateMultibody > state, const Vector3s &cref, const std::size_t nu)
Construct a CoM position task.
void set_reference(const Vector3s &cref)
Update the reference CoM position.
virtual std::shared_ptr< TaskDataAbstract > createData(DataCollectorAbstract *const data) override
Allocate task data.
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.
virtual void print(std::ostream &os) const override
Print relevant information.
TaskModelCoMPositionTpl(std::shared_ptr< StateMultibody > state, const Vector3s &cref)
Construct a CoM position task using the default control dimension.
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 center-of-mass position task.
Matrix3xs dacom_dv
Partial derivative of CoM acceleration w.r.t. v.
Matrix3xs dvc_dq
Partial derivative of CoM velocity w.r.t. q.
Vector3s acom
Center-of-mass acceleration.
Matrix3xs dacom_dq
Partial derivative of CoM acceleration w.r.t. q.
Vector3s com
Center-of-mass position.
Vector3s vcom
Center-of-mass velocity.
std::shared_ptr< JointDataAbstractTpl< Scalar > > joint
Shared generalized-acceleration data, when available.
DataCollectorAbstract * shared
Shared action-model data collector.
pinocchio::DataTpl< Scalar > * pinocchio
Shared Pinocchio data.