residual-fly-angle.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_FLY_ANGLE_HPP_
10 #define SOBEC_RESIDUAL_FLY_ANGLE_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;
31 template <typename _Scalar>
32 class ResidualModelFlyAngleTpl : public ResidualModelAbstractTpl<_Scalar> {
33  public:
34  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
35 
36  typedef _Scalar Scalar;
37  typedef MathBaseTpl<Scalar> MathBase;
38  typedef ResidualModelAbstractTpl<Scalar> Base;
40  typedef StateMultibodyTpl<Scalar> StateMultibody;
41  typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
42  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
43  typedef typename MathBase::Vector3s Vector3s;
44  typedef typename MathBase::VectorXs VectorXs;
45  typedef typename MathBase::MatrixXs MatrixXs;
46  typedef typename MathBase::Matrix3s Matrix3s;
47 
57  ResidualModelFlyAngleTpl(boost::shared_ptr<StateMultibody> state,
58  const pinocchio::FrameIndex frame_id,
59  const Scalar slope, const Scalar height,
60  const Scalar dist, const Scalar width,
61  const std::size_t nu);
62 
73  ResidualModelFlyAngleTpl(boost::shared_ptr<StateMultibody> state,
74  const pinocchio::FrameIndex frame_id,
75  const Scalar slope, const Scalar height,
76  const Scalar dist, const Scalar width);
77  virtual ~ResidualModelFlyAngleTpl();
78 
86  virtual void calc(const boost::shared_ptr<ResidualDataAbstract>& data,
87  const Eigen::Ref<const VectorXs>& x,
88  const Eigen::Ref<const VectorXs>& u);
89 
97  virtual void calcDiff(const boost::shared_ptr<ResidualDataAbstract>& data,
98  const Eigen::Ref<const VectorXs>& x,
99  const Eigen::Ref<const VectorXs>& u);
100  virtual boost::shared_ptr<ResidualDataAbstract> createData(
101  DataCollectorAbstract* const data);
102 
106  const pinocchio::FrameIndex& get_frame_id() const;
107 
111  void set_frame_id(const pinocchio::FrameIndex& fid);
112 
113  const Scalar getSlope() const { return slope; }
114  void setSlope(const Scalar s) { slope = s; }
115 
116  protected:
117  using Base::nu_;
118  using Base::state_;
119  using Base::u_dependent_;
120  using Base::unone_;
121  using Base::v_dependent_;
122 
123  private:
124  Scalar height;
125  Scalar dist;
126  Scalar width;
127  pinocchio::FrameIndex frame_id;
128  Scalar slope; // multiplication in front of the altitude in the cost
129  typename StateMultibody::PinocchioModel
130  pin_model_;
131 };
132 
133 template <typename _Scalar>
134 struct ResidualDataFlyAngleTpl : public ResidualDataAbstractTpl<_Scalar> {
135  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
136 
137  typedef _Scalar Scalar;
138  typedef MathBaseTpl<Scalar> MathBase;
139  typedef ResidualDataAbstractTpl<Scalar> Base;
140  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
141  typedef typename MathBase::Matrix6xs Matrix6xs;
142  typedef typename MathBase::Matrix3xs Matrix3xs;
143  typedef typename MathBase::Matrix3s Matrix3s;
144  typedef typename MathBase::VectorXs VectorXs;
145 
146  template <template <typename Scalar> class Model>
147  ResidualDataFlyAngleTpl(Model<Scalar>* const model,
148  DataCollectorAbstract* const data)
149  : Base(model, data),
150  d_dq(6, model->get_state()->get_nv()),
151  d_dv(6, model->get_state()->get_nv()),
152  l_dnu_dq(6, model->get_state()->get_nv()),
153  l_dnu_dv(6, model->get_state()->get_nv()),
154  o_dv_dq(3, model->get_state()->get_nv()),
155  o_dv_dv(3, model->get_state()->get_nv()),
156  o_Jw(3, model->get_state()->get_nv()),
157  vxJ(3, model->get_state()->get_nv()) {
158  // dvcom_dq.setZero();
159  // Check that proper shared data has been passed
160  DataCollectorMultibodyTpl<Scalar>* d =
161  dynamic_cast<DataCollectorMultibodyTpl<Scalar>*>(shared);
162  if (d == NULL) {
163  throw_pretty(
164  "Invalid argument: the shared data should be derived from "
165  "DataCollectorMultibody");
166  }
167 
168  // Avoids data casting at runtime
169  pinocchio = d->pinocchio;
170  // Clean buffer as pinocchio not necessarily initialize the memory.
171  d_dq.fill(0);
172  d_dv.fill(0);
173  l_dnu_dq.fill(0);
174  l_dnu_dv.fill(0);
175  o_dv_dq.fill(0);
176  o_dv_dv.fill(0);
177  o_Jw.fill(0);
178  vxJ.fill(0);
179  rotation_alpha.fill(0);
180  rotation_alpha_dt.fill(0);
181  }
182 
183  pinocchio::DataTpl<Scalar>* pinocchio;
185  Matrix6xs l_dnu_dq, l_dnu_dv;
186  Matrix3xs o_dv_dq, o_dv_dv, o_Jw, vxJ;
187 
188  Scalar ez;
189  Scalar sig;
190  Scalar alpha;
191  Scalar sig_dt;
192  Scalar sig_ddt;
193  Scalar alpha_dt;
196  using Base::r;
197  using Base::Ru;
198  using Base::Rx;
199  using Base::shared;
200 };
201 
202 } // namespace sobec
203 
204 /* --- Details -------------------------------------------------------------- */
205 /* --- Details -------------------------------------------------------------- */
206 /* --- Details -------------------------------------------------------------- */
207 
209 
210 #endif // SOBEC_RESIDUAL_FLY_ANGLE_HPP_
sobec::ResidualDataFlyAngleTpl::rotation_alpha_dt
Matrix3s rotation_alpha_dt
Definition: residual-fly-angle.hpp:195
sobec::ResidualModelFlyAngleTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-fly-angle.hpp:37
sobec::ResidualDataFlyAngleTpl::Matrix6xs
MathBase::Matrix6xs Matrix6xs
Definition: residual-fly-angle.hpp:141
sobec::ResidualModelFlyAngleTpl::ResidualDataAbstract
ResidualDataAbstractTpl< Scalar > ResidualDataAbstract
Definition: residual-fly-angle.hpp:41
sobec::ResidualModelFlyAngleTpl::MatrixXs
MathBase::MatrixXs MatrixXs
Definition: residual-fly-angle.hpp:45
sobec::ResidualModelFlyAngleTpl::Base
ResidualModelAbstractTpl< Scalar > Base
Definition: residual-fly-angle.hpp:38
sobec::ResidualDataFlyAngleTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-fly-angle.hpp:137
sobec::ResidualDataFlyAngleTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-fly-angle.hpp:140
sobec::ResidualDataFlyAngleTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-fly-angle.hpp:144
sobec::ResidualModelFlyAngleTpl::Data
ResidualDataFlyAngleTpl< Scalar > Data
Definition: residual-fly-angle.hpp:39
fwd.hpp
sobec::ResidualDataFlyAngleTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-fly-angle.hpp:138
sobec::ResidualDataFlyAngleTpl::ez
Scalar ez
Definition: residual-fly-angle.hpp:188
sobec::ResidualDataFlyAngleTpl::alpha
Scalar alpha
Definition: residual-fly-angle.hpp:190
sobec::ResidualDataFlyAngleTpl::sig_ddt
Scalar sig_ddt
Definition: residual-fly-angle.hpp:192
sobec::ResidualDataFlyAngleTpl::ResidualDataFlyAngleTpl
ResidualDataFlyAngleTpl(Model< Scalar > *const model, DataCollectorAbstract *const data)
Definition: residual-fly-angle.hpp:147
sobec::ResidualModelFlyAngleTpl::setSlope
void setSlope(const Scalar s)
Definition: residual-fly-angle.hpp:114
sobec::ResidualDataFlyAngleTpl::sig
Scalar sig
Definition: residual-fly-angle.hpp:189
sobec::ResidualModelFlyAngleTpl::getSlope
const Scalar getSlope() const
Definition: residual-fly-angle.hpp:113
residual-fly-angle.hxx
sobec::ResidualModelFlyAngleTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-fly-angle.hpp:42
sobec::ResidualDataFlyAngleTpl::d_dv
Matrix6xs d_dv
Definition: residual-fly-angle.hpp:184
sobec::ResidualModelFlyAngleTpl::Matrix3s
MathBase::Matrix3s Matrix3s
Definition: residual-fly-angle.hpp:46
sobec::ResidualDataFlyAngleTpl::Matrix3s
MathBase::Matrix3s Matrix3s
Definition: residual-fly-angle.hpp:143
sobec::ResidualModelFlyAngleTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-fly-angle.hpp:36
sobec::ResidualDataFlyAngleTpl::vxJ
Matrix3xs vxJ
Definition: residual-fly-angle.hpp:186
sobec
Definition: activation-quad-ref.hpp:19
sobec::ResidualDataFlyAngleTpl::alpha_dt
Scalar alpha_dt
Definition: residual-fly-angle.hpp:193
sobec::ResidualDataFlyAngleTpl::l_dnu_dv
Matrix6xs l_dnu_dv
Definition: residual-fly-angle.hpp:185
sobec::ResidualDataFlyAngleTpl
Definition: residual-fly-angle.hpp:134
sobec::newcontacts::x
@ x
Definition: contact1d.hpp:26
sobec::ResidualModelFlyAngleTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-fly-angle.hpp:44
sobec::ResidualModelFlyAngleTpl::Vector3s
MathBase::Vector3s Vector3s
Definition: residual-fly-angle.hpp:43
sobec::ResidualDataFlyAngleTpl::pinocchio
pinocchio::DataTpl< Scalar > * pinocchio
Pinocchio data.
Definition: residual-fly-angle.hpp:183
sobec::ResidualModelFlyAngleTpl
Cost penalizing high horizontal velocity near zero altitude.
Definition: residual-fly-angle.hpp:32
sobec::ResidualModelFlyAngleTpl::StateMultibody
StateMultibodyTpl< Scalar > StateMultibody
Definition: residual-fly-angle.hpp:40
sobec::ResidualDataFlyAngleTpl::sig_dt
Scalar sig_dt
Definition: residual-fly-angle.hpp:191
sobec::ResidualDataFlyAngleTpl::Matrix3xs
MathBase::Matrix3xs Matrix3xs
Definition: residual-fly-angle.hpp:142
sobec::ResidualDataFlyAngleTpl::Base
ResidualDataAbstractTpl< Scalar > Base
Definition: residual-fly-angle.hpp:139
sobec::ResidualDataFlyAngleTpl::rotation_alpha
Matrix3s rotation_alpha
Definition: residual-fly-angle.hpp:194