9 #ifndef SOBEC_RESIDUAL_VEL_COLLISION_HPP_
10 #define SOBEC_RESIDUAL_VEL_COLLISION_HPP_
12 #ifdef PINOCCHIO_WITH_HPP_FCL
13 #include <crocoddyl/core/residual-base.hpp>
14 #include <crocoddyl/core/utils/exception.hpp>
15 #include <crocoddyl/multibody/data/multibody.hpp>
16 #include <crocoddyl/multibody/fwd.hpp>
17 #include <crocoddyl/multibody/states/multibody.hpp>
18 #include <pinocchio/algorithm/geometry.hpp>
19 #include <pinocchio/algorithm/jacobian.hpp>
20 #include <pinocchio/multibody/fcl.hpp>
21 #include <pinocchio/multibody/fwd.hpp>
22 #include <pinocchio/multibody/geometry.hpp>
23 #include <pinocchio/spatial/motion.hpp>
29 using namespace crocoddyl;
49 template <
typename _Scalar>
50 class ResidualModelVelCollisionTpl :
public ResidualModelAbstractTpl<_Scalar> {
52 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
54 typedef _Scalar Scalar;
55 typedef MathBaseTpl<Scalar> MathBase;
56 typedef ResidualModelAbstractTpl<Scalar> Base;
57 typedef ResidualDataVelCollisionTpl<Scalar> Data;
58 typedef ResidualDataAbstractTpl<Scalar> ResidualDataAbstract;
59 typedef StateMultibodyTpl<Scalar> StateMultibody;
60 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
61 typedef pinocchio::GeometryModel GeometryModel;
63 typedef typename MathBase::VectorXs VectorXs;
64 typedef typename MathBase::MatrixXs MatrixXs;
77 ResidualModelVelCollisionTpl(boost::shared_ptr<StateMultibody> state,
79 boost::shared_ptr<GeometryModel> geom_model,
80 const pinocchio::PairIndex pair_id,
81 const pinocchio::FrameIndex frame_id,
82 const pinocchio::ReferenceFrame type,
85 virtual ~ResidualModelVelCollisionTpl();
94 virtual void calc(
const boost::shared_ptr<ResidualDataAbstract> &data,
95 const Eigen::Ref<const VectorXs> &
x,
96 const Eigen::Ref<const VectorXs> &u);
105 virtual void calcDiff(
const boost::shared_ptr<ResidualDataAbstract> &data,
106 const Eigen::Ref<const VectorXs> &
x,
107 const Eigen::Ref<const VectorXs> &u);
109 virtual boost::shared_ptr<ResidualDataAbstract> createData(
110 DataCollectorAbstract *
const data);
115 const pinocchio::GeometryModel &get_geometry()
const;
120 pinocchio::PairIndex get_pair_id()
const;
125 void set_pair_id(
const pinocchio::PairIndex pair_id);
131 using Base::v_dependent_;
134 boost::shared_ptr<typename StateMultibody::PinocchioModel>
136 boost::shared_ptr<pinocchio::GeometryModel>
140 pinocchio::JointIndex joint_id_;
141 pinocchio::FrameIndex frame_id_;
143 pinocchio::ReferenceFrame type_;
147 template <
typename _Scalar>
148 struct ResidualDataVelCollisionTpl :
public ResidualDataAbstractTpl<_Scalar> {
149 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
151 typedef _Scalar Scalar;
152 typedef MathBaseTpl<Scalar> MathBase;
153 typedef ResidualDataAbstractTpl<Scalar> Base;
154 typedef StateMultibodyTpl<Scalar> StateMultibody;
155 typedef DataCollectorAbstractTpl<Scalar> DataCollectorAbstract;
157 typedef typename MathBase::Matrix6xs Matrix6xs;
158 typedef typename MathBase::Vector3s Vector3s;
159 typedef typename MathBase::Vector2s Vector2s;
161 template <
template <
typename Scalar>
class Model>
162 ResidualDataVelCollisionTpl(Model<Scalar> *
const model,
163 DataCollectorAbstract *
const data)
165 geometry(pinocchio::GeometryData(model->get_geometry())),
166 J(Matrix6xs::Zero(6, model->get_state()->get_nv())),
167 Vx(Matrix6xs::Zero(6, 2 * model->get_state()->get_nv())) {
169 DataCollectorMultibodyTpl<Scalar> *d =
170 dynamic_cast<DataCollectorMultibodyTpl<Scalar> *
>(shared);
173 "Invalid argument: the shared data should be derived from "
174 "DataCollectorActMultibodyTpl");
177 pinocchio = d->pinocchio;
179 pinocchio::GeometryData geometry;
180 pinocchio::DataTpl<Scalar> *pinocchio;
200 #endif // PINOCCHIO_WITH_HPP_FCL
202 #endif // SOBEC_RESIDUAL_VEL_COLLISION_HPP_