Crocoddyl
 
Loading...
Searching...
No Matches
pair-collision.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2021-2022, LAAS-CNRS, University of Edinburgh, INRIA
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_MULTIBODY_RESIDUALS_PAIR_COLLISION_HPP_
10#define CROCODDYL_MULTIBODY_RESIDUALS_PAIR_COLLISION_HPP_
11
12#ifdef PINOCCHIO_WITH_HPP_FCL
13
14#include <pinocchio/multibody/geometry.hpp>
15
16#include "crocoddyl/core/residual-base.hpp"
17#include "crocoddyl/multibody/data/multibody.hpp"
18#include "crocoddyl/multibody/states/multibody.hpp"
19
20namespace crocoddyl {
21
40template <typename _Scalar>
41class ResidualModelPairCollisionTpl : public ResidualModelAbstractTpl<_Scalar> {
42 public:
43 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
44
45 typedef _Scalar Scalar;
46 typedef MathBaseTpl<Scalar> MathBase;
47 typedef ResidualModelAbstractTpl<Scalar> Base;
48 typedef ResidualDataPairCollisionTpl<Scalar> Data;
49 typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
50 typedef StateMultibodyTpl<Scalar> StateMultibody;
51 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
52 typedef pinocchio::GeometryModel GeometryModel;
53
54 typedef typename MathBase::VectorXs VectorXs;
55 typedef typename MathBase::MatrixXs MatrixXs;
56
68 ResidualModelPairCollisionTpl(std::shared_ptr<StateMultibody> state,
69 const std::size_t nu,
70 std::shared_ptr<GeometryModel> geom_model,
71 const pinocchio::PairIndex pair_id,
72 const pinocchio::JointIndex joint_id);
73
74 virtual ~ResidualModelPairCollisionTpl();
75
83 virtual void calc(const std::shared_ptr<ResidualDataAbstract> &data,
84 const Eigen::Ref<const VectorXs> &x,
85 const Eigen::Ref<const VectorXs> &u);
86
94 virtual void calcDiff(const std::shared_ptr<ResidualDataAbstract> &data,
95 const Eigen::Ref<const VectorXs> &x,
96 const Eigen::Ref<const VectorXs> &u);
97
98 virtual std::shared_ptr<ResidualDataAbstract> createData(
99 DataCollectorAbstract *const data);
100
104 const pinocchio::GeometryModel &get_geometry() const;
105
109 pinocchio::PairIndex get_pair_id() const;
110
114 void set_pair_id(const pinocchio::PairIndex pair_id);
115
116 protected:
117 using Base::nu_;
118 using Base::state_;
119 using Base::v_dependent_;
120
121 private:
122 typename StateMultibody::PinocchioModel
123 pin_model_;
124 std::shared_ptr<pinocchio::GeometryModel>
125 geom_model_;
126 pinocchio::PairIndex
127 pair_id_;
128 pinocchio::JointIndex joint_id_;
130};
131
132template <typename _Scalar>
133struct ResidualDataPairCollisionTpl : public ResidualDataAbstractTpl<_Scalar> {
134 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
135
136 typedef _Scalar Scalar;
137 typedef MathBaseTpl<Scalar> MathBase;
138 typedef ResidualDataAbstractTpl<Scalar> Base;
139 typedef StateMultibodyTpl<Scalar> StateMultibody;
140 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
141
142 typedef typename MathBase::Matrix6xs Matrix6xs;
143 typedef typename MathBase::Vector3s Vector3s;
144
145 template <template <typename Scalar> class Model>
146 ResidualDataPairCollisionTpl(Model<Scalar> *const model,
147 DataCollectorAbstract *const data)
148 : Base(model, data),
149 geometry(pinocchio::GeometryData(model->get_geometry())),
150 J(6, model->get_state()->get_nv()) {
151 d.setZero();
152 J.setZero();
153 // Check that proper shared data has been passed
154 DataCollectorMultibodyTpl<Scalar> *d =
155 dynamic_cast<DataCollectorMultibodyTpl<Scalar> *>(shared);
156 if (d == NULL) {
157 throw_pretty(
158 "Invalid argument: the shared data should be derived from "
159 "DataCollectorActMultibodyTpl");
160 }
161 // Avoids data casting at runtime
162 pinocchio = d->pinocchio;
163 }
164 pinocchio::GeometryData geometry;
165 pinocchio::DataTpl<Scalar> *pinocchio;
166 Matrix6xs J;
167 Vector3s d;
168 using Base::r;
169 using Base::Ru;
170 using Base::Rx;
171 using Base::shared;
172};
173
174} // namespace crocoddyl
175
176/* --- Details -------------------------------------------------------------- */
177/* --- Details -------------------------------------------------------------- */
178/* --- Details -------------------------------------------------------------- */
179#include "crocoddyl/multibody/residuals/pair-collision.hxx"
180
181#endif // PINOCCHIO_WITH_HPP_FCL
182
183#endif // CROCODDYL_MULTIBODY_RESIDUALS_PAIR_COLLISION_HPP_