Drake
ProximityEngine< T > Class Template Reference

The underlying engine for performing geometric proximity queries. More...

#include <drake/geometry/proximity_engine.h>

Public Member Functions

 ProximityEngine ()
 
 ~ProximityEngine ()
 
 ProximityEngine (const ProximityEngine &other)
 Construct a deep copy of the provided other engine. More...
 
ProximityEngineoperator= (const ProximityEngine &other)
 Set this engine to be a deep copy of the other engine. More...
 
 ProximityEngine (ProximityEngine &&other) noexcept
 Construct an engine by moving the data of a source engine. More...
 
ProximityEngineoperator= (ProximityEngine &&other) noexcept
 Move assign a source engine to this engine. More...
 
std::unique_ptr< ProximityEngine< AutoDiffXd > > ToAutoDiffXd () const
 Returns an independent copy of this engine templated on the AutoDiffXd scalar type. More...
 
void UpdateWorldPoses (const std::vector< Isometry3< T >> &X_WG)
 Updates the poses for all of the dynamic geometries in the engine. More...
 
template<typename T >
 ProximityEngine (ProximityEngine< T >::Impl *impl)
 
template<typename T >
 ProximityEngine (const ProximityEngine< T > &other)
 
template<typename T >
 ProximityEngine (ProximityEngine< T > &&other) noexcept
 
Topology management
GeometryIndex AddDynamicGeometry (const Shape &shape)
 Adds the given shape to the engine's dynamic geometry. More...
 
AnchoredGeometryIndex AddAnchoredGeometry (const Shape &shape, const Isometry3< double > &X_WG)
 Adds the given shape to the engine's anchored geometry at the fixed pose given by X_WG (in the world frame W). More...
 
int num_geometries () const
 Reports the total number of geometries in the engine – dynamic and anchored (spanning all sources). More...
 
int num_dynamic () const
 Reports the number of dynamic geometries (spanning all sources). More...
 
int num_anchored () const
 Reports the number of anchored geometries (spanning all sources). More...
 
void set_distance_tolerance (double tol)
 The distance (signed/unsigned/penetration distance) is generally computed from an iterative process. More...
 
double distance_tolerance () const
 
Signed Distance Queries

See Signed Distance Query for more details.

std::vector< SignedDistancePair< double > > ComputeSignedDistancePairwiseClosestPoints (const std::vector< GeometryId > &dynamic_map, const std::vector< GeometryId > &anchored_map) const
 Determines all the closest points between any pair of bodies/elements. More...
 
Collision Queries

These queries detect collisions between geometry.

Two geometries collide if they overlap each other and are not explicitly excluded through collision filtering. These algorithms find those colliding cases, characterize them, and report the essential characteristics of that collision.

std::vector< PenetrationAsPointPair< double > > ComputePointPairPenetration (const std::vector< GeometryId > &dynamic_map, const std::vector< GeometryId > &anchored_map) const
 Computes the penetrations across all pairs of geometries in the world. More...
 
Collision filters

This interface provides the mechanism through which pairs of geometries are removed from the "candidate pair set" for collision detection.

See Scene Graph Collision Filtering for more details.

void ExcludeCollisionsWithin (const std::unordered_set< GeometryIndex > &dynamic, const std::unordered_set< AnchoredGeometryIndex > &anchored)
 Excludes geometry pairs from collision evaluation by updating the candidate pair set C = C - P, where P = {(gᵢ, gⱼ)}, ∀ gᵢ, gⱼ ∈ G and G = dynamic ⋃ anchored = {g₀, g₁, ..., gₙ}. More...
 
void ExcludeCollisionsBetween (const std::unordered_set< GeometryIndex > &dynamic1, const std::unordered_set< AnchoredGeometryIndex > &anchored1, const std::unordered_set< GeometryIndex > &dynamic2, const std::unordered_set< AnchoredGeometryIndex > &anchored2)
 Excludes geometry pairs from collision evaluation by updating the candidate pair set C = C - P, where P = {(a, b)}, ∀ a ∈ A, b ∈ B and A = dynamic1 ⋃ anchored1 = {a₀, a₁, ..., aₘ} and B = dynamic2 ⋃ anchored2 = {b₀, b₁, ..., bₙ}. More...
 

Friends

class GeometryStateCollisionFilterAttorney
 
template<typename >
class ProximityEngine
 
class ProximityEngineTester
 

Detailed Description

template<typename T>
class drake::geometry::internal::ProximityEngine< T >

The underlying engine for performing geometric proximity queries.

It owns the geometry instances and, once it has been provided with the poses of the geometry, it provides geometric queries on that geometry.

Proximity queries span a range of types, including:

  • penetration
  • distance
  • ray-intersection
Template Parameters
TThe scalar type. Must be a valid Eigen scalar.

Instantiated templates for the following kinds of T's are provided:

  • double
  • AutoDiffXd

They are already available to link against in the containing library. No other values for T are currently supported.

Constructor & Destructor Documentation

ProximityEngine ( const ProximityEngine< T > &  other)

Construct a deep copy of the provided other engine.

ProximityEngine ( ProximityEngine< T > &&  other)
noexcept

Construct an engine by moving the data of a source engine.

The source engine will be returned to its default-initialized state.

ProximityEngine ( ProximityEngine< T >::Impl *  impl)
ProximityEngine ( const ProximityEngine< T > &  other)

Here is the call graph for this function:

ProximityEngine ( ProximityEngine< T > &&  other)
noexcept

Here is the call graph for this function:

Member Function Documentation

AnchoredGeometryIndex AddAnchoredGeometry ( const Shape shape,
const Isometry3< double > &  X_WG 
)

Adds the given shape to the engine's anchored geometry at the fixed pose given by X_WG (in the world frame W).

Here is the caller graph for this function:

GeometryIndex AddDynamicGeometry ( const Shape shape)

Adds the given shape to the engine's dynamic geometry.

Here is the caller graph for this function:

std::vector< PenetrationAsPointPair< double > > ComputePointPairPenetration ( const std::vector< GeometryId > &  dynamic_map,
const std::vector< GeometryId > &  anchored_map 
) const

Computes the penetrations across all pairs of geometries in the world.

Only reports results for penetrating geometries; if two geometries are separated, there will be no result for that pair.

The penetrations are characterized by pairs of points (providing some measure of the penetration "depth" of the two objects – but not the overlapping volume.

This method is affected by collision filtering; geometry pairs that have been filtered will not produce contacts, even if their collision geometry is penetrating.

For two penetrating geometries g₁ and g₂, it is guaranteed that they will map to id_A and id_B in a fixed, repeatable manner.

Parameters
[in]dynamic_mapA map from geometry index to the corresponding global geometry identifier for dynamic geometries.
[in]anchored_mapA map from geometry index to the corresponding global geometry identifier for anchored geometries.
Returns
A vector populated with all detected penetrations characterized as point pairs.

Here is the caller graph for this function:

std::vector< SignedDistancePair< double > > ComputeSignedDistancePairwiseClosestPoints ( const std::vector< GeometryId > &  dynamic_map,
const std::vector< GeometryId > &  anchored_map 
) const

Determines all the closest points between any pair of bodies/elements.

This function returns the signed distance function between each pair of elements in dynamic_map (object whose pose will change), and between each pair between an element in dynamic_map and another element in anchored_map. The order and size of the closest points are invariant when the poses of the objects are changed.

Parameters
[in]dynamic_mapA map from geometry index to the corresponding global geometry identifier for dynamic geometries.
[in]anchored_mapA map from geometry index to the corresponding global geometry identifier for anchored geometries.
Returns
signed_distance_pair A vector populated with all pairs of witness points. For a pair consisting of geometries A and B, distances will always be reported as the pair (A, B). In other words, it won't sometimes be (A, B) and other times be (B, A). The pair is defined with respect to a fixed, arbitrary ordering.

Here is the caller graph for this function:

double distance_tolerance ( ) const
void ExcludeCollisionsBetween ( const std::unordered_set< GeometryIndex > &  dynamic1,
const std::unordered_set< AnchoredGeometryIndex > &  anchored1,
const std::unordered_set< GeometryIndex > &  dynamic2,
const std::unordered_set< AnchoredGeometryIndex > &  anchored2 
)

Excludes geometry pairs from collision evaluation by updating the candidate pair set C = C - P, where P = {(a, b)}, ∀ a ∈ A, b ∈ B and A = dynamic1 ⋃ anchored1 = {a₀, a₁, ..., aₘ} and B = dynamic2 ⋃ anchored2 = {b₀, b₁, ..., bₙ}.

This does not preclude collisions between members of the same set.

void ExcludeCollisionsWithin ( const std::unordered_set< GeometryIndex > &  dynamic,
const std::unordered_set< AnchoredGeometryIndex > &  anchored 
)

Excludes geometry pairs from collision evaluation by updating the candidate pair set C = C - P, where P = {(gᵢ, gⱼ)}, ∀ gᵢ, gⱼ ∈ G and G = dynamic ⋃ anchored = {g₀, g₁, ..., gₙ}.

Parameters
[in]dynamicThe set of dynamic geometry indices for which no collisions can be reported.
[in]anchoredThe set of anchored geometry indices for which no collisions can be reported.
int num_anchored ( ) const

Reports the number of anchored geometries (spanning all sources).

Here is the caller graph for this function:

int num_dynamic ( ) const

Reports the number of dynamic geometries (spanning all sources).

Here is the caller graph for this function:

int num_geometries ( ) const

Reports the total number of geometries in the engine – dynamic and anchored (spanning all sources).

Here is the caller graph for this function:

ProximityEngine& operator= ( const ProximityEngine< T > &  other)

Set this engine to be a deep copy of the other engine.

Here is the caller graph for this function:

ProximityEngine& operator= ( ProximityEngine< T > &&  other)
noexcept

Move assign a source engine to this engine.

The source engine will be returned to its default-initialized state.

void set_distance_tolerance ( double  tol)

The distance (signed/unsigned/penetration distance) is generally computed from an iterative process.

The distance_tolerance determines when the iterative process will terminate. As a rule of rule of thumb, one can generally assume that the answer will be within 10 * tol to the true answer.

std::unique_ptr< ProximityEngine< AutoDiffXd > > ToAutoDiffXd ( ) const

Returns an independent copy of this engine templated on the AutoDiffXd scalar type.

If the engine is already an AutoDiffXd engine, it is equivalent to using the copy constructor to create a duplicate on the heap.

void UpdateWorldPoses ( const std::vector< Isometry3< T >> &  X_WG)

Updates the poses for all of the dynamic geometries in the engine.

It is an invariant that every registered dynamic geometry, across all geometry sources, has a unique index that lies in the range [0, num_dynamic() - 1]. Therefore, X_WG should have size equal to num_dynamics() and any other length will cause program failure. The iᵗʰ entry contains the pose for the geometry whose GeometryIndex value is i.

Parameters
X_WGThe poses of each geometry G measured and expressed in the world frame W.

Friends And Related Function Documentation

friend class GeometryStateCollisionFilterAttorney
friend
friend class ProximityEngine
friend
friend class ProximityEngineTester
friend

The documentation for this class was generated from the following files: