multibody/geometry.hpp
Go to the documentation of this file.
1 //
2 // Copyright (c) 2015-2023 CNRS INRIA
3 //
4 
5 #ifndef __pinocchio_multibody_geometry_hpp__
6 #define __pinocchio_multibody_geometry_hpp__
7 
10 
12 
13 #include <map>
14 #include <list>
15 #include <utility>
16 #include <assert.h>
17 
18 namespace pinocchio
19 {
20 
21  struct CollisionPair : public std::pair<GeomIndex, GeomIndex>
22  {
23 
24  typedef std::pair<GeomIndex, GeomIndex> Base;
25 
27  CollisionPair();
28 
36  CollisionPair(const GeomIndex co1, const GeomIndex co2);
37  bool operator==(const CollisionPair & rhs) const;
38  bool operator!=(const CollisionPair & rhs) const;
39  void disp(std::ostream & os) const;
40  friend std::ostream & operator<<(std::ostream & os, const CollisionPair & X);
41 
42  }; // struct CollisionPair
43 
44  template<>
46  {
47  typedef double Scalar;
48  enum
49  {
50  Options = 0
51  };
52  };
53 
55  : NumericalBase<GeometryModel>
56  , serialization::Serializable<GeometryModel>
57  {
58  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
59 
61  enum
62  {
64  };
65 
67 
68  typedef ::pinocchio::GeometryObject GeometryObject;
69  typedef PINOCCHIO_ALIGNED_STD_VECTOR(GeometryObject) GeometryObjectVector;
70  typedef std::vector<CollisionPair> CollisionPairVector;
71  typedef Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic, Options> MatrixXb;
72  typedef Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic, Options> MatrixXi;
73 
75 
77  : ngeoms(0)
78  , geometryObjects()
79  , collisionPairs()
80  {
81  }
82 
83  GeometryModel(const GeometryModel & other) = default;
84 
86 
96  template<typename S2, int O2, template<typename, int> class _JointCollectionTpl>
99 
108 
116  void removeGeometryObject(const std::string & name);
117 
125  GeomIndex getGeometryId(const std::string & name) const;
126 
134  bool existGeometryName(const std::string & name) const;
135 
142  void addCollisionPair(const CollisionPair & pair);
143 
149  void addAllCollisionPairs();
150 
159  void setCollisionPairs(const MatrixXb & collision_map, const bool upper = true);
160 
166  void removeCollisionPair(const CollisionPair & pair);
167 
172 
181  bool existCollisionPair(const CollisionPair & pair) const;
182 
190  PairIndex findCollisionPair(const CollisionPair & pair) const;
191 
195  GeometryModel clone() const;
196 
200  bool operator==(const GeometryModel & other) const
201  {
202  return ngeoms == other.ngeoms && geometryObjects == other.geometryObjects
203  && collisionPairs == other.collisionPairs
205  }
206 
210  bool operator!=(const GeometryModel & other) const
211  {
212  return !(*this == other);
213  }
214 
215  friend std::ostream & operator<<(std::ostream & os, const GeometryModel & model_geom);
216 
219 
221  GeometryObjectVector geometryObjects;
222 
225 
228 
229  }; // struct GeometryModel
230 
231  template<>
233  {
234  typedef double Scalar;
235  enum
236  {
238  };
239  };
240 
242  : NumericalBase<GeometryData>
243  , serialization::Serializable<GeometryData>
244  {
245  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
246 
248  enum
249  {
251  };
252 
254  typedef std::vector<GeomIndex> GeomIndexList;
255  typedef Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic, Options> MatrixXb;
256  typedef Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic, Options> MatrixXs;
257 
258 #ifdef PINOCCHIO_WITH_HPP_FCL
259  typedef ::pinocchio::ComputeCollision ComputeCollision;
260  typedef ::pinocchio::ComputeDistance ComputeDistance;
261 #endif
262 
271 
275  std::vector<bool> activeCollisionPairs;
276 
277 #ifdef PINOCCHIO_WITH_HPP_FCL
278 
282  std::vector<fcl::DistanceRequest> distanceRequests;
283 
287  std::vector<fcl::DistanceResult> distanceResults;
288 
292  std::vector<fcl::CollisionRequest> collisionRequests;
293 
297  std::vector<fcl::CollisionResult> collisionResults;
298 
303  std::vector<Scalar> radius;
304 
311  PairIndex collisionPairIndex;
312 
314  PINOCCHIO_ALIGNED_STD_VECTOR(ComputeCollision) collision_functors;
315 
317  PINOCCHIO_ALIGNED_STD_VECTOR(ComputeDistance) distance_functors;
318 
319 #endif // PINOCCHIO_WITH_HPP_FCL
320 
326  std::map<JointIndex, GeomIndexList> innerObjects;
327 
332  std::map<JointIndex, GeomIndexList> outerObjects;
333 
339  explicit GeometryData(const GeometryModel & geom_model);
340 
346  GeometryData(const GeometryData & other);
347 
353  GeometryData & operator=(const GeometryData & other);
354 
357 
359  ~GeometryData();
360 
370  void fillInnerOuterObjectMaps(const GeometryModel & geomModel);
371 
385  void activateCollisionPair(const PairIndex pair_id);
386 
394 
404  const GeometryModel & geom_model, const MatrixXb & collision_map, const bool upper = true);
405 
415  const GeometryModel & geom_model, const GeomIndex geom_id, bool enable_collision);
416 
426  void deactivateCollisionPair(const PairIndex pair_id);
427 
435 
436 #ifdef PINOCCHIO_WITH_HPP_FCL
437  void setSecurityMargins(
448  const GeometryModel & geom_model,
449  const MatrixXs & security_margin_map,
450  const bool upper = true,
451  const bool sync_distance_upper_bound = false);
452 
453 #endif // ifdef PINOCCHIO_WITH_HPP_FCL
454 
455  friend std::ostream & operator<<(std::ostream & os, const GeometryData & geomData);
456 
460  bool operator==(const GeometryData & other) const
461  {
462  return oMg == other.oMg && activeCollisionPairs == other.activeCollisionPairs
463 #ifdef PINOCCHIO_WITH_HPP_FCL
464  && distanceRequests == other.distanceRequests
465  && distanceResults == other.distanceResults
466  && collisionRequests == other.collisionRequests
467  && collisionResults == other.collisionResults && radius == other.radius
468  && collisionPairIndex == other.collisionPairIndex
469 #endif
470  && innerObjects == other.innerObjects && outerObjects == other.outerObjects;
471  }
472 
476  bool operator!=(const GeometryData & other) const
477  {
478  return !(*this == other);
479  }
480 
481  }; // struct GeometryData
482 
483 } // namespace pinocchio
484 
485 /* --- Details -------------------------------------------------------------- */
486 /* --- Details -------------------------------------------------------------- */
487 /* --- Details -------------------------------------------------------------- */
488 #include "pinocchio/multibody/geometry.hxx"
489 
490 #endif // ifndef __pinocchio_multibody_geometry_hpp__
pinocchio::GeometryModel::SE3
SE3Tpl< Scalar, Options > SE3
Definition: multibody/geometry.hpp:66
pinocchio::GeometryData::MatrixXs
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic, Options > MatrixXs
Definition: multibody/geometry.hpp:256
pinocchio::GeometryModel::clone
GeometryModel clone() const
Create a deep copy of *this.
pinocchio::GeometryModel::getGeometryId
GeomIndex getGeometryId(const std::string &name) const
Return the index of a GeometryObject given by its name.
pinocchio::NumericalBase
Definition: fwd.hpp:89
pinocchio::GeometryModel::addCollisionPair
void addCollisionPair(const CollisionPair &pair)
Add a collision pair into the vector of collision_pairs. The method check before if the given Collisi...
pinocchio::GeometryData::setActiveCollisionPairs
void setActiveCollisionPairs(const GeometryModel &geom_model, const MatrixXb &collision_map, const bool upper=true)
Set the collision pair association from a given input array. Each entry of the input matrix defines t...
pinocchio::GeometryModel::GeomIndex
pinocchio::GeomIndex GeomIndex
Definition: multibody/geometry.hpp:74
pinocchio::GeometryData::MatrixXb
Eigen::Matrix< bool, Eigen::Dynamic, Eigen::Dynamic, Options > MatrixXb
Definition: multibody/geometry.hpp:255
pinocchio::GeometryModel::PINOCCHIO_ALIGNED_STD_VECTOR
typedef PINOCCHIO_ALIGNED_STD_VECTOR(GeometryObject) GeometryObjectVector
pinocchio::traits< GeometryData >::Scalar
double Scalar
Definition: multibody/geometry.hpp:234
pinocchio::GeometryData::fillInnerOuterObjectMaps
void fillInnerOuterObjectMaps(const GeometryModel &geomModel)
pinocchio::GeometryData::PINOCCHIO_ALIGNED_STD_VECTOR
PINOCCHIO_ALIGNED_STD_VECTOR(SE3) oMg
Vector gathering the SE3 placements of the geometry objects relative to the world....
aligned-vector.hpp
pinocchio::Options
Options
Definition: joint-configuration.hpp:1082
pinocchio::SE3Tpl< Scalar, Options >
pinocchio::GeometryModel::removeGeometryObject
void removeGeometryObject(const std::string &name)
Remove a GeometryObject.
pinocchio::name
std::string name(const LieGroupGenericTpl< LieGroupCollection > &lg)
Visit a LieGroupVariant to get the name of it.
pinocchio::GeometryModel::GeometryObject
::pinocchio::GeometryObject GeometryObject
Definition: multibody/geometry.hpp:68
pinocchio::GeometryData::activateCollisionPair
void activateCollisionPair(const PairIndex pair_id)
serializable.hpp
pinocchio::CollisionPair::Base
std::pair< GeomIndex, GeomIndex > Base
Definition: multibody/geometry.hpp:24
pinocchio::GeometryData::GeometryData
GeometryData()
Empty constructor.
Definition: multibody/geometry.hpp:356
pinocchio::GeometryData::operator==
bool operator==(const GeometryData &other) const
Returns true if *this and other are equal.
Definition: multibody/geometry.hpp:460
pinocchio::GeometryModel::CollisionPairVector
std::vector< CollisionPair > CollisionPairVector
Definition: multibody/geometry.hpp:70
pinocchio::GeometryModel::operator==
bool operator==(const GeometryModel &other) const
Returns true if *this and other are equal.
Definition: multibody/geometry.hpp:200
pinocchio::GeometryObject
Definition: multibody/geometry-object.hpp:87
pinocchio::CollisionPair::operator<<
friend std::ostream & operator<<(std::ostream &os, const CollisionPair &X)
pinocchio::GeometryData::outerObjects
std::map< JointIndex, GeomIndexList > outerObjects
A list of associated collision GeometryObjects to a given joint Id.
Definition: multibody/geometry.hpp:332
pinocchio::GeometryData::~GeometryData
~GeometryData()
Destructor.
pinocchio::GeometryData
Definition: multibody/geometry.hpp:241
pinocchio::GeometryModel::Options
@ Options
Definition: multibody/geometry.hpp:63
pinocchio::GeometryModel::addAllCollisionPairs
void addAllCollisionPairs()
Add all possible collision pairs.
pinocchio::GeometryModel::existCollisionPair
bool existCollisionPair(const CollisionPair &pair) const
Check if a collision pair exists in collisionPairs. See also findCollisitionPair(const CollisionPair ...
pinocchio::GeometryModel::removeAllCollisionPairs
void removeAllCollisionPairs()
Remove all collision pairs from collisionPairs. Same as collisionPairs.clear().
pinocchio::GeometryData::operator=
GeometryData & operator=(const GeometryData &other)
Copy operator.
pinocchio::GeometryModel::operator<<
friend std::ostream & operator<<(std::ostream &os, const GeometryModel &model_geom)
pinocchio::Index
PINOCCHIO_COMPILER_DIAGNOSTIC_POP typedef std::size_t Index
Definition: multibody/fwd.hpp:22
pinocchio::GeometryModel::geometryObjects
GeometryObjectVector geometryObjects
Vector of GeometryObjects used for collision computations.
Definition: multibody/geometry.hpp:221
pinocchio::CollisionPair
Definition: multibody/geometry.hpp:21
pinocchio::GeometryModel::collisionPairMapping
MatrixXi collisionPairMapping
Matrix relating the collision pair ID to a pair of two GeometryObject indexes.
Definition: multibody/geometry.hpp:227
pinocchio::GeometryData::activeCollisionPairs
std::vector< bool > activeCollisionPairs
Vector of collision pairs.
Definition: multibody/geometry.hpp:275
pinocchio::GeometryModel::~GeometryModel
~GeometryModel()
Definition: multibody/geometry.hpp:85
pinocchio::GeometryModel::findCollisionPair
PairIndex findCollisionPair(const CollisionPair &pair) const
Return the index of a given collision pair in collisionPairs.
pinocchio::PairIndex
Index PairIndex
Definition: multibody/fwd.hpp:29
pinocchio::GeometryData::deactivateAllCollisionPairs
void deactivateAllCollisionPairs()
Deactivate all collision pairs.
pinocchio::CollisionPair::CollisionPair
CollisionPair()
Empty constructor.
geometry-object.hpp
pinocchio::GeometryModel::ngeoms
Index ngeoms
The number of GeometryObjects.
Definition: multibody/geometry.hpp:218
pinocchio::GeometryModel::MatrixXi
Eigen::Matrix< int, Eigen::Dynamic, Eigen::Dynamic, Options > MatrixXi
Definition: multibody/geometry.hpp:72
pinocchio::GeometryData::setGeometryCollisionStatus
void setGeometryCollisionStatus(const GeometryModel &geom_model, const GeomIndex geom_id, bool enable_collision)
Enable or disable collision for the given geometry given by its geometry id with all the other geomet...
pinocchio::GeometryData::operator<<
friend std::ostream & operator<<(std::ostream &os, const GeometryData &geomData)
pinocchio::CollisionPair::operator==
bool operator==(const CollisionPair &rhs) const
append-urdf-model-with-another-model.geom_model
geom_model
Definition: append-urdf-model-with-another-model.py:26
pinocchio::traits< GeometryModel >::Scalar
double Scalar
Definition: multibody/geometry.hpp:47
pinocchio::GeometryData::operator!=
bool operator!=(const GeometryData &other) const
Returns true if *this and other are not equal.
Definition: multibody/geometry.hpp:476
pinocchio::GeometryData::deactivateCollisionPair
void deactivateCollisionPair(const PairIndex pair_id)
pinocchio::GeometryModel::addGeometryObject
GeomIndex addGeometryObject(const GeometryObject &object, const ModelTpl< S2, O2, _JointCollectionTpl > &model)
Add a geometry object to a GeometryModel and set its parent joint.
pinocchio::GeometryModel::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef traits< GeometryModel >::Scalar Scalar
Definition: multibody/geometry.hpp:60
pinocchio::GeometryData::innerObjects
std::map< JointIndex, GeomIndexList > innerObjects
Map over vector GeomModel::geometryObjects, indexed by joints.
Definition: multibody/geometry.hpp:326
pinocchio::GeometryData::activateAllCollisionPairs
void activateAllCollisionPairs()
Activate all collision pairs.
pinocchio::GeometryData::Scalar
EIGEN_MAKE_ALIGNED_OPERATOR_NEW typedef traits< GeometryData >::Scalar Scalar
Definition: multibody/geometry.hpp:247
pinocchio::GeometryModel::collisionPairs
CollisionPairVector collisionPairs
Vector of collision pairs.
Definition: multibody/geometry.hpp:224
pinocchio::GeometryModel::GeometryModel
GeometryModel()
Definition: multibody/geometry.hpp:76
pinocchio::GeometryModel::MatrixXb
Eigen::Matrix< bool, Eigen::Dynamic, Eigen::Dynamic, Options > MatrixXb
Definition: multibody/geometry.hpp:71
pinocchio::CollisionPair::disp
void disp(std::ostream &os) const
pinocchio::GeometryData::SE3
SE3Tpl< Scalar, Options > SE3
Definition: multibody/geometry.hpp:253
pinocchio::GeometryData::GeomIndexList
std::vector< GeomIndex > GeomIndexList
Definition: multibody/geometry.hpp:254
pinocchio::GeometryData::Options
@ Options
Definition: multibody/geometry.hpp:250
pinocchio::GeometryModel::operator!=
bool operator!=(const GeometryModel &other) const
Returns true if *this and other are not equal.
Definition: multibody/geometry.hpp:210
pinocchio::GeometryModel::existGeometryName
bool existGeometryName(const std::string &name) const
Check if a GeometryObject given by its name exists.
pinocchio::GeometryModel
Definition: multibody/geometry.hpp:54
pinocchio::traits
Common traits structure to fully define base classes for CRTP.
Definition: fwd.hpp:71
pinocchio::GeometryModel::removeCollisionPair
void removeCollisionPair(const CollisionPair &pair)
Remove if exists the CollisionPair from the vector collision_pairs.
pinocchio::GeometryModel::setCollisionPairs
void setCollisionPairs(const MatrixXb &collision_map, const bool upper=true)
Set the collision pairs from a given input array. Each entry of the input matrix defines the activati...
pinocchio::ModelTpl
Definition: context/generic.hpp:20
pinocchio::GeomIndex
Index GeomIndex
Definition: multibody/fwd.hpp:27
X
pinocchio::serialization::Serializable
Definition: serialization/serializable.hpp:16
radius
FCL_REAL radius
pinocchio::model
JointCollectionTpl & model
Definition: joint-configuration.hpp:1082
simulation-closed-kinematic-chains.rhs
rhs
Definition: simulation-closed-kinematic-chains.py:134
pinocchio::CollisionPair::operator!=
bool operator!=(const CollisionPair &rhs) const
pinocchio
Main pinocchio namespace.
Definition: timings.cpp:33


pinocchio
Author(s):
autogenerated on Wed Apr 16 2025 02:41:47