residual-feet-collision.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_FEET_COLLISION_HPP_
10 #define SOBEC_RESIDUAL_FEET_COLLISION_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;
28 template <typename _Scalar>
29 class ResidualModelFeetCollisionTpl : public ResidualModelAbstractTpl<_Scalar> {
30  public:
31  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
32 
33  typedef _Scalar Scalar;
34  typedef MathBaseTpl<Scalar> MathBase;
35  typedef ResidualModelAbstractTpl<Scalar> Base;
37  typedef StateMultibodyTpl<Scalar> StateMultibody;
38  typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
39  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
40  typedef typename MathBase::VectorXs VectorXs;
41 
51  ResidualModelFeetCollisionTpl(boost::shared_ptr<StateMultibody> state,
52  const pinocchio::FrameIndex frame_id1,
53  const pinocchio::FrameIndex frame_id2,
54  const std::size_t nu);
55 
65  ResidualModelFeetCollisionTpl(boost::shared_ptr<StateMultibody> state,
66  const pinocchio::FrameIndex frame_id1,
67  const pinocchio::FrameIndex frame_id2);
69 
77  virtual void calc(const boost::shared_ptr<ResidualDataAbstract>& data,
78  const Eigen::Ref<const VectorXs>& x,
79  const Eigen::Ref<const VectorXs>& u);
80 
88  virtual void calcDiff(const boost::shared_ptr<ResidualDataAbstract>& data,
89  const Eigen::Ref<const VectorXs>& x,
90  const Eigen::Ref<const VectorXs>& u);
91  virtual boost::shared_ptr<ResidualDataAbstract> createData(
92  DataCollectorAbstract* const data);
93 
95  const pinocchio::FrameIndex& get_frame_id1() const;
97  const pinocchio::FrameIndex& get_frame_id2() const;
98 
100  void set_frame_id1(const pinocchio::FrameIndex& fid1);
102  void set_frame_id2(const pinocchio::FrameIndex& fid2);
103 
104  protected:
105  using Base::nu_;
106  using Base::state_;
107  using Base::u_dependent_;
108  using Base::unone_;
109  using Base::v_dependent_;
110 
111  private:
112  pinocchio::FrameIndex frame_id1;
113  pinocchio::FrameIndex frame_id2;
114  typename StateMultibody::PinocchioModel
115  pin_model_;
116 };
117 
118 template <typename _Scalar>
119 struct ResidualDataFeetCollisionTpl : public ResidualDataAbstractTpl<_Scalar> {
120  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
121 
122  typedef _Scalar Scalar;
123  typedef MathBaseTpl<Scalar> MathBase;
124  typedef ResidualDataAbstractTpl<Scalar> Base;
125  typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
126  typedef typename MathBase::Vector3s Vector3s;
127  typedef Eigen::Matrix<Scalar, 2, Eigen::Dynamic> Matrix2xs;
128  typedef typename MathBase::Matrix6xs Matrix6xs;
129  typedef typename MathBase::VectorXs VectorXs;
130 
131  template <template <typename Scalar> class Model>
132  ResidualDataFeetCollisionTpl(Model<Scalar>* const model,
133  DataCollectorAbstract* const data)
134  : Base(model, data),
135  J1(6, model->get_state()->get_nv()),
136  J2(6, model->get_state()->get_nv()),
137  dJ(2, model->get_state()->get_nv()),
138  p1p2(3) {
139  // Check that proper shared data has been passed
140  DataCollectorMultibodyTpl<Scalar>* d =
141  dynamic_cast<DataCollectorMultibodyTpl<Scalar>*>(shared);
142  if (d == NULL) {
143  throw_pretty(
144  "Invalid argument: the shared data should be derived from "
145  "DataCollectorMultibody");
146  }
147 
148  // Avoids data casting at runtime
149  pinocchio = d->pinocchio;
150 
151  J1.fill(0);
152  J2.fill(0);
153  dJ.fill(0);
154  p1p2.fill(0);
155  }
156 
157  pinocchio::DataTpl<Scalar>* pinocchio;
161  using Base::r;
162  using Base::Ru;
163  using Base::Rx;
164  using Base::shared;
165 };
166 
167 } // namespace sobec
168 
169 /* --- Details -------------------------------------------------------------- */
170 /* --- Details -------------------------------------------------------------- */
171 /* --- Details -------------------------------------------------------------- */
172 
174 
175 #endif // SOBEC_RESIDUAL_FEET_COLLISION_HPP_
sobec::ResidualDataFeetCollisionTpl::Vector3s
MathBase::Vector3s Vector3s
Definition: residual-feet-collision.hpp:126
sobec::ResidualDataFeetCollisionTpl::p1p2
Vector3s p1p2
Definition: residual-feet-collision.hpp:160
sobec::ResidualModelFeetCollisionTpl::Base
ResidualModelAbstractTpl< Scalar > Base
Definition: residual-feet-collision.hpp:35
residual-feet-collision.hxx
sobec::ResidualModelFeetCollisionTpl
Cost penalizing distance between two frames r=||f1.translation-f2.translation||.
Definition: residual-feet-collision.hpp:29
sobec::ResidualDataFeetCollisionTpl::Matrix2xs
Eigen::Matrix< Scalar, 2, Eigen::Dynamic > Matrix2xs
Definition: residual-feet-collision.hpp:127
sobec::ResidualModelFeetCollisionTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-feet-collision.hpp:33
fwd.hpp
sobec::ResidualDataFeetCollisionTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-feet-collision.hpp:129
sobec::ResidualModelFeetCollisionTpl::StateMultibody
StateMultibodyTpl< Scalar > StateMultibody
Definition: residual-feet-collision.hpp:37
sobec::ResidualDataFeetCollisionTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-feet-collision.hpp:123
sobec::ResidualDataFeetCollisionTpl::Matrix6xs
MathBase::Matrix6xs Matrix6xs
Definition: residual-feet-collision.hpp:128
sobec::ResidualModelFeetCollisionTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-feet-collision.hpp:39
sobec::ResidualModelFeetCollisionTpl::ResidualDataAbstract
ResidualDataAbstractTpl< Scalar > ResidualDataAbstract
Definition: residual-feet-collision.hpp:38
sobec::ResidualDataFeetCollisionTpl::Base
ResidualDataAbstractTpl< Scalar > Base
Definition: residual-feet-collision.hpp:124
sobec::ResidualDataFeetCollisionTpl::ResidualDataFeetCollisionTpl
ResidualDataFeetCollisionTpl(Model< Scalar > *const model, DataCollectorAbstract *const data)
Definition: residual-feet-collision.hpp:132
sobec
Definition: activation-quad-ref.hpp:19
sobec::ResidualModelFeetCollisionTpl::Data
ResidualDataFeetCollisionTpl< Scalar > Data
Definition: residual-feet-collision.hpp:36
sobec::ResidualDataFeetCollisionTpl::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef _Scalar Scalar
Definition: residual-feet-collision.hpp:122
sobec::ResidualDataFeetCollisionTpl::pinocchio
pinocchio::DataTpl< Scalar > * pinocchio
Pinocchio data.
Definition: residual-feet-collision.hpp:157
sobec::ResidualDataFeetCollisionTpl::J2
Matrix6xs J2
Definition: residual-feet-collision.hpp:158
sobec::newcontacts::x
@ x
Definition: contact1d.hpp:26
sobec::ResidualModelFeetCollisionTpl::MathBase
MathBaseTpl< Scalar > MathBase
Definition: residual-feet-collision.hpp:34
sobec::ResidualDataFeetCollisionTpl::DataCollectorAbstract
DataCollectorAbstractTpl< Scalar > DataCollectorAbstract
Definition: residual-feet-collision.hpp:125
sobec::ResidualModelFeetCollisionTpl::VectorXs
MathBase::VectorXs VectorXs
Definition: residual-feet-collision.hpp:40
sobec::ResidualDataFeetCollisionTpl::dJ
Matrix2xs dJ
Definition: residual-feet-collision.hpp:159
sobec::ResidualDataFeetCollisionTpl
Definition: residual-feet-collision.hpp:119