Aikido
aikido::constraint::dart::CollisionFree Class Reference

A testable that uses a collision detector to check whether a metakeleton state (configuration) results in collision between and within specified collision groups. More...

#include <aikido/constraint/dart/CollisionFree.hpp>

Inheritance diagram for aikido::constraint::dart::CollisionFree:
aikido::constraint::Testable

Public Member Functions

 CollisionFree (statespace::dart::ConstMetaSkeletonStateSpacePtr _metaSkeletonStateSpace, ::dart::dynamics::MetaSkeletonPtr _metaskeleton, std::shared_ptr<::dart::collision::CollisionDetector > _collisionDetector, ::dart::collision::CollisionOption _collisionOptions=::dart::collision::CollisionOption(false, 1, std::make_shared<::dart::collision::BodyNodeCollisionFilter >()))
 Constructs an empty constraint that uses _collisionDetector to test for collision. More...
 
statespace::ConstStateSpacePtr getStateSpace () const override
 Returns StateSpace in which this constraint operates. More...
 
bool isSatisfied (const aikido::statespace::StateSpace::State *_state, TestableOutcome *outcome=nullptr) const override
 Returns true if state satisfies this constraint. More...
 
std::unique_ptr< TestableOutcomecreateOutcome () const override
 Return an instance of a TestableOutcome derivative class that corresponds to this constraint class. More...
 
void addPairwiseCheck (std::shared_ptr<::dart::collision::CollisionGroup > _group1, std::shared_ptr<::dart::collision::CollisionGroup > _group2)
 Checks collision between group1 and group2. More...
 
void removePairwiseCheck (std::shared_ptr<::dart::collision::CollisionGroup > _group1, std::shared_ptr<::dart::collision::CollisionGroup > _group2)
 Remove collision check between group1 and group2. More...
 
void addSelfCheck (std::shared_ptr<::dart::collision::CollisionGroup > _group)
 Checks collision within group. More...
 
void removeSelfCheck (std::shared_ptr<::dart::collision::CollisionGroup > _group)
 Remove self-collision check within group. More...
 
- Public Member Functions inherited from aikido::constraint::Testable
virtual ~Testable ()=default
 

Private Types

using CollisionGroup = ::dart::collision::CollisionGroup
 

Private Attributes

aikido::statespace::dart::ConstMetaSkeletonStateSpacePtr mMetaSkeletonStateSpace
 
::dart::dynamics::MetaSkeletonPtr mMetaSkeleton
 
std::shared_ptr<::dart::collision::CollisionDetector > mCollisionDetector
 
::dart::collision::CollisionOption mCollisionOptions
 
std::vector< std::pair< std::shared_ptr< CollisionGroup >, std::shared_ptr< CollisionGroup > > > mGroupsToPairwiseCheck
 
std::vector< std::shared_ptr< CollisionGroup > > mGroupsToSelfCheck
 

Detailed Description

A testable that uses a collision detector to check whether a metakeleton state (configuration) results in collision between and within specified collision groups.

Member Typedef Documentation

◆ CollisionGroup

using aikido::constraint::dart::CollisionFree::CollisionGroup = ::dart::collision::CollisionGroup
private

Constructor & Destructor Documentation

◆ CollisionFree()

aikido::constraint::dart::CollisionFree::CollisionFree ( statespace::dart::ConstMetaSkeletonStateSpacePtr  _metaSkeletonStateSpace,
::dart::dynamics::MetaSkeletonPtr  _metaskeleton,
std::shared_ptr<::dart::collision::CollisionDetector >  _collisionDetector,
::dart::collision::CollisionOption  _collisionOptions = ::dart::collision::CollisionOption(false, 1, std::make_shared<::dart::collision::BodyNodeCollisionFilter >()) 
)

Constructs an empty constraint that uses _collisionDetector to test for collision.

You should call addPairWiseCheck and addSelfCheck to register collision checks before calling isSatisfied.

Parameters
_metaSkeletonStateSpacestate space on which the constraint operates
_metaskeletonMetaSkeleton to test with
_collisionDetectorcollision detector used to test for collision
_collisionOptionsoptions passed to _collisionDetector

Member Function Documentation

◆ addPairwiseCheck()

void aikido::constraint::dart::CollisionFree::addPairwiseCheck ( std::shared_ptr<::dart::collision::CollisionGroup >  _group1,
std::shared_ptr<::dart::collision::CollisionGroup >  _group2 
)

Checks collision between group1 and group2.

Parameters
_group1First collision group.
_group2Second collision group.

◆ addSelfCheck()

void aikido::constraint::dart::CollisionFree::addSelfCheck ( std::shared_ptr<::dart::collision::CollisionGroup >  _group)

Checks collision within group.

Parameters
_groupCollision group.

◆ createOutcome()

std::unique_ptr<TestableOutcome> aikido::constraint::dart::CollisionFree::createOutcome ( ) const
overridevirtual

Return an instance of a TestableOutcome derivative class that corresponds to this constraint class.

Ensures that correct outcome object is passed to isSatisfied (and casts, etc do not explode).

Note
Returns an instance of CollisionFreeOutcome.

Implements aikido::constraint::Testable.

◆ getStateSpace()

statespace::ConstStateSpacePtr aikido::constraint::dart::CollisionFree::getStateSpace ( ) const
overridevirtual

Returns StateSpace in which this constraint operates.

Implements aikido::constraint::Testable.

◆ isSatisfied()

bool aikido::constraint::dart::CollisionFree::isSatisfied ( const aikido::statespace::StateSpace::State _state,
TestableOutcome outcome = nullptr 
) const
overridevirtual

Returns true if state satisfies this constraint.

Parameters
[in]_stategiven state to test.
[in]outcomepointer to TestableOutcome derivative instance that method will populate with useful information. Each derivative class of Testable may expect outcome to be a different derivative class of TestableOutcome (this casting and population is done under the hood). If this argument is missing, it is ignored.
Note
Outcome is expected to be an instance of CollisionFreeOutcome. This method will cast outcome to a pointer of this type, and then populate the collision information (which bodies are in self/pairwise collision).

Implements aikido::constraint::Testable.

◆ removePairwiseCheck()

void aikido::constraint::dart::CollisionFree::removePairwiseCheck ( std::shared_ptr<::dart::collision::CollisionGroup >  _group1,
std::shared_ptr<::dart::collision::CollisionGroup >  _group2 
)

Remove collision check between group1 and group2.

Parameters
_group1First collision group.
_group2Second collision group.

◆ removeSelfCheck()

void aikido::constraint::dart::CollisionFree::removeSelfCheck ( std::shared_ptr<::dart::collision::CollisionGroup >  _group)

Remove self-collision check within group.

Parameters
_groupCollision group.

Member Data Documentation

◆ mCollisionDetector

std::shared_ptr<::dart::collision::CollisionDetector> aikido::constraint::dart::CollisionFree::mCollisionDetector
private

◆ mCollisionOptions

::dart::collision::CollisionOption aikido::constraint::dart::CollisionFree::mCollisionOptions
private

◆ mGroupsToPairwiseCheck

std::vector<std::pair< std::shared_ptr<CollisionGroup>, std::shared_ptr<CollisionGroup> > > aikido::constraint::dart::CollisionFree::mGroupsToPairwiseCheck
private

◆ mGroupsToSelfCheck

std::vector<std::shared_ptr<CollisionGroup> > aikido::constraint::dart::CollisionFree::mGroupsToSelfCheck
private

◆ mMetaSkeleton

::dart::dynamics::MetaSkeletonPtr aikido::constraint::dart::CollisionFree::mMetaSkeleton
private

◆ mMetaSkeletonStateSpace

aikido::statespace::dart::ConstMetaSkeletonStateSpacePtr aikido::constraint::dart::CollisionFree::mMetaSkeletonStateSpace
private