9#ifndef CROCODDYL_MULTIBODY_RESIDUALS_PAIR_COLLISION_HPP_
10#define CROCODDYL_MULTIBODY_RESIDUALS_PAIR_COLLISION_HPP_
12#ifdef PINOCCHIO_WITH_HPP_FCL
14#include <pinocchio/multibody/geometry.hpp>
16#include "crocoddyl/core/residual-base.hpp"
17#include "crocoddyl/multibody/data/multibody.hpp"
18#include "crocoddyl/multibody/states/multibody.hpp"
40template <
typename _Scalar>
41class ResidualModelPairCollisionTpl :
public ResidualModelAbstractTpl<_Scalar> {
43 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
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;
54 typedef typename MathBase::VectorXs VectorXs;
55 typedef typename MathBase::MatrixXs MatrixXs;
68 ResidualModelPairCollisionTpl(std::shared_ptr<StateMultibody> state,
70 std::shared_ptr<GeometryModel> geom_model,
71 const pinocchio::PairIndex pair_id,
72 const pinocchio::JointIndex joint_id);
74 virtual ~ResidualModelPairCollisionTpl();
83 virtual void calc(
const std::shared_ptr<ResidualDataAbstract> &data,
84 const Eigen::Ref<const VectorXs> &x,
85 const Eigen::Ref<const VectorXs> &u);
94 virtual void calcDiff(
const std::shared_ptr<ResidualDataAbstract> &data,
95 const Eigen::Ref<const VectorXs> &x,
96 const Eigen::Ref<const VectorXs> &u);
98 virtual std::shared_ptr<ResidualDataAbstract> createData(
99 DataCollectorAbstract *
const data);
104 const pinocchio::GeometryModel &get_geometry()
const;
109 pinocchio::PairIndex get_pair_id()
const;
114 void set_pair_id(
const pinocchio::PairIndex pair_id);
119 using Base::v_dependent_;
122 typename StateMultibody::PinocchioModel
124 std::shared_ptr<pinocchio::GeometryModel>
128 pinocchio::JointIndex joint_id_;
132template <
typename _Scalar>
133struct ResidualDataPairCollisionTpl :
public ResidualDataAbstractTpl<_Scalar> {
134 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
136 typedef _Scalar Scalar;
137 typedef MathBaseTpl<Scalar> MathBase;
138 typedef ResidualDataAbstractTpl<Scalar> Base;
139 typedef StateMultibodyTpl<Scalar> StateMultibody;
140 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
142 typedef typename MathBase::Matrix6xs Matrix6xs;
143 typedef typename MathBase::Vector3s Vector3s;
145 template <
template <
typename Scalar>
class Model>
146 ResidualDataPairCollisionTpl(Model<Scalar> *
const model,
147 DataCollectorAbstract *
const data)
149 geometry(pinocchio::GeometryData(model->get_geometry())),
150 J(6, model->get_state()->get_nv()) {
154 DataCollectorMultibodyTpl<Scalar> *d =
155 dynamic_cast<DataCollectorMultibodyTpl<Scalar> *
>(shared);
158 "Invalid argument: the shared data should be derived from "
159 "DataCollectorActMultibodyTpl");
162 pinocchio = d->pinocchio;
164 pinocchio::GeometryData geometry;
165 pinocchio::DataTpl<Scalar> *pinocchio;
179#include "crocoddyl/multibody/residuals/pair-collision.hxx"