bullet_discrete_bvh_manager.cpp
Go to the documentation of this file.
1 
44 
45 extern btScalar gDbvtMargin; // NOLINT
46 
48 {
51 
53  : name_(std::move(name)), config_info_(std::move(config_info)), coll_config_(config_info_)
54 {
55  // Bullet adds a margin of 5cm to which is an extern variable, so we set it to zero.
56  gDbvtMargin = 0;
57 
58  dispatcher_ = std::make_unique<btCollisionDispatcher>(&coll_config_);
59 
60  dispatcher_->registerCollisionCreateFunc(
61  BOX_SHAPE_PROXYTYPE,
62  BOX_SHAPE_PROXYTYPE,
63  coll_config_.getCollisionAlgorithmCreateFunc(CONVEX_SHAPE_PROXYTYPE, CONVEX_SHAPE_PROXYTYPE));
64 
65  dispatcher_->setDispatcherFlags(dispatcher_->getDispatcherFlags() &
66  ~btCollisionDispatcher::CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD);
67 
68  broadphase_ = std::make_unique<btDbvtBroadphase>();
69  broadphase_->getOverlappingPairCache()->setOverlapFilterCallback(&broadphase_overlap_cb_);
70 
72 }
73 
75 {
76  // clean up remaining objects
77  for (auto& co : link2cow_)
79 }
80 
81 std::string BulletDiscreteBVHManager::getName() const { return name_; }
82 
84 {
85  auto manager = std::make_unique<BulletDiscreteBVHManager>(name_, config_info_.clone());
86 
87  auto margin = static_cast<btScalar>(contact_test_data_.collision_margin_data.getMaxCollisionMargin());
88 
89  for (const auto& cow : link2cow_)
90  {
91  COW::Ptr new_cow = cow.second->clone();
92 
93  assert(new_cow->getCollisionShape());
94  assert(new_cow->getCollisionShape()->getShapeType() != CUSTOM_CONVEX_SHAPE_TYPE);
95 
96  new_cow->setWorldTransform(cow.second->getWorldTransform());
97  new_cow->setContactProcessingThreshold(margin);
98 
99  manager->addCollisionObject(new_cow);
100  }
101 
102  manager->setActiveCollisionObjects(active_);
103  manager->setCollisionMarginData(contact_test_data_.collision_margin_data);
104  manager->setContactAllowedValidator(contact_test_data_.validator);
105 
106  return manager;
107 }
108 
109 bool BulletDiscreteBVHManager::addCollisionObject(const std::string& name,
110  const int& mask_id,
111  const CollisionShapesConst& shapes,
112  const tesseract_common::VectorIsometry3d& shape_poses,
113  bool enabled)
114 {
115  if (link2cow_.find(name) != link2cow_.end())
117 
118  COW::Ptr new_cow = createCollisionObject(name, mask_id, shapes, shape_poses, enabled);
119  if (new_cow != nullptr)
120  {
121  auto margin = static_cast<btScalar>(contact_test_data_.collision_margin_data.getMaxCollisionMargin());
122  new_cow->setContactProcessingThreshold(margin);
123  addCollisionObject(new_cow);
124  return true;
125  }
126 
127  return false;
128 }
129 
131 {
132  auto cow = link2cow_.find(name);
133  return (link2cow_.find(name) != link2cow_.end()) ? cow->second->getCollisionGeometries() :
135 }
136 
139 {
140  auto cow = link2cow_.find(name);
141  return (link2cow_.find(name) != link2cow_.end()) ? cow->second->getCollisionGeometriesTransforms() :
143 }
144 
145 bool BulletDiscreteBVHManager::hasCollisionObject(const std::string& name) const
146 {
147  return (link2cow_.find(name) != link2cow_.end());
148 }
149 
151 {
152  auto it = link2cow_.find(name); // Levi TODO: Should these check be removed?
153  if (it != link2cow_.end())
154  {
155  collision_objects_.erase(std::find(collision_objects_.begin(), collision_objects_.end(), name));
157  link2cow_.erase(name);
158  return true;
159  }
160 
161  return false;
162 }
163 
165 {
166  auto it = link2cow_.find(name); // Levi TODO: Should these check be removed?
167  if (it != link2cow_.end())
168  {
169  it->second->m_enabled = true;
170 
171  // Need to clean the proxy from broadphase cache so BroadPhaseFilter gets called again.
172  // The BroadPhaseFilter only gets called once, so if you change when two objects can be in collision, like filters
173  // this must be called or contacts between shapes will be missed.
174  broadphase_->getOverlappingPairCache()->cleanProxyFromPairs(it->second->getBroadphaseHandle(), dispatcher_.get());
175  return true;
176  }
177  return false;
178 }
179 
181 {
182  auto it = link2cow_.find(name); // Levi TODO: Should these check be removed?
183  if (it != link2cow_.end())
184  {
185  it->second->m_enabled = false;
186 
187  // Need to clean the proxy from broadphase cache so BroadPhaseFilter gets called again.
188  // The BroadPhaseFilter only gets called once, so if you change when two objects can be in collision, like filters
189  // this must be called or contacts between shapes will be missed.
190  broadphase_->getOverlappingPairCache()->cleanProxyFromPairs(it->second->getBroadphaseHandle(), dispatcher_.get());
191  return true;
192  }
193  return false;
194 }
195 
196 bool BulletDiscreteBVHManager::isCollisionObjectEnabled(const std::string& name) const
197 {
198  auto it = link2cow_.find(name);
199  if (it != link2cow_.end())
200  return it->second->m_enabled;
201 
202  return false;
203 }
204 
205 void BulletDiscreteBVHManager::setCollisionObjectsTransform(const std::string& name, const Eigen::Isometry3d& pose)
206 {
207  // TODO: Find a way to remove this check. Need to store information in Tesseract EnvState indicating transforms with
208  // geometry
209  auto it = link2cow_.find(name);
210  if (it != link2cow_.end())
211  {
212  COW::Ptr& cow = it->second;
213  cow->setWorldTransform(convertEigenToBt(pose));
214 
215  // Update Collision Object Broadphase AABB
217  }
218 }
219 
220 void BulletDiscreteBVHManager::setCollisionObjectsTransform(const std::vector<std::string>& names,
222 {
223  assert(names.size() == poses.size());
224  for (auto i = 0U; i < names.size(); ++i)
225  setCollisionObjectsTransform(names[i], poses[i]);
226 }
227 
229 {
230  for (const auto& transform : transforms)
232 }
233 
234 const std::vector<std::string>& BulletDiscreteBVHManager::getCollisionObjects() const { return collision_objects_; }
235 
236 void BulletDiscreteBVHManager::setActiveCollisionObjects(const std::vector<std::string>& names)
237 {
238  active_ = names;
240 
241  // Now need to update the broadphase with correct aabb
242  for (auto& co : link2cow_)
243  {
244  COW::Ptr& cow = co.second;
247  }
248 }
249 
250 const std::vector<std::string>& BulletDiscreteBVHManager::getActiveCollisionObjects() const { return active_; }
251 
253 {
254  contact_test_data_.collision_margin_data = std::move(collision_margin_data);
256 }
257 
259 {
261 }
262 
264  CollisionMarginPairOverrideType override_type)
265 {
266  contact_test_data_.collision_margin_data.apply(pair_margin_data, override_type);
268 }
269 
270 void BulletDiscreteBVHManager::setDefaultCollisionMargin(double default_collision_margin)
271 {
274 }
275 
277  const std::string& name2,
278  double collision_margin)
279 {
280  contact_test_data_.collision_margin_data.setCollisionMargin(name1, name2, collision_margin);
282 }
283 
285 {
288 }
289 
291  std::shared_ptr<const tesseract_common::ContactAllowedValidator> validator)
292 {
293  contact_test_data_.validator = std::move(validator);
294 }
295 std::shared_ptr<const tesseract_common::ContactAllowedValidator>
297 {
299 }
301 {
302  contact_test_data_.res = &collisions;
303  contact_test_data_.req = request;
304  contact_test_data_.done = false;
305 
306  btOverlappingPairCache* pairCache = broadphase_->getOverlappingPairCache();
307 
308  broadphase_->calculateOverlappingPairs(dispatcher_.get());
309 
312 
314 
315  pairCache->processAllOverlappingPairs(&collisionCallback, dispatcher_.get());
316 }
317 
319 {
320  cow->setUserPointer(&contact_test_data_);
321  link2cow_[cow->getName()] = cow;
322  collision_objects_.push_back(cow->getName());
323 
324  // Add collision object to broadphase
326 }
327 
329 {
330  auto margin = static_cast<btScalar>(contact_test_data_.collision_margin_data.getMaxCollisionMargin());
331  for (auto& co : link2cow_)
332  {
333  COW::Ptr& cow = co.second;
334  cow->setContactProcessingThreshold(margin);
335  assert(cow->getBroadphaseHandle() != nullptr);
337  }
338 }
339 } // namespace tesseract_collision::tesseract_collision_bullet
tesseract_common::VectorIsometry3d
AlignedVector< Eigen::Isometry3d > VectorIsometry3d
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::dispatcher_
std::unique_ptr< btCollisionDispatcher > dispatcher_
The bullet collision dispatcher used for getting object to object collison algorithm.
Definition: bullet_discrete_bvh_manager.h:141
tesseract_common::CollisionMarginData::setCollisionMargin
void setCollisionMargin(const std::string &obj1, const std::string &obj2, double collision_margin)
tesseract_collision::tesseract_collision_bullet::EMPTY_COLLISION_SHAPES_TRANSFORMS
static const tesseract_common::VectorIsometry3d EMPTY_COLLISION_SHAPES_TRANSFORMS
Definition: bullet_cast_bvh_manager.cpp:50
tesseract_common::CollisionMarginData::getMaxCollisionMargin
double getMaxCollisionMargin() const
tesseract_collision::tesseract_collision_bullet
Definition: bullet_cast_bvh_manager.h:48
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo
Definition: tesseract_collision_configuration.h:52
contact_allowed_validator.h
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getCollisionObjectGeometriesTransforms
const tesseract_common::VectorIsometry3d & getCollisionObjectGeometriesTransforms(const std::string &name) const override final
Get a collision objects collision geometries transforms.
Definition: bullet_discrete_bvh_manager.cpp:138
tesseract_collision::ContactTestData::done
bool done
Indicate if search is finished.
Definition: types.h:355
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getName
std::string getName() const override final
Get the name of the contact manager.
Definition: bullet_discrete_bvh_manager.cpp:81
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::isCollisionObjectEnabled
bool isCollisionObjectEnabled(const std::string &name) const override final
Check if collision object is enabled.
Definition: bullet_discrete_bvh_manager.cpp:196
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setCollisionMarginPairData
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.
Definition: bullet_discrete_bvh_manager.cpp:263
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::contact_test_data_
ContactTestData contact_test_data_
This is used when contactTest is called. It is also added as a user point to the collsion objects so ...
Definition: bullet_discrete_bvh_manager.h:157
tesseract_common::TransformMap
AlignedMap< std::string, Eigen::Isometry3d > TransformMap
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::addCollisionObject
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.
Definition: bullet_discrete_bvh_manager.cpp:109
tesseract_collision::tesseract_collision_bullet::updateBroadphaseAABB
void updateBroadphaseAABB(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Update the Broadphase AABB for the input collision object.
Definition: bullet_utils.cpp:1355
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::clone
TesseractCollisionConfigurationInfo clone() const
Clone the collision configuration information.
Definition: tesseract_collision_configuration.cpp:63
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::clone
DiscreteContactManager::UPtr clone() const override final
Clone the manager.
Definition: bullet_discrete_bvh_manager.cpp:83
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::coll_config_
TesseractCollisionConfiguration coll_config_
The bullet collision configuration.
Definition: bullet_discrete_bvh_manager.h:147
tesseract_collision::ContactTestData::active
const std::vector< std::string > * active
A vector of active links.
Definition: types.h:340
tesseract_collision::tesseract_collision_bullet::EMPTY_COLLISION_SHAPES_CONST
static const CollisionShapesConst EMPTY_COLLISION_SHAPES_CONST
Definition: bullet_cast_bvh_manager.cpp:49
tesseract_collision::ContactTestData::validator
std::shared_ptr< const tesseract_common::ContactAllowedValidator > validator
The allowed collision function used to check if two links should be excluded from collision checking.
Definition: types.h:346
tesseract_collision::tesseract_collision_bullet::createCollisionObject
COW::Ptr createCollisionObject(const std::string &name, const int &type_id, const CollisionShapesConst &shapes, const tesseract_common::VectorIsometry3d &shape_poses, bool enabled=true)
Definition: bullet_utils.cpp:1161
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::dispatch_info_
btDispatcherInfo dispatch_info_
The bullet collision dispatcher configuration information.
Definition: bullet_discrete_bvh_manager.h:143
transform
template Halfspace< double > transform(const Halfspace< double > &a, const Transform3< double > &tf)
tesseract_collision::tesseract_collision_fcl::collisionCallback
bool collisionCallback(fcl::CollisionObjectd *o1, fcl::CollisionObjectd *o2, void *data)
Definition: fcl_utils.cpp:219
tesseract_common::CollisionMarginData
tesseract_collision::ContactTestData::collision_margin_data
CollisionMarginData collision_margin_data
The current contact_distance threshold.
Definition: types.h:343
tesseract_collision::tesseract_collision_bullet::addCollisionObjectToBroadphase
void addCollisionObjectToBroadphase(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Add the collision object to broadphase.
Definition: bullet_utils.cpp:1382
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::hasCollisionObject
bool hasCollisionObject(const std::string &name) const override final
Find if a collision object already exists.
Definition: bullet_discrete_bvh_manager.cpp:145
tesseract_collision::tesseract_collision_bullet::TesseractCollisionPairCallback
A callback function that is called as part of the broadphase collision checking.
Definition: bullet_utils.h:332
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::disableCollisionObject
bool disableCollisionObject(const std::string &name) override final
Disable an object.
Definition: bullet_discrete_bvh_manager.cpp:180
tesseract_collision::tesseract_collision_bullet::removeCollisionObjectFromBroadphase
void removeCollisionObjectFromBroadphase(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Remove the collision object from broadphase.
Definition: bullet_utils.cpp:1368
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setDefaultCollisionMargin
void setDefaultCollisionMargin(double default_collision_margin) override final
Set the default collision margin.
Definition: bullet_discrete_bvh_manager.cpp:270
name
std::string name
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::config_info_
TesseractCollisionConfigurationInfo config_info_
The bullet collision configuration information.
Definition: bullet_discrete_bvh_manager.h:145
tesseract_collision::ContactResultMap
This structure hold contact results for link pairs.
Definition: types.h:155
tesseract_common::CollisionMarginPairOverrideType
CollisionMarginPairOverrideType
tesseract_collision::tesseract_collision_bullet::CollisionObjectWrapper::Ptr
std::shared_ptr< CollisionObjectWrapper > Ptr
Definition: bullet_utils.h:96
tesseract_collision::tesseract_collision_bullet::DiscreteBroadphaseContactResultCallback
Definition: bullet_utils.h:289
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::removeCollisionObject
bool removeCollisionObject(const std::string &name) override final
Remove an object from the checker.
Definition: bullet_discrete_bvh_manager.cpp:150
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::contactTest
void contactTest(ContactResultMap &collisions, const ContactRequest &request) override final
Perform a contact test for all objects based.
Definition: bullet_discrete_bvh_manager.cpp:300
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::link2cow_
Link2Cow link2cow_
A map of all (static and active) collision objects being managed.
Definition: bullet_discrete_bvh_manager.h:151
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setCollisionObjectsTransform
void setCollisionObjectsTransform(const std::string &name, const Eigen::Isometry3d &pose) override final
Set a single collision object's transforms.
Definition: bullet_discrete_bvh_manager.cpp:205
tesseract_collision::tesseract_collision_bullet::refreshBroadphaseProxy
void refreshBroadphaseProxy(const COW::Ptr &cow, const std::unique_ptr< btBroadphaseInterface > &broadphase, const std::unique_ptr< btCollisionDispatcher > &dispatcher)
Refresh the broadphase data structure.
Definition: bullet_utils.cpp:1408
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::enableCollisionObject
bool enableCollisionObject(const std::string &name) override final
Enable an object.
Definition: bullet_discrete_bvh_manager.cpp:164
tesseract_collision::CollisionShapesConst
std::vector< CollisionShapeConstPtr > CollisionShapesConst
Definition: types.h:51
bullet_discrete_bvh_manager.h
Tesseract ROS Bullet discrete BVH collision manager.
tesseract_common::CollisionMarginData::apply
void apply(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type)
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::collision_objects_
std::vector< std::string > collision_objects_
A list of the collision objects.
Definition: bullet_discrete_bvh_manager.h:139
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getContactAllowedValidator
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.
Definition: bullet_discrete_bvh_manager.cpp:296
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::broadphase_overlap_cb_
TesseractOverlapFilterCallback broadphase_overlap_cb_
Filter collision objects before broadphase check.
Definition: bullet_discrete_bvh_manager.h:160
tesseract_collision::ContactTestData::res
ContactResultMap * res
Distance query results information.
Definition: types.h:352
tesseract_common::CollisionMarginData::incrementMargins
void incrementMargins(double increment)
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getCollisionMarginData
const CollisionMarginData & getCollisionMarginData() const override final
Get the contact distance threshold.
Definition: bullet_discrete_bvh_manager.cpp:258
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::active_
std::vector< std::string > active_
A list of the active collision objects.
Definition: bullet_discrete_bvh_manager.h:137
tesseract_common::CollisionMarginPairData
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getCollisionObjectGeometries
const CollisionShapesConst & getCollisionObjectGeometries(const std::string &name) const override final
Get a collision objects collision geometries.
Definition: bullet_discrete_bvh_manager.cpp:130
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::~BulletDiscreteBVHManager
~BulletDiscreteBVHManager() override
Definition: bullet_discrete_bvh_manager.cpp:74
tesseract_collision::ContactTestData::req
ContactRequest req
The type of contact request data.
Definition: types.h:349
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getActiveCollisionObjects
const std::vector< std::string > & getActiveCollisionObjects() const override final
Get which collision objects can move.
Definition: bullet_discrete_bvh_manager.cpp:250
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::broadphase_
std::unique_ptr< btBroadphaseInterface > broadphase_
The bullet broadphase interface.
Definition: bullet_discrete_bvh_manager.h:149
tesseract_common::CollisionMarginData::setDefaultCollisionMargin
void setDefaultCollisionMargin(double default_collision_margin)
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::BulletDiscreteBVHManager
BulletDiscreteBVHManager(std::string name="BulletDiscreteBVHManager", TesseractCollisionConfigurationInfo config_info=TesseractCollisionConfigurationInfo())
Definition: bullet_discrete_bvh_manager.cpp:52
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::name_
std::string name_
Definition: bullet_discrete_bvh_manager.h:135
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::onCollisionMarginDataChanged
void onCollisionMarginDataChanged()
This function will update internal data when margin data has changed.
Definition: bullet_discrete_bvh_manager.cpp:328
tesseract_collision::DiscreteContactManager::UPtr
std::unique_ptr< DiscreteContactManager > UPtr
Definition: discrete_contact_manager.h:50
tesseract_collision::tesseract_collision_bullet::convertEigenToBt
btVector3 convertEigenToBt(const Eigen::Vector3d &v)
Definition: bullet_utils.cpp:62
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::incrementCollisionMargin
void incrementCollisionMargin(double increment) override final
Increment the collision margin data by some value.
Definition: bullet_discrete_bvh_manager.cpp:284
tesseract_collision::tesseract_collision_bullet::updateCollisionObjectFilters
void updateCollisionObjectFilters(const std::vector< std::string > &active, const COW::Ptr &cow)
Update a collision objects filters.
Definition: bullet_utils.cpp:442
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setContactAllowedValidator
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.
Definition: bullet_discrete_bvh_manager.cpp:290
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setCollisionMarginPair
void setCollisionMarginPair(const std::string &name1, const std::string &name2, double collision_margin) override final
Set the margin for a given contact pair.
Definition: bullet_discrete_bvh_manager.cpp:276
tesseract_collision::ContactRequest
The ContactRequest struct.
Definition: types.h:300
tesseract_collision::CollisionMarginData
tesseract_common::CollisionMarginData CollisionMarginData
Definition: types.h:52
gDbvtMargin
btScalar gDbvtMargin
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setActiveCollisionObjects
void setActiveCollisionObjects(const std::vector< std::string > &names) override final
Set which collision objects can move.
Definition: bullet_discrete_bvh_manager.cpp:236
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::getCollisionObjects
const std::vector< std::string > & getCollisionObjects() const override final
Get all collision objects.
Definition: bullet_discrete_bvh_manager.cpp:234
tesseract_collision::tesseract_collision_bullet::BulletDiscreteBVHManager::setCollisionMarginData
void setCollisionMarginData(CollisionMarginData collision_margin_data) override final
Set the contact distance threshold.
Definition: bullet_discrete_bvh_manager.cpp:252


tesseract_collision
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:01:52