RobWorkProject  23.9.11-
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
ProximityStrategyPQP Class Reference

This is a strategy wrapper for the distance library PQP (Proximity Query Package). More...

#include <ProximityStrategyPQP.hpp>

Inherits CollisionStrategy, CollisionToleranceStrategy, DistanceStrategy, and DistanceMultiStrategy.

Classes

struct  PQPProximityCache
 cache for any of the queries possible on this PQPStrategy More...
 
struct  PQPProximityModel
 
struct  RWPQPModel
 

Public Types

typedef rw::core::Ptr< ProximityStrategyPQPPtr
 
typedef std::pair< rw::geometry::GeometryData *, double > CacheKey
 cache key
 
typedef rw::core::Ptr< PQP::PQP_Model > PQPModelPtr
 smart pointer to PQP model
 
typedef std::vector< RWPQPModelRWPQPModelList
 
typedef std::pair< RWPQPModel, RWPQPModelRWPQPModelPair
 
- Public Types inherited from CollisionStrategy
enum  QueryType { FirstContact , AllContacts }
 the type of query that is to be performed
 
typedef rw::core::Ptr< CollisionStrategyPtr
 smart pointer type to this class
 
using Result = CollisionResult
 
- Public Types inherited from ProximityStrategy
typedef rw::core::Ptr< ProximityStrategyPtr
 smart pointer type to this class
 
- Public Types inherited from CollisionToleranceStrategy
typedef rw::core::Ptr< CollisionToleranceStrategyPtr
 smart pointer type to this class
 
- Public Types inherited from DistanceStrategy
typedef rw::core::Ptr< DistanceStrategyPtr
 smart pointer type to this class
 
- Public Types inherited from DistanceMultiStrategy
typedef rw::core::Ptr< DistanceMultiStrategyPtr
 smart pointer type to this class
 

Public Member Functions

 ProximityStrategyPQP ()
 Constructor.
 
virtual rw::proximity::ProximityModel::Ptr createModel ()
 creates an empty ProximityModel More...
 
void destroyModel (rw::proximity::ProximityModel *model)
 deallocates the memory used for model More...
 
bool addGeometry (rw::proximity::ProximityModel *model, const rw::geometry::Geometry &geom)
 
bool addGeometry (rw::proximity::ProximityModel *model, rw::core::Ptr< rw::geometry::Geometry > geom, bool forceCopy=false)
 
bool removeGeometry (rw::proximity::ProximityModel *model, const std::string &geomId)
 removes a geometry from a specific proximity model More...
 
std::vector< std::string > getGeometryIDs (rw::proximity::ProximityModel *model)
 the list of all geometry ids that are associated to the proximity model model is returned More...
 
std::vector< rw::core::Ptr< rw::geometry::Geometry > > getGeometries (rw::proximity::ProximityModel *model)
 the list of all geometry that are associated to the proximity model model is returned More...
 
void setFirstContact (bool b)
 not implemented yet in rw::proximity::CollisionStrategy::setFirstContact
 
bool doInCollision (rw::proximity::ProximityModel::Ptr a, const rw::math::Transform3D<> &wTa, rw::proximity::ProximityModel::Ptr b, const rw::math::Transform3D<> &wTb, rw::proximity::ProximityStrategyData &data)
 Checks to see if two proximity models are in collision. More...
 
void getCollisionContacts (std::vector< rw::proximity::CollisionStrategy::Contact > &contacts, rw::proximity::ProximityStrategyData &data)
 this method interprets the collision query result and calculates a list of contacts to represent the collision geometry between the colliding geometries. More...
 
bool doIsWithinDistance (rw::proximity::ProximityModel::Ptr a, const rw::math::Transform3D<> &wTa, rw::proximity::ProximityModel::Ptr b, const rw::math::Transform3D<> &wTb, double tolerance, rw::proximity::ProximityStrategyData &data)
 Checks to see if two proximity models \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are closer than the specified tolerance. Result is cached in data. More...
 
rw::proximity::DistanceStrategy::ResultdoDistance (rw::proximity::ProximityModel::Ptr a, const rw::math::Transform3D<> &wTa, rw::proximity::ProximityModel::Ptr b, const rw::math::Transform3D<> &wTb, rw::proximity::ProximityStrategyData &data)
 Calculates the distance between two proximity models \( \mathcal{a} \) and \( \mathcal{b} \). More...
 
rw::proximity::DistanceStrategy::ResultdoDistanceThreshold (rw::proximity::ProximityModel::Ptr aModel, const rw::math::Transform3D<> &wTa, rw::proximity::ProximityModel::Ptr bModel, const rw::math::Transform3D<> &wTb, double threshold, rw::proximity::ProximityStrategyData &data)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) if the distance are within threshold. If the distance between the frames are larger than the threshold, the result will be inaccurate. More...
 
rw::proximity::DistanceMultiStrategy::ResultdoDistances (rw::proximity::ProximityModel::Ptr a, const rw::math::Transform3D<> &wTa, rw::proximity::ProximityModel::Ptr b, const rw::math::Transform3D<> &wTb, double tolerance, rw::proximity::ProximityStrategyData &data)
 Calculates all distances between two given objects \( \mathcal{F}_a \) and \( \mathcal{F}_b \) where the distances are below a certain threshold. More...
 
void clear ()
 Clears any stored model information. More...
 
int getNrOfBVTests ()
 returns the number of bounding volume tests performed since the last call to clearStats
 
int getNrOfTriTests ()
 returns the number of ptriangle tests performed since the last call to clearStats
 
void clearStats ()
 clears the bounding volume and triangle test counters.
 
void setThreshold (double threshold)
 
std::pair< rw::math::Vector3D<>, rw::math::Vector3D<> > getSurfaceNormals (rw::proximity::MultiDistanceResult &res, int idx)
 Get the Surface Normals. More...
 
- Public Member Functions inherited from CollisionStrategy
virtual ~CollisionStrategy ()
 Destroys object.
 
bool inCollision (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, QueryType type=FirstContact)
 Checks to see if two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are in collision. More...
 
bool inCollision (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, class ProximityStrategyData &data, QueryType type=FirstContact)
 Checks to see if two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are in collision. More...
 
bool inCollision (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, ProximityStrategyData &data)
 Checks to see if two proximity models are in collision. More...
 
- Public Member Functions inherited from ProximityStrategy
virtual ~ProximityStrategy ()
 Destructor.
 
virtual bool addModel (rw::core::Ptr< rw::models::Object > object)
 Adds a Proximity model of a frame to this strategy. More...
 
virtual bool addModel (const rw::core::Ptr< rw::kinematics::Frame > frame, const rw::geometry::Geometry &faces)
 Adds a Proximity model to a frame where the geometry is copied in the underlying proximity strategy. More...
 
virtual bool addModel (const rw::core::Ptr< rw::kinematics::Frame > frame, rw::core::Ptr< rw::geometry::Geometry > faces, bool forceCopy=false)
 Adds a Proximity model to a frame. More...
 
virtual bool hasModel (const rw::core::Ptr< rw::kinematics::Frame > frame)
 Tells whether the frame has a proximity model in the strategy. More...
 
virtual void clearFrame (const rw::core::Ptr< rw::kinematics::Frame > frame)
 Clear (remove all) model information for frame frame.
 
virtual void clearFrames ()
 Clear (remove all) model information for all frames.
 
ProximityModel::Ptr getModel (const rw::core::Ptr< rw::kinematics::Frame > frame)
 get the proximitymodel associated to frame. If no model has been associated to frame then NULL is returned. More...
 
 DEPRECATED ("This function is deprecated due to a spelling mistake, use the correct " "spelling \"getGeometries\" instead") std
 
void useThreads (int threads)
 setNumber of threads the strategy may use More...
 
- Public Member Functions inherited from CollisionToleranceStrategy
virtual ~CollisionToleranceStrategy ()
 Destroys object.
 
bool isWithinDistance (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, double tolerance)
 Checks to see if the geometry attached to two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are closer than the specified tolerance. More...
 
bool isWithinDistance (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, double distance, class ProximityStrategyData &data)
 Checks to see if the geometry attached to two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are closer than the specified tolerance. Result is cached in data. More...
 
bool isWithinDistance (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, double tolerance, class ProximityStrategyData &data)
 Checks to see if two proximity models \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are closer than the specified tolerance. Result is cached in data. More...
 
- Public Member Functions inherited from DistanceStrategy
virtual ~DistanceStrategy ()
 Destroys object.
 
Result distance (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \). More...
 
Resultdistance (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, class ProximityStrategyData &data)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \). More...
 
Resultdistance (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, class ProximityStrategyData &data)
 Calculates the distance between two proximity models \( \mathcal{a} \) and \( \mathcal{b} \). More...
 
Result distance (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, double threshold)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) if the distance are within threshold. If the distance between the frames are larger than the threshold, the result will be inaccurate. More...
 
DistanceStrategy::Resultdistance (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, double threshold, ProximityStrategyData &data)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) if the distance are within threshold. If the distance between the frames are larger than the threshold, the result will be inaccurate. More...
 
DistanceStrategy::Resultdistance (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, double threshold, ProximityStrategyData &data)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) if the distance are within threshold. If the distance between the frames are larger than the threshold, the result will be inaccurate. More...
 
- Public Member Functions inherited from DistanceMultiStrategy
virtual ~DistanceMultiStrategy ()
 Destroys object.
 
Result distances (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, double tolerance)
 Calculates all distances between geometry of two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \). More...
 
Resultdistances (const rw::core::Ptr< kinematics::Frame > a, const math::Transform3D< double > &wTa, const rw::core::Ptr< kinematics::Frame > b, const math::Transform3D< double > &wTb, double tolerance, class ProximityStrategyData &data)
 Calculates all distances between geometry of two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \). More...
 
Resultdistances (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, double tolerance, class ProximityStrategyData &data)
 Calculates all distances between two given objects \( \mathcal{F}_a \) and \( \mathcal{F}_b \) where the distances are below a certain threshold. More...
 

Static Public Member Functions

static rw::proximity::CollisionStrategy::Ptr make ()
 A PQP based collision strategy.
 
- Static Public Member Functions inherited from CollisionStrategy
static CollisionStrategy::Ptr make (rw::core::Ptr< CollisionToleranceStrategy > strategy, double tolerance)
 A collision strategy constructed from a collision tolerance strategy and a resolution. More...
 
static CollisionStrategy::Ptr make (rw::core::Ptr< CollisionToleranceStrategy > strategy, const rw::kinematics::FrameMap< double > &frameToTolerance, double defaultTolerance)
 A collision strategy constructed from a collision tolerance strategy and a resolution. More...
 

Additional Inherited Members

- Protected Member Functions inherited from CollisionStrategy
virtual bool doInCollision (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, ProximityStrategyData &data)=0
 Checks to see if two proximity models are in collision. More...
 
 CollisionStrategy ()
 Creates object.
 
- Protected Member Functions inherited from ProximityStrategy
 ProximityStrategy ()
 Creates object.
 
- Protected Member Functions inherited from CollisionToleranceStrategy
virtual bool doIsWithinDistance (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, double tolerance, class ProximityStrategyData &data)=0
 Checks to see if two proximity models \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are closer than the specified tolerance. Result is cached in data. More...
 
 CollisionToleranceStrategy ()
 Creates object.
 
- Protected Member Functions inherited from DistanceStrategy
virtual ResultdoDistance (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, class ProximityStrategyData &data)=0
 Calculates the distance between two proximity models \( \mathcal{a} \) and \( \mathcal{b} \). More...
 
virtual DistanceStrategy::ResultdoDistanceThreshold (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, double threshold, ProximityStrategyData &data)
 Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) if the distance are within threshold. If the distance between the frames are larger than the threshold, the result will be inaccurate. More...
 
 DistanceStrategy ()
 Creates object.
 
- Protected Member Functions inherited from DistanceMultiStrategy
virtual ResultdoDistances (ProximityModel::Ptr a, const math::Transform3D< double > &wTa, ProximityModel::Ptr b, const math::Transform3D< double > &wTb, double tolerance, class ProximityStrategyData &data)=0
 Calculates all distances between two given objects \( \mathcal{F}_a \) and \( \mathcal{F}_b \) where the distances are below a certain threshold. More...
 
 DistanceMultiStrategy ()
 Creates object.
 
- Protected Attributes inherited from ProximityStrategy
size_t _threads
 the number of threads the strategy may use
 

Detailed Description

This is a strategy wrapper for the distance library PQP (Proximity Query Package).

PQP use Oriented Bounding Boxes (OBB) and hierarchical bounding trees for fast distance calculation.

For further information check out http://www.cs.unc.edu/~geom/SSV/

Member Function Documentation

◆ addGeometry() [1/2]

bool addGeometry ( rw::proximity::ProximityModel model,
const rw::geometry::Geometry geom 
)
virtual

Parameters
model[in] the proximity model to add data to
geom[in] the geometry that is to be added

Implements ProximityStrategy.

◆ addGeometry() [2/2]

bool addGeometry ( rw::proximity::ProximityModel model,
rw::core::Ptr< rw::geometry::Geometry geom,
bool  forceCopy = false 
)
virtual

Parameters
model
geom
forceCopy
Returns

Implements ProximityStrategy.

◆ clear()

void clear ( )
virtual

Clears any stored model information.

Implements ProximityStrategy.

◆ createModel()

virtual rw::proximity::ProximityModel::Ptr createModel ( )
virtual

creates an empty ProximityModel

Implements ProximityStrategy.

◆ destroyModel()

void destroyModel ( rw::proximity::ProximityModel model)
virtual

deallocates the memory used for model

Parameters
model

Implements ProximityStrategy.

◆ doDistance()

Calculates the distance between two proximity models \( \mathcal{a} \) and \( \mathcal{b} \).

Parameters
a[in] \( \mathcal{F}_a \)
wTa[in] \( \robabx{w}{a}{\mathbf{T}} \)
b[in] \( \mathcal{F}_b \)
wTb[in] \( \robabx{w}{b}{\mathbf{T}} \)
data
Returns
shortest distance if \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are separated and not in collision.

◆ doDistances()

Calculates all distances between two given objects \( \mathcal{F}_a \) and \( \mathcal{F}_b \) where the distances are below a certain threshold.

Parameters
a[in] \( \mathcal{F}_a \)
wTa[in] \( \robabx{w}{a}{\mathbf{T}} \)
b[in] \( \mathcal{F}_b \)
wTb[in] \( \robabx{w}{b}{\mathbf{T}} \)
tolerance[in] point pairs that are closer than tolerance will be included in the result.
data
Returns
list of distances between all points that are closer than threshold.

◆ doDistanceThreshold()

Calculates the distance between two given frames \( \mathcal{F}_a \) and \( \mathcal{F}_b \) if the distance are within threshold. If the distance between the frames are larger than the threshold, the result will be inaccurate.

Parameters
aModel[in] \( \mathcal{F}_a \)
wTa[in] \( \robabx{w}{a}{\mathbf{T}} \)
bModel[in] \( \mathcal{F}_b \)
wTb[in] \( \robabx{w}{b}{\mathbf{T}} \)
threshold[in] threshold for distance calculations
data
Returns
shortest distance if \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are separated and not in collision.

◆ doInCollision()

Checks to see if two proximity models are in collision.

Parameters
a[in] model 1
wTa[in] transform of model a
b[in] model 2
wTb[in] transform of model b
data[in/out] caching and result container
Returns
true if \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are colliding, false otherwise.

◆ doIsWithinDistance()

bool doIsWithinDistance ( rw::proximity::ProximityModel::Ptr  a,
const rw::math::Transform3D<> &  wTa,
rw::proximity::ProximityModel::Ptr  b,
const rw::math::Transform3D<> &  wTb,
double  tolerance,
rw::proximity::ProximityStrategyData data 
)

Checks to see if two proximity models \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are closer than the specified tolerance. Result is cached in data.

Parameters
a[in] \( \mathcal{F}_a \)
wTa[in] \( \robabx{w}{a}{\mathbf{T}} \)
b[in] \( \mathcal{F}_b \)
wTb[in] \( \robabx{w}{b}{\mathbf{T}} \)
tolerance[in] frames with a distance in between them that is less than tolerance are in collision
data
Returns
true if \( \mathcal{F}_a \) and \( \mathcal{F}_b \) are colliding, false otherwise.

◆ getCollisionContacts()

void getCollisionContacts ( std::vector< rw::proximity::CollisionStrategy::Contact > &  contacts,
rw::proximity::ProximityStrategyData data 
)
virtual

this method interprets the collision query result and calculates a list of contacts to represent the collision geometry between the colliding geometries.

Please note that for most collisions a single point and normal is not sufficient to describe the complete collision area. However, it is typically a reasonable approximation. The approximation can hence be implementation specific.

Parameters
contacts[out] list of contacts that can be calculated from data
data[in] the result from the collision query

Implements CollisionStrategy.

◆ getGeometries()

std::vector<rw::core::Ptr<rw::geometry::Geometry> > getGeometries ( rw::proximity::ProximityModel model)
virtual

the list of all geometry that are associated to the proximity model model is returned

Parameters
model[in] the model containing the geometries
Returns
all geometry associated to the proximity model

Implements ProximityStrategy.

◆ getGeometryIDs()

std::vector<std::string> getGeometryIDs ( rw::proximity::ProximityModel model)
virtual

the list of all geometry ids that are associated to the proximity model model is returned

Parameters
model[in] the model containing the geometries
Returns
all geometry ids associated to the proximity model

Implements ProximityStrategy.

◆ getSurfaceNormals()

std::pair<rw::math::Vector3D<>, rw::math::Vector3D<> > getSurfaceNormals ( rw::proximity::MultiDistanceResult res,
int  idx 
)
virtual

Get the Surface Normals.

Parameters
resthe result to get the normals from
idx
Returns
std::pair<rw::math::Vector3D<>, rw::math::Vector3D<>>

Implements DistanceMultiStrategy.

◆ removeGeometry()

bool removeGeometry ( rw::proximity::ProximityModel model,
const std::string &  geomId 
)
virtual

removes a geometry from a specific proximity model

Implements ProximityStrategy.


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