Crocoddyl
Loading...
Searching...
No Matches
joint-position.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_JOINT_POSITION_HPP_
10#define CROCODDYL_MULTIBODY_TASKS_JOINT_POSITION_HPP_
11
12#include "crocoddyl/core/data/joint.hpp"
13#include "crocoddyl/core/task-base.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
41template <typename _Scalar>
43 public:
44 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
45 CROCODDYL_DERIVED_CAST(TaskModelBase, TaskModelJointPositionTpl)
46
47 typedef _Scalar Scalar;
48 typedef MathBaseTpl<Scalar> MathBase;
51 typedef TaskDataAbstractTpl<Scalar> TaskDataAbstract;
52 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
53 typedef StateMultibodyTpl<Scalar> StateMultibody;
54 typedef typename MathBase::VectorXs VectorXs;
55
64 TaskModelJointPositionTpl(std::shared_ptr<StateMultibody> state,
65 const VectorXs& xref, const VectorXs& aref,
66 const std::size_t nu);
67
77 TaskModelJointPositionTpl(std::shared_ptr<StateMultibody> state,
78 const VectorXs& xref, const VectorXs& aref);
79
87 TaskModelJointPositionTpl(std::shared_ptr<StateMultibody> state,
88 const VectorXs& xref, const std::size_t nu);
89
98 TaskModelJointPositionTpl(std::shared_ptr<StateMultibody> state,
99 const VectorXs& xref);
100 virtual ~TaskModelJointPositionTpl() = default;
101
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;
105
106 virtual void calcDiff(const std::shared_ptr<TaskDataAbstract>& data,
107 const Eigen::Ref<const VectorXs>& x,
108 const Eigen::Ref<const VectorXs>& u) override;
109
110 virtual std::shared_ptr<TaskDataAbstract> createData(
111 DataCollectorAbstract* const data) override;
112
113 template <typename NewScalar>
115
116 const VectorXs& get_reference() const;
117 const VectorXs& get_acceleration_reference() const;
118 void set_reference(const VectorXs& xref);
119 void set_acceleration_reference(const VectorXs& aref);
120
121 virtual void print(std::ostream& os) const override;
122
123 protected:
124 using Base::nr_;
125 using Base::nu_;
126 using Base::state_;
127
128 private:
129 VectorXs xref_;
130 VectorXs aref_;
131};
132
136template <typename _Scalar>
138 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
139
140 typedef _Scalar Scalar;
141 typedef MathBaseTpl<Scalar> MathBase;
142 typedef TaskDataAbstractTpl<Scalar> Base;
143 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
144 typedef typename MathBase::VectorXs VectorXs;
145 typedef typename MathBase::MatrixXs MatrixXs;
146
154 template <template <typename Scalar> class Model>
155 TaskDataJointPositionTpl(Model<Scalar>* const model,
156 DataCollectorAbstract* const data)
157 : Base(model, data),
158 pinocchio(nullptr),
159 dx(model->get_state()->get_ndx()),
160 Jdiff(model->get_state()->get_ndx(), model->get_state()->get_ndx()) {
161 dx.setZero();
162 Jdiff.setZero();
163
166 if (j != nullptr) {
167 joint = j->joint;
168 }
171 if (d != nullptr) {
172 pinocchio = d->pinocchio;
173 }
174 }
175
176 virtual ~TaskDataJointPositionTpl() = default;
177
178 pinocchio::DataTpl<Scalar>*
180 std::shared_ptr<JointDataAbstractTpl<Scalar>>
182 VectorXs dx;
183 MatrixXs Jdiff;
184
185 using Base::shared;
186};
187
188} // namespace crocoddyl
189
190/* --- Details -------------------------------------------------------------- */
191#include "crocoddyl/multibody/tasks/joint-position.hxx"
192
193CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::TaskModelJointPositionTpl)
194CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::TaskDataJointPositionTpl)
195
196#endif // CROCODDYL_MULTIBODY_TASKS_JOINT_POSITION_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 task Jacobians using values stored by calc().
TaskModelJointPositionTpl(std::shared_ptr< StateMultibody > state, const VectorXs &xref, const VectorXs &aref)
Initialize with state and acceleration references.
TaskModelJointPositionTpl(std::shared_ptr< StateMultibody > state, const VectorXs &xref, const std::size_t nu)
Initialize with a state reference and zero acceleration reference.
virtual std::shared_ptr< TaskDataAbstract > createData(DataCollectorAbstract *const data) override
Allocate task data and bind it to the action model's shared 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 quantity, rate, and acceleration.
TaskModelJointPositionTpl(std::shared_ptr< StateMultibody > state, const VectorXs &xref, const VectorXs &aref, const std::size_t nu)
Initialize with state and acceleration references.
TaskModelJointPositionTpl(std::shared_ptr< StateMultibody > state, const VectorXs &xref)
Initialize with a state reference and zero acceleration reference.
virtual void print(std::ostream &os) const override
Print relevant information about the task model.
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 joint-position task.
TaskDataJointPositionTpl(Model< Scalar > *const model, DataCollectorAbstract *const data)
Bind the task data to the available generalized-acceleration data.
std::shared_ptr< JointDataAbstractTpl< Scalar > > joint