residual-2D-surface.hpp
Go to the documentation of this file.
1 // BSD 3-Clause License
3 //
4 // Copyright (C) 2022 LAAS-CNRS
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
8 
9 #ifndef SOBEC_RESIDUAL_2D_SURFACE_HPP_
10 #define SOBEC_RESIDUAL_2D_SURFACE_HPP_
11 
12 #include <crocoddyl/core/residual-base.hpp>
13 #include <crocoddyl/multibody/data/multibody.hpp>
14 #include <crocoddyl/multibody/fwd.hpp>
15 #include <crocoddyl/multibody/states/multibody.hpp>
16 
17 #include "sobec/fwd.hpp"
18 
19 namespace sobec {
20 using namespace crocoddyl;
30 template <typename _Scalar>
31 class ResidualModel2DSurfaceTpl : public ResidualModelAbstractTpl<_Scalar> {
32  public:
33  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
34 
35  typedef _Scalar Scalar;
36  typedef MathBaseTpl<Scalar> MathBase;
37  typedef ResidualModelAbstractTpl<Scalar> Base;
39  typedef StateMultibodyTpl<Scalar> StateMultibody;
40  typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
41  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
42  typedef typename MathBase::Vector3s Vector3s;
43  typedef typename MathBase::Vector2s Vector2s;
44  typedef typename MathBase::VectorXs VectorXs;
45  typedef typename MathBase::MatrixXs MatrixXs;
46  typedef typename MathBase::Matrix3s Matrix3s;
47 
57  ResidualModel2DSurfaceTpl(boost::shared_ptr<StateMultibody> state,
58  const pinocchio::FrameIndex frame_id,
59  const Vector2s support_translation,
60  const Scalar separation, const Scalar orientation,
61  const Scalar alpha, const std::size_t nu);
62 
73  ResidualModel2DSurfaceTpl(boost::shared_ptr<StateMultibody> state,
74  const pinocchio::FrameIndex frame_id,
75  const Vector2s support_translation,
76  const Scalar separation, const Scalar orientation,
77  const Scalar alpha);
78  virtual ~ResidualModel2DSurfaceTpl();
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  virtual boost::shared_ptr<ResidualDataAbstract> createData(
102  DataCollectorAbstract* const data);
103 
107  const pinocchio::FrameIndex& get_frame_id() const;
108 
112  void set_frame_id(const pinocchio::FrameIndex& fid);
113 
118  void set_Ab(const Vector2s support_translation, const Scalar orientation);
119 
120  const MatrixXs& get_A() const { return A_; }
121  const Vector2s& get_b() const { return b_; }
122 
123  void set_A(const MatrixXs& A) { A_ = A; }
124  void set_b(const Vector2s& b) { b_ = b; }
125 
126  protected:
127  using Base::nu_;
128  using Base::state_;
129  using Base::u_dependent_;
130  using Base::unone_;
131  using Base::v_dependent_;
132 
133  private:
134  pinocchio::FrameIndex frame_id;
135  boost::shared_ptr<typename StateMultibody::PinocchioModel>
136  pin_model_;
137  Vector2s support_translation_; // Coordinates of the support foot
138  Scalar separation_; // Separation between flying foot and support foot
139  Scalar orientation_; // Angle of support foot
140  Scalar alpha_; // Angle of cone limit
141  Vector2s pointA_;
142  Vector2s pointB_;
143  Vector2s pointF_;
144  MatrixXs A_;
145  Vector2s b_;
146 };
147 
148 template <typename _Scalar>
149 struct ResidualData2DSurfaceTpl : public ResidualDataAbstractTpl<_Scalar> {
150  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
151 
152  typedef _Scalar Scalar;
153  typedef MathBaseTpl<Scalar> MathBase;
154  typedef ResidualDataAbstractTpl<Scalar> Base;
155  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
156  typedef typename MathBase::Matrix6xs Matrix6xs;
157  typedef typename MathBase::Matrix3xs Matrix3xs;
158  typedef typename MathBase::VectorXs VectorXs;
159 
160  template <template <typename Scalar> class Model>
161  ResidualData2DSurfaceTpl(Model<Scalar>* const model,
162  DataCollectorAbstract* const data)
163  : Base(model, data), fJf(6, model->get_state()->get_nv()) {
164  fJf.setZero();
165  // Check that proper shared data has been passed
166  DataCollectorMultibodyTpl<Scalar>* d =
167  dynamic_cast<DataCollectorMultibodyTpl<Scalar>*>(shared);
168  if (d == NULL) {
169  throw_pretty(
170  "Invalid argument: the shared data should be derived from "
171  "DataCollectorMultibody");
172  }
173 
174  // Avoids data casting at runtime
175  pinocchio = d->pinocchio;
176  }
177 
178  pinocchio::DataTpl<Scalar>* pinocchio;
180 
181  using Base::r;
182  using Base::Ru;
183  using Base::Rx;
184  using Base::shared;
185 };
186 
187 } // namespace sobec
188 
189 /* --- Details -------------------------------------------------------------- */
190 /* --- Details -------------------------------------------------------------- */
191 /* --- Details -------------------------------------------------------------- */
192 
194 
195 #endif // SOBEC_RESIDUAL_2D_surface_HPP_
sobec::ResidualData2DSurfaceTpl::fJf
Matrix6xs fJf
Local Jacobian of the frame.
Definition: residual-2D-surface.hpp:179
sobec::ResidualModel2DSurfaceTpl::StateMultibody
StateMultibodyTpl< Scalar > StateMultibody
Definition: residual-2D-surface.hpp:39
sobec::ResidualModel2DSurfaceTpl::get_b
const Vector2s & get_b() const
Definition: residual-2D-surface.hpp:121
sobec::ResidualModel2DSurfaceTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-2D-surface.hpp:36
sobec::ResidualData2DSurfaceTpl::Base
ResidualDataAbstractTpl< Scalar > Base
Definition: residual-2D-surface.hpp:154
fwd.hpp
sobec::ResidualModel2DSurfaceTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-2D-surface.hpp:44
residual-2D-surface.hxx
sobec::ResidualModel2DSurfaceTpl::Data
ResidualData2DSurfaceTpl< Scalar > Data
Definition: residual-2D-surface.hpp:38
sobec::ResidualModel2DSurfaceTpl
Cost penalizing the position of one effector with respect to the other.
Definition: residual-2D-surface.hpp:31
sobec
Definition: activation-quad-ref.hpp:19
sobec::ResidualModel2DSurfaceTpl::set_b
void set_b(const Vector2s &b)
Definition: residual-2D-surface.hpp:124
sobec::newcontacts::x
@ x
Definition: contact1d.hpp:26
sobec::ResidualData2DSurfaceTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-2D-surface.hpp:153
sobec::ResidualModel2DSurfaceTpl::Vector3s
MathBase::Vector3s Vector3s
Definition: residual-2D-surface.hpp:42
sobec::ResidualData2DSurfaceTpl::ResidualData2DSurfaceTpl
ResidualData2DSurfaceTpl(Model< Scalar > *const model, DataCollectorAbstract *const data)
Definition: residual-2D-surface.hpp:161
sobec::ResidualModel2DSurfaceTpl::Vector2s
MathBase::Vector2s Vector2s
Definition: residual-2D-surface.hpp:43
sobec::ResidualModel2DSurfaceTpl::ResidualDataAbstract
ResidualDataAbstractTpl< Scalar > ResidualDataAbstract
Definition: residual-2D-surface.hpp:40
sobec::ResidualData2DSurfaceTpl::Matrix6xs
MathBase::Matrix6xs Matrix6xs
Definition: residual-2D-surface.hpp:156
sobec::ResidualModel2DSurfaceTpl::get_A
const MatrixXs & get_A() const
Definition: residual-2D-surface.hpp:120
sobec::ResidualData2DSurfaceTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-2D-surface.hpp:152
sobec::ResidualModel2DSurfaceTpl::Matrix3s
MathBase::Matrix3s Matrix3s
Definition: residual-2D-surface.hpp:46
sobec::ResidualModel2DSurfaceTpl::set_A
void set_A(const MatrixXs &A)
Definition: residual-2D-surface.hpp:123
sobec::ResidualData2DSurfaceTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-2D-surface.hpp:158
sobec::ResidualData2DSurfaceTpl::pinocchio
pinocchio::DataTpl< Scalar > * pinocchio
Pinocchio data.
Definition: residual-2D-surface.hpp:178
sobec::ResidualModel2DSurfaceTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-2D-surface.hpp:35
sobec::ResidualModel2DSurfaceTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-2D-surface.hpp:41
sobec::ResidualModel2DSurfaceTpl::Base
ResidualModelAbstractTpl< Scalar > Base
Definition: residual-2D-surface.hpp:37
sobec::ResidualData2DSurfaceTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-2D-surface.hpp:155
sobec::ResidualModel2DSurfaceTpl::MatrixXs
MathBase::MatrixXs MatrixXs
Definition: residual-2D-surface.hpp:45
sobec::ResidualData2DSurfaceTpl::Matrix3xs
MathBase::Matrix3xs Matrix3xs
Definition: residual-2D-surface.hpp:157
sobec::ResidualData2DSurfaceTpl
Definition: residual-2D-surface.hpp:149