Go to the documentation of this file.
52 static_manager_ = std::make_unique<fcl::DynamicAABBTreeCollisionManagerd>();
53 dynamic_manager_ = std::make_unique<fcl::DynamicAABBTreeCollisionManagerd>();
61 auto manager = std::make_unique<FCLDiscreteBVHManager>();
64 manager->addCollisionObject(cow.second->clone());
66 manager->setActiveCollisionObjects(
active_);
68 manager->setContactAllowedValidator(
validator_);
83 if (new_cow !=
nullptr)
117 std::vector<CollisionObjectPtr>& objects = it->second->getCollisionObjects();
120 std::vector<fcl::CollisionObject<double>*> static_objs;
123 std::vector<fcl::CollisionObject<double>*> dynamic_objs;
128 for (
auto& co : objects)
130 auto static_it = std::find(static_objs.begin(), static_objs.end(), co.get());
131 if (static_it != static_objs.end())
134 auto dynamic_it = std::find(dynamic_objs.begin(), dynamic_objs.end(), co.get());
135 if (dynamic_it != dynamic_objs.end())
151 it->second->m_enabled =
true;
162 it->second->m_enabled =
false;
172 return it->second->m_enabled;
182 const Eigen::Isometry3d& cur_tf = it->second->getCollisionObjectsTransform();
184 if (!cur_tf.translation().isApprox(pose.translation(), 1e-8) || !cur_tf.rotation().isApprox(pose.rotation(), 1e-8))
186 it->second->setCollisionObjectsTransform(pose);
204 assert(names.size() == poses.size());
207 for (
auto i = 0U; i < names.size(); ++i)
212 const Eigen::Isometry3d& cur_tf = it->second->getCollisionObjectsTransform();
214 if (!cur_tf.translation().isApprox(poses[i].translation(), 1e-8) ||
215 !cur_tf.rotation().isApprox(poses[i].rotation(), 1e-8))
217 it->second->setCollisionObjectsTransform(poses[i]);
218 std::vector<CollisionObjectRawPtr>& co = it->second->getCollisionObjectsRaw();
248 const Eigen::Isometry3d& cur_tf = it->second->getCollisionObjectsTransform();
250 if (!cur_tf.translation().isApprox(
transform.second.translation(), 1e-8) ||
251 !cur_tf.rotation().isApprox(
transform.second.rotation(), 1e-8))
253 it->second->setCollisionObjectsTransform(
transform.second);
254 std::vector<CollisionObjectRawPtr>& co = it->second->getCollisionObjectsRaw();
313 const std::string& name2,
314 double collision_margin)
327 std::shared_ptr<const tesseract_common::ContactAllowedValidator> validator)
331 std::shared_ptr<const tesseract_common::ContactAllowedValidator>
364 std::size_t cnt = cow->getCollisionObjectsRaw().size();
371 std::vector<CollisionObjectPtr>& objects = cow->getCollisionObjects();
375 for (
auto& co : objects)
380 for (
auto& co : objects)
401 std::vector<CollisionObjectRawPtr>& co = cow.second->getCollisionObjectsRaw();
AlignedVector< Eigen::Isometry3d > VectorIsometry3d
const tesseract_common::VectorIsometry3d & getCollisionObjectGeometriesTransforms(const std::string &name) const override final
Get a collision objects collision geometries transforms.
void setCollisionMargin(const std::string &obj1, const std::string &obj2, double collision_margin)
double getMaxCollisionMargin() const
bool enableCollisionObject(const std::string &name) override final
Enable an object.
Tesseract ROS FCL contact checker implementation.
void setCollisionMarginPair(const std::string &name1, const std::string &name2, double collision_margin) override final
Set the margin for a given contact pair.
std::string getName() const override final
Get the name of the contact manager.
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
std::vector< std::string > collision_objects_
A list of the collision objects.
std::unique_ptr< fcl::BroadPhaseCollisionManagerd > dynamic_manager_
Broad-phase Collision Manager for active collision objects.
void setCollisionObjectsTransform(const std::string &name, const Eigen::Isometry3d &pose) override final
Set a single collision object's transforms.
CollisionMarginData collision_margin_data_
The contact distance threshold.
AlignedMap< std::string, Eigen::Isometry3d > TransformMap
void contactTest(ContactResultMap &collisions, const ContactRequest &request) override final
Perform a contact test for all objects based.
template Halfspace< double > transform(const Halfspace< double > &a, const Transform3< double > &tf)
bool collisionCallback(fcl::CollisionObjectd *o1, fcl::CollisionObjectd *o2, void *data)
std::size_t fcl_co_count_
The number fcl collision objects.
void updateCollisionObjectFilters(const std::vector< std::string > &active, const COW::Ptr &cow, const std::unique_ptr< fcl::BroadPhaseCollisionManagerd > &static_manager, const std::unique_ptr< fcl::BroadPhaseCollisionManagerd > &dynamic_manager)
Update collision objects filters.
bool hasCollisionObject(const std::string &name) const override final
Find if a collision object already exists.
DiscreteContactManager::UPtr clone() const override final
Clone the manager.
void setDefaultCollisionMargin(double default_collision_margin) override final
Set the default collision margin.
void onCollisionMarginDataChanged()
This function will update internal data when margin data has changed.
bool removeCollisionObject(const std::string &name) override final
Remove an object from the checker.
CollisionMarginPairOverrideType
bool disableCollisionObject(const std::string &name) override final
Disable an object.
bool distanceCallback(fcl::CollisionObjectd *o1, fcl::CollisionObjectd *o2, void *data)
const CollisionMarginData & getCollisionMarginData() const override final
Get the contact distance threshold.
void setCollisionMarginData(CollisionMarginData collision_margin_data) override final
Set the contact distance threshold.
COW::Ptr createFCLCollisionObject(const std::string &name, const int &type_id, const CollisionShapesConst &shapes, const tesseract_common::VectorIsometry3d &shape_poses, bool enabled)
static const tesseract_common::VectorIsometry3d EMPTY_COLLISION_SHAPES_TRANSFORMS
std::vector< CollisionObjectRawPtr > dynamic_update_
This is used to store dynamic collision objects to update.
std::vector< CollisionShapeConstPtr > CollisionShapesConst
void apply(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type)
std::shared_ptr< CollisionObjectWrapper > Ptr
std::unique_ptr< fcl::BroadPhaseCollisionManagerd > static_manager_
Broad-phase Collision Manager for active collision objects.
void incrementMargins(double increment)
const CollisionShapesConst & getCollisionObjectGeometries(const std::string &name) const override final
Get a collision objects collision geometries.
std::vector< std::string > active_
A list of the active collision objects.
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.
void setActiveCollisionObjects(const std::vector< std::string > &names) override final
Set which collision objects can move.
std::vector< CollisionObjectRawPtr > static_update_
This is used to store static collision objects to update.
void setDefaultCollisionMargin(double default_collision_margin)
const std::vector< std::string > & getActiveCollisionObjects() const override final
Get which collision objects can move.
Link2COW link2cow_
A map of all (static and active) collision objects being managed.
std::shared_ptr< const tesseract_common::ContactAllowedValidator > validator_
The is allowed collision function.
const std::vector< std::string > & getCollisionObjects() const override final
Get all collision objects.
FCLDiscreteBVHManager(std::string name="FCLDiscreteBVHManager")
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.
bool isCollisionObjectEnabled(const std::string &name) const override final
Check if collision object is enabled.
tesseract_common::CollisionMarginData CollisionMarginData
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.