Go to the documentation of this file.
52 : name_(std::move(
name)), config_info_(std::move(config_info)), coll_config_(config_info_)
59 coll_config_.getCollisionAlgorithmCreateFunc(CONVEX_SHAPE_PROXYTYPE, CONVEX_SHAPE_PROXYTYPE));
62 ~btCollisionDispatcher::CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD);
77 COW::Ptr new_cow = cow.second->clone();
79 assert(new_cow->getCollisionShape());
80 assert(new_cow->getCollisionShape()->getShapeType() != CUSTOM_CONVEX_SHAPE_TYPE);
82 new_cow->setWorldTransform(cow.second->getWorldTransform());
83 new_cow->setContactProcessingThreshold(margin);
85 manager->addCollisionObject(new_cow);
88 manager->setActiveCollisionObjects(
active_);
105 if (new_cow !=
nullptr)
108 new_cow->setContactProcessingThreshold(margin);
155 it->second->m_enabled =
true;
166 it->second->m_enabled =
false;
176 return it->second->m_enabled;
193 assert(names.size() == poses.size());
194 for (
auto i = 0U; i < names.size(); ++i)
223 cows_.push_back(cow);
254 const std::string& name2,
255 double collision_margin)
268 std::shared_ptr<const tesseract_common::ContactAllowedValidator> validator)
272 std::shared_ptr<const tesseract_common::ContactAllowedValidator>
283 for (
auto cow1_iter =
cows_.begin(); cow1_iter != (
cows_.end() - 1); cow1_iter++)
290 if (!cow1->m_enabled)
293 btVector3 min_aabb[2], max_aabb[2];
294 cow1->getAABB(min_aabb[0], max_aabb[0]);
296 btCollisionObjectWrapper obA(
nullptr, cow1->getCollisionShape(), cow1.get(), cow1->getWorldTransform(), -1, -1);
299 for (
auto cow2_iter = cow1_iter + 1; cow2_iter !=
cows_.end(); cow2_iter++)
304 cow2->getAABB(min_aabb[1], max_aabb[1]);
306 bool aabb_check = (min_aabb[0][0] <= max_aabb[1][0] && max_aabb[0][0] >= min_aabb[1][0]) &&
307 (min_aabb[0][1] <= max_aabb[1][1] && max_aabb[0][1] >= min_aabb[1][1]) &&
308 (min_aabb[0][2] <= max_aabb[1][2] && max_aabb[0][2] >= min_aabb[1][2]);
316 btCollisionObjectWrapper obB(
317 nullptr, cow2->getCollisionShape(), cow2.get(), cow2->getWorldTransform(), -1, -1);
319 btCollisionAlgorithm* algorithm =
320 dispatcher_->findAlgorithm(&obA, &obB,
nullptr, BT_CLOSEST_POINT_ALGORITHMS);
321 assert(algorithm !=
nullptr);
322 if (algorithm !=
nullptr)
325 contactPointResult.m_closestPointDistanceThreshold = cc.m_closestDistanceThreshold;
328 algorithm->processCollision(&obA, &obB,
dispatch_info_, &contactPointResult);
330 algorithm->~btCollisionAlgorithm();
354 cows_.push_back(cow);
361 co.second->setContactProcessingThreshold(margin);
AlignedVector< Eigen::Isometry3d > VectorIsometry3d
bool removeCollisionObject(const std::string &name) override final
Remove an object from the checker.
void setCollisionMargin(const std::string &obj1, const std::string &obj2, double collision_margin)
static const tesseract_common::VectorIsometry3d EMPTY_COLLISION_SHAPES_TRANSFORMS
double getMaxCollisionMargin() const
const CollisionMarginData & getCollisionMarginData() const override final
Get the contact distance threshold.
std::unique_ptr< btCollisionDispatcher > dispatcher_
The bullet collision dispatcher used for getting object to object collison algorithm.
const std::vector< std::string > & getActiveCollisionObjects() const override final
Get which collision objects can move.
BulletDiscreteSimpleManager(std::string name="BulletDiscreteSimpleManager", TesseractCollisionConfigurationInfo config_info=TesseractCollisionConfigurationInfo())
Tesseract ROS Bullet discrete simple collision manager.
const tesseract_common::VectorIsometry3d & getCollisionObjectGeometriesTransforms(const std::string &name) const override final
Get a collision objects collision geometries transforms.
void onCollisionMarginDataChanged()
This function will update internal data when margin data has changed.
const std::vector< std::string > & getCollisionObjects() const override final
Get all collision objects.
std::string getName() const override final
Get the name of the contact manager.
std::vector< std::string > collision_objects_
A list of the collision objects.
AlignedMap< std::string, Eigen::Isometry3d > TransformMap
TesseractCollisionConfigurationInfo clone() const
Clone the collision configuration information.
void incrementCollisionMargin(double increment) override final
Increment the collision margin data by some value.
void setCollisionMarginPairData(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type=CollisionMarginPairOverrideType::REPLACE) override final
Set the contact distance thresholds for which collision should be considered on a per pair basis.
static const CollisionShapesConst EMPTY_COLLISION_SHAPES_CONST
void setDefaultCollisionMargin(double default_collision_margin) override final
Set the default collision margin.
COW::Ptr createCollisionObject(const std::string &name, const int &type_id, const CollisionShapesConst &shapes, const tesseract_common::VectorIsometry3d &shape_poses, bool enabled=true)
void contactTest(ContactResultMap &collisions, const ContactRequest &request) override final
Perform a contact test for all objects based.
bool addCollisionObject(const std::string &name, const int &mask_id, const CollisionShapesConst &shapes, const tesseract_common::VectorIsometry3d &shape_poses, bool enabled=true) override final
Add a object to the checker.
template Halfspace< double > transform(const Halfspace< double > &a, const Transform3< double > &tf)
void setCollisionObjectsTransform(const std::string &name, const Eigen::Isometry3d &pose) override final
Set a single collision object's transforms.
void setCollisionMarginData(CollisionMarginData collision_margin_data) override final
Set the contact distance threshold.
std::vector< std::string > active_
A list of the active collision objects.
std::vector< COW::Ptr > cows_
A vector of collision objects (active followed by static)
DiscreteContactManager::UPtr clone() const override final
Clone the manager.
bool disableCollisionObject(const std::string &name) override final
Disable an object.
bool needsCollisionCheck(const COW &cow1, const COW &cow2, const std::shared_ptr< const tesseract_common::ContactAllowedValidator > &validator, bool verbose=false)
This is used to check if a collision check is required between the provided two collision objects.
const CollisionShapesConst & getCollisionObjectGeometries(const std::string &name) const override final
Get a collision objects collision geometries.
CollisionMarginPairOverrideType
std::shared_ptr< CollisionObjectWrapper > Ptr
bool isCollisionObjectEnabled(const std::string &name) const override final
Check if collision object is enabled.
std::vector< CollisionShapeConstPtr > CollisionShapesConst
void apply(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type)
std::shared_ptr< const tesseract_common::ContactAllowedValidator > getContactAllowedValidator() const override final
Get the active function for determining if two links are allowed to be in collision.
void incrementMargins(double increment)
Link2Cow link2cow_
A map of all (static and active) collision objects being managed.
void setCollisionMarginPair(const std::string &name1, const std::string &name2, double collision_margin) override final
Set the margin for a given contact pair.
ContactTestData contact_test_data_
This is used when contactTest is called. It is also added as a user point to the collsion objects so ...
This is copied directly out of BulletWorld.
void setActiveCollisionObjects(const std::vector< std::string > &names) override final
Set which collision objects can move.
void setDefaultCollisionMargin(double default_collision_margin)
bool hasCollisionObject(const std::string &name) const override final
Find if a collision object already exists.
TesseractCollisionConfiguration coll_config_
The bullet collision configuration.
btVector3 convertEigenToBt(const Eigen::Vector3d &v)
bool enableCollisionObject(const std::string &name) override final
Enable an object.
void updateCollisionObjectFilters(const std::vector< std::string > &active, const COW::Ptr &cow)
Update a collision objects filters.
void setContactAllowedValidator(std::shared_ptr< const tesseract_common::ContactAllowedValidator > validator) override final
Set the active function for determining if two links are allowed to be in collision.
TesseractCollisionConfigurationInfo config_info_
The bullet collision configuration information.
tesseract_common::CollisionMarginData CollisionMarginData
btDispatcherInfo dispatch_info_
The bullet collision dispatcher configuration information.