DART  6.10.1
dart::collision::CollisionDetector Class Referenceabstract

#include <CollisionDetector.hpp>

Inheritance diagram for dart::collision::CollisionDetector:
dart::collision::BulletCollisionDetector dart::collision::DARTCollisionDetector dart::collision::FCLCollisionDetector dart::collision::OdeCollisionDetector

Classes

class  CollisionObjectManager
 
class  ManagerForSharableCollisionObjects
 
class  ManagerForUnsharableCollisionObjects
 

Public Types

using Factory = common::Factory< std::string, CollisionDetector, std::shared_ptr< CollisionDetector > >
 
using SingletonFactory = common::Singleton< Factory >
 
template<typename Derived >
using Registrar = common::FactoryRegistrar< std::string, CollisionDetector, Derived, std::shared_ptr< CollisionDetector > >
 

Public Member Functions

virtual ~CollisionDetector ()=default
 Destructor. More...
 
virtual std::shared_ptr< CollisionDetectorcloneWithoutCollisionObjects () const =0
 Create a clone of this CollisionDetector. More...
 
virtual const std::string & getType () const =0
 Return collision detection engine type as a std::string. More...
 
virtual std::unique_ptr< CollisionGroupcreateCollisionGroup ()=0
 Create a collision group. More...
 
std::shared_ptr< CollisionGroupcreateCollisionGroupAsSharedPtr ()
 Helper function that creates and returns CollisionGroup as a shared_ptr. More...
 
template<typename... Args>
std::unique_ptr< CollisionGroupcreateCollisionGroup (const Args &... args)
 Create a collision group from any objects that are supported by CollisionGroup::addShapeFramesOf(). More...
 
template<typename... Args>
std::shared_ptr< CollisionGroupcreateCollisionGroupAsSharedPtr (const Args &... args)
 Helper function that creates and returns CollisionGroup as shared_ptr. More...
 
virtual bool collide (CollisionGroup *group, const CollisionOption &option=CollisionOption(false, 1u, nullptr), CollisionResult *result=nullptr)=0
 Perform collision check for a single group. More...
 
virtual bool collide (CollisionGroup *group1, CollisionGroup *group2, const CollisionOption &option=CollisionOption(false, 1u, nullptr), CollisionResult *result=nullptr)=0
 Perform collision check for two groups. More...
 
virtual double distance (CollisionGroup *group, const DistanceOption &option=DistanceOption(false, 0.0, nullptr), DistanceResult *result=nullptr)=0
 Get the minimum signed distance between the Shape pairs in the given CollisionGroup. More...
 
virtual double distance (CollisionGroup *group1, CollisionGroup *group2, const DistanceOption &option=DistanceOption(false, 0.0, nullptr), DistanceResult *result=nullptr)=0
 Get the minimum signed distance between the Shape pairs where a pair consist of two shapes from each groups (one from group1 and one from group2). More...
 
virtual bool raycast (CollisionGroup *group, const Eigen::Vector3d &from, const Eigen::Vector3d &to, const RaycastOption &option=RaycastOption(), RaycastResult *result=nullptr)
 Performs raycast to a collision group. More...
 

Static Public Member Functions

static FactorygetFactory ()
 Returns the singleton factory. More...
 

Protected Member Functions

 CollisionDetector ()=default
 Constructor. More...
 
std::shared_ptr< CollisionObjectclaimCollisionObject (const dynamics::ShapeFrame *shapeFrame)
 Claim CollisionObject associated with shapeFrame. More...
 
virtual std::unique_ptr< CollisionObjectcreateCollisionObject (const dynamics::ShapeFrame *shapeFrame)=0
 Create CollisionObject. More...
 
virtual void refreshCollisionObject (CollisionObject *object)=0
 Update the collision geometry of a ShapeFrame. More...
 
virtual void notifyCollisionObjectDestroying (CollisionObject *object)
 Notify that a CollisionObject is destroying. Do nothing by default. More...
 

Protected Attributes

std::unique_ptr< CollisionObjectManagermCollisionObjectManager
 

Friends

class CollisionObject
 
class CollisionGroup
 

Member Typedef Documentation

◆ Factory

◆ Registrar

template<typename Derived >
using dart::collision::CollisionDetector::Registrar = common::FactoryRegistrar< std::string, CollisionDetector, Derived, std::shared_ptr<CollisionDetector> >

◆ SingletonFactory

Constructor & Destructor Documentation

◆ ~CollisionDetector()

virtual dart::collision::CollisionDetector::~CollisionDetector ( )
virtualdefault

Destructor.

◆ CollisionDetector()

dart::collision::CollisionDetector::CollisionDetector ( )
protecteddefault

Constructor.

Member Function Documentation

◆ claimCollisionObject()

std::shared_ptr< CollisionObject > dart::collision::CollisionDetector::claimCollisionObject ( const dynamics::ShapeFrame shapeFrame)
protected

Claim CollisionObject associated with shapeFrame.

New CollisionObject will be created if it hasn't created yet for shapeFrame.

◆ cloneWithoutCollisionObjects()

virtual std::shared_ptr<CollisionDetector> dart::collision::CollisionDetector::cloneWithoutCollisionObjects ( ) const
pure virtual

Create a clone of this CollisionDetector.

All the properties will be copied over, but not collision objects.

Implemented in dart::collision::OdeCollisionDetector, dart::collision::FCLCollisionDetector, dart::collision::DARTCollisionDetector, and dart::collision::BulletCollisionDetector.

◆ collide() [1/2]

virtual bool dart::collision::CollisionDetector::collide ( CollisionGroup group,
const CollisionOption option = CollisionOption(false, 1u, nullptr),
CollisionResult result = nullptr 
)
pure virtual

Perform collision check for a single group.

If nullptr is passed to result, then the this returns only simple information whether there is a collision of not.

Implemented in dart::collision::OdeCollisionDetector, dart::collision::FCLCollisionDetector, dart::collision::DARTCollisionDetector, and dart::collision::BulletCollisionDetector.

◆ collide() [2/2]

virtual bool dart::collision::CollisionDetector::collide ( CollisionGroup group1,
CollisionGroup group2,
const CollisionOption option = CollisionOption(false, 1u, nullptr),
CollisionResult result = nullptr 
)
pure virtual

Perform collision check for two groups.

If nullptr is passed to result, then the this returns only simple information whether there is a collision of not.

Implemented in dart::collision::OdeCollisionDetector, dart::collision::FCLCollisionDetector, dart::collision::DARTCollisionDetector, and dart::collision::BulletCollisionDetector.

◆ createCollisionGroup() [1/2]

◆ createCollisionGroup() [2/2]

template<typename... Args>
std::unique_ptr< CollisionGroup > dart::collision::CollisionDetector::createCollisionGroup ( const Args &...  args)

Create a collision group from any objects that are supported by CollisionGroup::addShapeFramesOf().

The objects can be any of ShapeFrame, std::vector<ShapeFrame>, CollisionGroup, BodyNode, and Skeleton.

Note that this function adds only the ShapeFrames of each object at the moment that this function is called. Any later addition to or removal of the ShapeFrames that are attached to these objects will NOT be noticed.

◆ createCollisionGroupAsSharedPtr() [1/2]

std::shared_ptr< CollisionGroup > dart::collision::CollisionDetector::createCollisionGroupAsSharedPtr ( )

Helper function that creates and returns CollisionGroup as a shared_ptr.

Internally, this function creates a shared_ptr from unique_ptr returned from createCollisionGroup() so the performance would be slighly worse than using std::make_unique.

◆ createCollisionGroupAsSharedPtr() [2/2]

template<typename... Args>
std::shared_ptr< CollisionGroup > dart::collision::CollisionDetector::createCollisionGroupAsSharedPtr ( const Args &...  args)

Helper function that creates and returns CollisionGroup as shared_ptr.

◆ createCollisionObject()

virtual std::unique_ptr<CollisionObject> dart::collision::CollisionDetector::createCollisionObject ( const dynamics::ShapeFrame shapeFrame)
protectedpure virtual

◆ distance() [1/2]

virtual double dart::collision::CollisionDetector::distance ( CollisionGroup group,
const DistanceOption option = DistanceOption(false, 0.0, nullptr),
DistanceResult result = nullptr 
)
pure virtual

Get the minimum signed distance between the Shape pairs in the given CollisionGroup.

The detailed results are stored in the given DistanceResult if provided.

The results can be different by DistanceOption. By default, non-negative minimum distance (distance >= 0) is returned for all the shape pairs without computing nearest points.

Implemented in dart::collision::OdeCollisionDetector, dart::collision::FCLCollisionDetector, dart::collision::DARTCollisionDetector, and dart::collision::BulletCollisionDetector.

◆ distance() [2/2]

virtual double dart::collision::CollisionDetector::distance ( CollisionGroup group1,
CollisionGroup group2,
const DistanceOption option = DistanceOption(false, 0.0, nullptr),
DistanceResult result = nullptr 
)
pure virtual

Get the minimum signed distance between the Shape pairs where a pair consist of two shapes from each groups (one from group1 and one from group2).

Note that the distance between shapes within the same CollisionGroup are not accounted.

The detailed results are stored in the given DistanceResult if provided.

The results can be different by DistanceOption. By default, non-negative minimum distance (distance >= 0) is returned for all the shape pairs without computing nearest points.

Implemented in dart::collision::OdeCollisionDetector, dart::collision::FCLCollisionDetector, dart::collision::DARTCollisionDetector, and dart::collision::BulletCollisionDetector.

◆ getFactory()

CollisionDetector::Factory * dart::collision::CollisionDetector::getFactory ( )
static

Returns the singleton factory.

◆ getType()

virtual const std::string& dart::collision::CollisionDetector::getType ( ) const
pure virtual

◆ notifyCollisionObjectDestroying()

void dart::collision::CollisionDetector::notifyCollisionObjectDestroying ( CollisionObject object)
protectedvirtual

Notify that a CollisionObject is destroying. Do nothing by default.

Reimplemented in dart::collision::BulletCollisionDetector.

◆ raycast()

bool dart::collision::CollisionDetector::raycast ( CollisionGroup group,
const Eigen::Vector3d &  from,
const Eigen::Vector3d &  to,
const RaycastOption option = RaycastOption(),
RaycastResult result = nullptr 
)
virtual

Performs raycast to a collision group.

Parameters
[in]groupThe collision group the ray will be casted onto.
[in]fromThe start point of the ray in world coordinates.
[in]toThe end point of the ray in world coordinates.
[in]optionThe raycast option.
[in]resultThe raycast result.
Returns
True if the ray hit an collision object.

Reimplemented in dart::collision::BulletCollisionDetector.

◆ refreshCollisionObject()

virtual void dart::collision::CollisionDetector::refreshCollisionObject ( CollisionObject object)
protectedpure virtual

Friends And Related Function Documentation

◆ CollisionGroup

friend class CollisionGroup
friend

◆ CollisionObject

friend class CollisionObject
friend

Member Data Documentation

◆ mCollisionObjectManager

std::unique_ptr<CollisionObjectManager> dart::collision::CollisionDetector::mCollisionObjectManager
protected