Crocoddyl
frame-translation.hpp
1 
3 // BSD 3-Clause License
4 //
5 // Copyright (C) 2021, LAAS-CNRS, University of Edinburgh
6 // Copyright note valid unless otherwise stated in individual files.
7 // All rights reserved.
9 
10 #ifndef CROCODDYL_MULTIBODY_RESIDUALS_FRAME_TRANSLATION_HPP_
11 #define CROCODDYL_MULTIBODY_RESIDUALS_FRAME_TRANSLATION_HPP_
12 
13 #include <pinocchio/multibody/fwd.hpp>
14 
15 #include "crocoddyl/core/residual-base.hpp"
16 #include "crocoddyl/core/utils/exception.hpp"
17 #include "crocoddyl/multibody/data/multibody.hpp"
18 #include "crocoddyl/multibody/fwd.hpp"
19 #include "crocoddyl/multibody/states/multibody.hpp"
20 
21 namespace crocoddyl {
22 
38 template <typename _Scalar>
40  : public ResidualModelAbstractTpl<_Scalar> {
41  public:
42  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
43 
44  typedef _Scalar Scalar;
51  typedef typename MathBase::VectorXs VectorXs;
52  typedef typename MathBase::Vector3s Vector3s;
53 
62  ResidualModelFrameTranslationTpl(boost::shared_ptr<StateMultibody> state,
63  const pinocchio::FrameIndex,
64  const Vector3s& xref, const std::size_t nu);
65 
75  ResidualModelFrameTranslationTpl(boost::shared_ptr<StateMultibody> state,
76  const pinocchio::FrameIndex id,
77  const Vector3s& xref);
79 
87  virtual void calc(const boost::shared_ptr<ResidualDataAbstract>& data,
88  const Eigen::Ref<const VectorXs>& x,
89  const Eigen::Ref<const VectorXs>& u);
90 
98  virtual void calcDiff(const boost::shared_ptr<ResidualDataAbstract>& data,
99  const Eigen::Ref<const VectorXs>& x,
100  const Eigen::Ref<const VectorXs>& u);
101 
105  virtual boost::shared_ptr<ResidualDataAbstract> createData(
106  DataCollectorAbstract* const data);
107 
111  pinocchio::FrameIndex get_id() const;
112 
116  const Vector3s& get_reference() const;
117 
121  void set_id(const pinocchio::FrameIndex id);
122 
126  void set_reference(const Vector3s& reference);
127 
133  virtual void print(std::ostream& os) const;
134 
135  protected:
136  using Base::nu_;
137  using Base::state_;
138  using Base::u_dependent_;
139  using Base::v_dependent_;
140 
141  private:
142  pinocchio::FrameIndex id_;
143  Vector3s xref_;
144  boost::shared_ptr<typename StateMultibody::PinocchioModel>
145  pin_model_;
146 };
147 
148 template <typename _Scalar>
150  : public ResidualDataAbstractTpl<_Scalar> {
151  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
152 
153  typedef _Scalar Scalar;
157  typedef typename MathBase::Matrix6xs Matrix6xs;
158 
159  template <template <typename Scalar> class Model>
160  ResidualDataFrameTranslationTpl(Model<Scalar>* const model,
161  DataCollectorAbstract* const data)
162  : Base(model, data), fJf(6, model->get_state()->get_nv()) {
163  fJf.setZero();
164  // Check that proper shared data has been passed
167  if (d == NULL) {
168  throw_pretty(
169  "Invalid argument: the shared data should be derived from "
170  "DataCollectorMultibody");
171  }
172 
173  // Avoids data casting at runtime
174  pinocchio = d->pinocchio;
175  }
176 
177  pinocchio::DataTpl<Scalar>* pinocchio;
178  Matrix6xs fJf;
179 
180  using Base::r;
181  using Base::Ru;
182  using Base::Rx;
183  using Base::shared;
184 };
185 
186 } // namespace crocoddyl
187 
188 /* --- Details -------------------------------------------------------------- */
189 /* --- Details -------------------------------------------------------------- */
190 /* --- Details -------------------------------------------------------------- */
191 #include "crocoddyl/multibody/residuals/frame-translation.hxx"
192 
193 #endif // CROCODDYL_MULTIBODY_RESIDUALS_FRAME_TRANSLATION_HPP_
Abstract class for residual models.
boost::shared_ptr< StateAbstract > state_
State description.
std::size_t nu_
Control dimension.
void set_reference(const Vector3s &reference)
Modify the reference frame translation reference.
const Vector3s & get_reference() const
Return the reference frame translation.
virtual void print(std::ostream &os) const
Print relevant information of the frame-translation residual.
void set_id(const pinocchio::FrameIndex id)
Modify the reference frame id.
ResidualModelFrameTranslationTpl(boost::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex, const Vector3s &xref, const std::size_t nu)
Initialize the frame translation residual model.
ResidualModelFrameTranslationTpl(boost::shared_ptr< StateMultibody > state, const pinocchio::FrameIndex id, const Vector3s &xref)
Initialize the frame translation residual model.
virtual void calc(const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)
Compute the frame translation residual.
pinocchio::FrameIndex get_id() const
Return the reference frame id.
virtual void calcDiff(const boost::shared_ptr< ResidualDataAbstract > &data, const Eigen::Ref< const VectorXs > &x, const Eigen::Ref< const VectorXs > &u)
Compute the derivatives of the frame translation residual.
virtual boost::shared_ptr< ResidualDataAbstract > createData(DataCollectorAbstract *const data)
Create the frame translation residual data.
State multibody representation.
Definition: multibody.hpp:35
MatrixXs Ru
Jacobian of the residual vector with respect the control.
MatrixXs Rx
Jacobian of the residual vector with respect the state.
DataCollectorAbstract * shared
Shared data allocated by the action model.
Matrix6xs fJf
Local Jacobian of the frame.
DataCollectorAbstract * shared
Shared data allocated by the action model.
pinocchio::DataTpl< Scalar > * pinocchio
Pinocchio data.