residual-dcm-position.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 CROCODDYL_MULTIBODY_RESIDUAL_DCM_POSITION_HPP_
10 #define CROCODDYL_MULTIBODY_RESIDUAL_DCM_POSITION_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 #include "sobec/fwd.hpp"
17 
18 namespace sobec {
19 using namespace crocoddyl;
20 
36 template <typename _Scalar>
37 class ResidualModelDCMPositionTpl : public ResidualModelAbstractTpl<_Scalar> {
38  public:
39  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
40 
41  typedef _Scalar Scalar;
42  typedef MathBaseTpl<Scalar> MathBase;
43  typedef ResidualModelAbstractTpl<Scalar> Base;
45  typedef StateMultibodyTpl<Scalar> StateMultibody;
46  typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
47  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
48  typedef typename MathBase::Vector3s Vector3s;
49  typedef typename MathBase::VectorXs VectorXs;
50 
58  ResidualModelDCMPositionTpl(boost::shared_ptr<StateMultibody> state,
59  const Vector3s& cref, const double alpha,
60  const std::size_t nu);
61 
70  ResidualModelDCMPositionTpl(boost::shared_ptr<StateMultibody> state,
71  const Vector3s& cref, const double alpha);
72  virtual ~ResidualModelDCMPositionTpl();
73 
81  virtual void calc(const boost::shared_ptr<ResidualDataAbstract>& data,
82  const Eigen::Ref<const VectorXs>& x,
83  const Eigen::Ref<const VectorXs>& u);
84 
92  virtual void calcDiff(const boost::shared_ptr<ResidualDataAbstract>& data,
93  const Eigen::Ref<const VectorXs>& x,
94  const Eigen::Ref<const VectorXs>& u);
95  virtual boost::shared_ptr<ResidualDataAbstract> createData(
96  DataCollectorAbstract* const data);
97 
101  const Vector3s& get_reference() const;
102 
106  void set_reference(const Vector3s& cref);
107 
113  virtual void print(std::ostream& os) const;
114 
115  protected:
116  using Base::nu_;
117  using Base::state_;
118  using Base::u_dependent_;
119  using Base::unone_;
120  using Base::v_dependent_;
121 
122  private:
123  Vector3s cref_;
124  double alpha_;
125  typename StateMultibody::PinocchioModel
126  pin_model_;
127 };
128 
129 template <typename _Scalar>
130 struct ResidualDataDCMPositionTpl : public ResidualDataAbstractTpl<_Scalar> {
131  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
132 
133  typedef _Scalar Scalar;
134  typedef MathBaseTpl<Scalar> MathBase;
135  typedef ResidualDataAbstractTpl<Scalar> Base;
136  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
137  typedef typename MathBase::Matrix3xs Matrix3xs;
138 
139  template <template <typename Scalar> class Model>
140  ResidualDataDCMPositionTpl(Model<Scalar>* const model,
141  DataCollectorAbstract* const data)
142  : Base(model, data), dvcom_dq(3, model->get_state()->get_nv()) {
143  dvcom_dq.setZero();
144  // Check that proper shared data has been passed
145  DataCollectorMultibodyTpl<Scalar>* d =
146  dynamic_cast<DataCollectorMultibodyTpl<Scalar>*>(shared);
147  if (d == NULL) {
148  throw_pretty(
149  "Invalid argument: the shared data should be derived from "
150  "DataCollectorMultibody");
151  }
152 
153  // Avoids data casting at runtime
154  pinocchio = d->pinocchio;
155  }
157  pinocchio::DataTpl<Scalar>* pinocchio;
158  using Base::r;
159  using Base::Ru;
160  using Base::Rx;
161  using Base::shared;
162 };
163 
164 } // namespace sobec
165 
166 /* --- Details -------------------------------------------------------------- */
167 /* --- Details -------------------------------------------------------------- */
168 /* --- Details -------------------------------------------------------------- */
170 
171 #endif // SOBEC_RESIDUAL_DCM_POSITION_HPP_
sobec::ResidualDataDCMPositionTpl::pinocchio
pinocchio::DataTpl< Scalar > * pinocchio
Pinocchio data.
Definition: residual-dcm-position.hpp:157
sobec::ResidualModelDCMPositionTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-dcm-position.hpp:49
fwd.hpp
sobec::ResidualDataDCMPositionTpl::Base
ResidualDataAbstractTpl< Scalar > Base
Definition: residual-dcm-position.hpp:135
sobec::ResidualModelDCMPositionTpl::Data
ResidualDataDCMPositionTpl< Scalar > Data
Definition: residual-dcm-position.hpp:44
sobec::ResidualModelDCMPositionTpl::Base
ResidualModelAbstractTpl< Scalar > Base
Definition: residual-dcm-position.hpp:43
sobec::ResidualModelDCMPositionTpl::StateMultibody
StateMultibodyTpl< Scalar > StateMultibody
Definition: residual-dcm-position.hpp:45
sobec::ResidualModelDCMPositionTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-dcm-position.hpp:42
sobec::ResidualDataDCMPositionTpl::dvcom_dq
Matrix3xs dvcom_dq
Definition: residual-dcm-position.hpp:156
residual-dcm-position.hxx
sobec::ResidualDataDCMPositionTpl::ResidualDataDCMPositionTpl
ResidualDataDCMPositionTpl(Model< Scalar > *const model, DataCollectorAbstract *const data)
Definition: residual-dcm-position.hpp:140
sobec::ResidualModelDCMPositionTpl
DCM position residual.
Definition: residual-dcm-position.hpp:37
sobec::ResidualModelDCMPositionTpl::Vector3s
MathBase::Vector3s Vector3s
Definition: residual-dcm-position.hpp:48
sobec::ResidualDataDCMPositionTpl::Matrix3xs
MathBase::Matrix3xs Matrix3xs
Definition: residual-dcm-position.hpp:137
sobec
Definition: activation-quad-ref.hpp:19
sobec::ResidualModelDCMPositionTpl::ResidualDataAbstract
ResidualDataAbstractTpl< Scalar > ResidualDataAbstract
Definition: residual-dcm-position.hpp:46
sobec::ResidualDataDCMPositionTpl
Definition: residual-dcm-position.hpp:130
sobec::newcontacts::x
@ x
Definition: contact1d.hpp:26
sobec::ResidualDataDCMPositionTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-dcm-position.hpp:136
sobec::ResidualModelDCMPositionTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-dcm-position.hpp:47
sobec::ResidualModelDCMPositionTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-dcm-position.hpp:41
sobec::ResidualDataDCMPositionTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-dcm-position.hpp:133
sobec::ResidualDataDCMPositionTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-dcm-position.hpp:134