bullet_cast_simple_manager.cpp
Go to the documentation of this file.
1 
44 
46 {
49 
51  : name_(std::move(name)), config_info_(std::move(config_info)), coll_config_(config_info_)
52 {
53  dispatcher_ = std::make_unique<btCollisionDispatcher>(&coll_config_);
54 
55  dispatcher_->registerCollisionCreateFunc(
56  BOX_SHAPE_PROXYTYPE,
57  BOX_SHAPE_PROXYTYPE,
58  coll_config_.getCollisionAlgorithmCreateFunc(CONVEX_SHAPE_PROXYTYPE, CONVEX_SHAPE_PROXYTYPE));
59 
60  dispatcher_->setDispatcherFlags(dispatcher_->getDispatcherFlags() &
61  ~btCollisionDispatcher::CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD);
63 }
64 
65 std::string BulletCastSimpleManager::getName() const { return name_; }
66 
68 {
69  auto manager = std::make_unique<BulletCastSimpleManager>(name_, config_info_.clone());
70 
71  auto margin = static_cast<btScalar>(contact_test_data_.collision_margin_data.getMaxCollisionMargin());
72 
73  for (const auto& cow : link2cow_)
74  {
75  COW::Ptr new_cow = cow.second->clone();
76 
77  assert(new_cow->getCollisionShape());
78  assert(new_cow->getCollisionShape()->getShapeType() != CUSTOM_CONVEX_SHAPE_TYPE);
79 
80  new_cow->setWorldTransform(cow.second->getWorldTransform());
81  new_cow->setContactProcessingThreshold(margin);
82 
83  manager->addCollisionObject(new_cow);
84  }
85 
86  manager->setActiveCollisionObjects(active_);
87  manager->setCollisionMarginData(contact_test_data_.collision_margin_data);
88  manager->setContactAllowedValidator(contact_test_data_.validator);
89 
90  return manager;
91 }
92 
93 bool BulletCastSimpleManager::addCollisionObject(const std::string& name,
94  const int& mask_id,
95  const CollisionShapesConst& shapes,
96  const tesseract_common::VectorIsometry3d& shape_poses,
97  bool enabled)
98 {
99  if (link2cow_.find(name) != link2cow_.end())
101 
102  COW::Ptr new_cow = createCollisionObject(name, mask_id, shapes, shape_poses, enabled);
103  if (new_cow != nullptr)
104  {
105  auto margin = static_cast<btScalar>(contact_test_data_.collision_margin_data.getMaxCollisionMargin());
106  new_cow->setContactProcessingThreshold(margin);
107  addCollisionObject(new_cow);
108  return true;
109  }
110 
111  return false;
112 }
113 
115 {
116  auto cow = link2cow_.find(name);
117  return (link2cow_.find(name) != link2cow_.end()) ? cow->second->getCollisionGeometries() :
119 }
120 
123 {
124  auto cow = link2cow_.find(name);
125  return (link2cow_.find(name) != link2cow_.end()) ? cow->second->getCollisionGeometriesTransforms() :
127 }
128 
129 bool BulletCastSimpleManager::hasCollisionObject(const std::string& name) const
130 {
131  return (link2cow_.find(name) != link2cow_.end());
132 }
133 
135 {
136  auto it = link2cow_.find(name);
137  if (it != link2cow_.end())
138  {
139  cows_.erase(std::find_if(cows_.begin(), cows_.end(), [&name](const auto& p) { return p->getName() == name; }));
140  collision_objects_.erase(std::find(collision_objects_.begin(), collision_objects_.end(), name));
141  link2cow_.erase(name);
142  link2castcow_.erase(name);
143  return true;
144  }
145 
146  return false;
147 }
148 
150 {
151  auto it = link2cow_.find(name);
152  if (it != link2cow_.end())
153  {
154  it->second->m_enabled = true;
155  link2castcow_[name]->m_enabled = true;
156  return true;
157  }
158 
159  return false;
160 }
161 
163 {
164  auto it = link2cow_.find(name);
165  if (it != link2cow_.end())
166  {
167  it->second->m_enabled = false;
168  link2castcow_[name]->m_enabled = false;
169  return true;
170  }
171 
172  return false;
173 }
174 
175 bool BulletCastSimpleManager::isCollisionObjectEnabled(const std::string& name) const
176 {
177  auto it = link2cow_.find(name);
178  if (it != link2cow_.end())
179  return it->second->m_enabled;
180 
181  return false;
182 }
183 
184 void BulletCastSimpleManager::setCollisionObjectsTransform(const std::string& name, const Eigen::Isometry3d& pose)
185 {
186  // TODO: Find a way to remove this check. Need to store information in Tesseract EnvState indicating transforms with
187  // geometry
188  auto it = link2cow_.find(name);
189  if (it != link2cow_.end())
190  {
191  btTransform tf = convertEigenToBt(pose);
192  it->second->setWorldTransform(tf);
193  link2castcow_[name]->setWorldTransform(tf);
194  }
195 }
196 
197 void BulletCastSimpleManager::setCollisionObjectsTransform(const std::vector<std::string>& names,
199 {
200  assert(names.size() == poses.size());
201  for (auto i = 0U; i < names.size(); ++i)
202  setCollisionObjectsTransform(names[i], poses[i]);
203 }
204 
206 {
207  for (const auto& transform : transforms)
209 }
210 
212  const Eigen::Isometry3d& pose1,
213  const Eigen::Isometry3d& pose2)
214 {
215  // TODO: Find a way to remove this check. Need to store information in Tesseract EnvState indicating transforms with
216  // geometry
217  auto it = link2castcow_.find(name);
218  if (it != link2castcow_.end())
219  {
220  COW::Ptr& cow = it->second;
221  assert(cow->m_collisionFilterGroup == btBroadphaseProxy::KinematicFilter);
222 
223  btTransform tf1 = convertEigenToBt(pose1);
224  btTransform tf2 = convertEigenToBt(pose2);
225 
226  cow->setWorldTransform(tf1);
227  link2cow_[name]->setWorldTransform(tf1);
228 
229  // If collision object is disabled dont proceed
230  if (cow->m_enabled)
231  {
232  if (btBroadphaseProxy::isConvex(cow->getCollisionShape()->getShapeType()))
233  {
234  assert(dynamic_cast<CastHullShape*>(cow->getCollisionShape()) != nullptr);
235  static_cast<CastHullShape*>(cow->getCollisionShape())->updateCastTransform(tf1.inverseTimes(tf2));
236  }
237  else if (btBroadphaseProxy::isCompound(cow->getCollisionShape()->getShapeType()))
238  {
239  assert(dynamic_cast<btCompoundShape*>(cow->getCollisionShape()) != nullptr);
240  auto* compound = static_cast<btCompoundShape*>(cow->getCollisionShape());
241  for (int i = 0; i < compound->getNumChildShapes(); ++i)
242  {
243  if (btBroadphaseProxy::isConvex(compound->getChildShape(i)->getShapeType()))
244  {
245  assert(dynamic_cast<CastHullShape*>(compound->getChildShape(i)) != nullptr);
246  const btTransform& local_tf = compound->getChildTransform(i);
247 
248  btTransform delta_tf = (tf1 * local_tf).inverseTimes(tf2 * local_tf);
249  static_cast<CastHullShape*>(compound->getChildShape(i))->updateCastTransform(delta_tf);
250  compound->updateChildTransform(i, local_tf, false); // This is required to update the BVH tree
251  }
252  else if (btBroadphaseProxy::isCompound(compound->getChildShape(i)->getShapeType()))
253  {
254  assert(dynamic_cast<btCompoundShape*>(compound->getChildShape(i)) != nullptr);
255  auto* second_compound = static_cast<btCompoundShape*>(compound->getChildShape(i));
256 
257  for (int j = 0; j < second_compound->getNumChildShapes(); ++j)
258  {
259  assert(!btBroadphaseProxy::isCompound(second_compound->getChildShape(j)->getShapeType()));
260  assert(dynamic_cast<CastHullShape*>(second_compound->getChildShape(j)) != nullptr);
261  const btTransform& local_tf = second_compound->getChildTransform(j);
262 
263  btTransform delta_tf = (tf1 * local_tf).inverseTimes(tf2 * local_tf);
264  static_cast<CastHullShape*>(second_compound->getChildShape(j))->updateCastTransform(delta_tf);
265  second_compound->updateChildTransform(j, local_tf, false); // This is required to update the BVH tree
266  }
267  second_compound->recalculateLocalAabb();
268  }
269  }
270  compound->recalculateLocalAabb();
271  }
272  else
273  {
274  throw std::runtime_error("I can only collision check convex shapes and compound shapes made of convex shapes");
275  }
276  }
277  }
278 }
279 
280 void BulletCastSimpleManager::setCollisionObjectsTransform(const std::vector<std::string>& names,
283 {
284  assert(names.size() == pose1.size());
285  assert(names.size() == pose2.size());
286  for (auto i = 0U; i < names.size(); ++i)
287  setCollisionObjectsTransform(names[i], pose1[i], pose2[i]);
288 }
289 
291  const tesseract_common::TransformMap& pose2)
292 {
293  assert(pose1.size() == pose2.size());
294  auto it1 = pose1.begin();
295  auto it2 = pose2.begin();
296  while (it1 != pose1.end())
297  {
298  assert(pose1.find(it1->first) != pose2.end());
299  setCollisionObjectsTransform(it1->first, it1->second, it2->second);
300  std::advance(it1, 1);
301  std::advance(it2, 1);
302  }
303 }
304 
305 const std::vector<std::string>& BulletCastSimpleManager::getCollisionObjects() const { return collision_objects_; }
306 
307 void BulletCastSimpleManager::setActiveCollisionObjects(const std::vector<std::string>& names)
308 {
309  active_ = names;
311 
312  cows_.clear();
313  cows_.reserve(link2cow_.size());
314 
315  // Now need to update the broadphase with correct aabb
316  for (auto& co : link2cow_)
317  {
318  COW::Ptr& cow = co.second;
319 
320  // Update with request
322 
323  // Get the cast collision object
324  COW::Ptr cast_cow = link2castcow_[cow->getName()];
325 
326  // Update with request
328 
329  // Add to collision object vector
330  if (cow->m_collisionFilterGroup == btBroadphaseProxy::KinematicFilter)
331  {
332  cows_.insert(cows_.begin(), cast_cow);
333  }
334  else
335  {
336  cows_.push_back(cow);
337  }
338  }
339 }
340 
341 const std::vector<std::string>& BulletCastSimpleManager::getActiveCollisionObjects() const { return active_; }
342 
344 {
345  contact_test_data_.collision_margin_data = std::move(collision_margin_data);
347 }
348 
350 {
352 }
353 
355  CollisionMarginPairOverrideType override_type)
356 {
357  contact_test_data_.collision_margin_data.apply(pair_margin_data, override_type);
359 }
360 
361 void BulletCastSimpleManager::setDefaultCollisionMargin(double default_collision_margin)
362 {
365 }
366 
368  const std::string& name2,
369  double collision_margin)
370 {
371  contact_test_data_.collision_margin_data.setCollisionMargin(name1, name2, collision_margin);
373 }
374 
376 {
379 }
380 
382  std::shared_ptr<const tesseract_common::ContactAllowedValidator> validator)
383 {
384  contact_test_data_.validator = std::move(validator);
385 }
386 std::shared_ptr<const tesseract_common::ContactAllowedValidator>
388 {
390 }
392 {
393  contact_test_data_.res = &collisions;
394  contact_test_data_.req = request;
395  contact_test_data_.done = false;
396 
397  for (auto cow1_iter = cows_.begin(); cow1_iter != (cows_.end() - 1); cow1_iter++)
398  {
399  const COW::Ptr& cow1 = *cow1_iter;
400 
401  if (cow1->m_collisionFilterGroup != btBroadphaseProxy::KinematicFilter)
402  break;
403 
404  if (!cow1->m_enabled)
405  continue;
406 
407  btVector3 min_aabb[2], max_aabb[2]; // NOLINT
408  cow1->getAABB(min_aabb[0], max_aabb[0]);
409 
410  btCollisionObjectWrapper obA(nullptr, cow1->getCollisionShape(), cow1.get(), cow1->getWorldTransform(), -1, -1);
411 
412  CastCollisionCollector cc(contact_test_data_, cow1, static_cast<double>(cow1->getContactProcessingThreshold()));
413  for (auto cow2_iter = cow1_iter + 1; cow2_iter != cows_.end(); cow2_iter++)
414  {
415  assert(!contact_test_data_.done);
416 
417  const COW::Ptr& cow2 = *cow2_iter;
418  cow2->getAABB(min_aabb[1], max_aabb[1]);
419 
420  bool aabb_check = (min_aabb[0][0] <= max_aabb[1][0] && max_aabb[0][0] >= min_aabb[1][0]) &&
421  (min_aabb[0][1] <= max_aabb[1][1] && max_aabb[0][1] >= min_aabb[1][1]) &&
422  (min_aabb[0][2] <= max_aabb[1][2] && max_aabb[0][2] >= min_aabb[1][2]);
423 
424  if (aabb_check)
425  {
426  bool needs_collision = needsCollisionCheck(*cow1, *cow2, contact_test_data_.validator, false);
427 
428  if (needs_collision)
429  {
430  btCollisionObjectWrapper obB(
431  nullptr, cow2->getCollisionShape(), cow2.get(), cow2->getWorldTransform(), -1, -1);
432 
433  btCollisionAlgorithm* algorithm =
434  dispatcher_->findAlgorithm(&obA, &obB, nullptr, BT_CLOSEST_POINT_ALGORITHMS);
435  assert(algorithm != nullptr);
436  if (algorithm != nullptr)
437  {
438  TesseractBridgedManifoldResult contactPointResult(&obA, &obB, cc);
439  contactPointResult.m_closestPointDistanceThreshold = cc.m_closestDistanceThreshold;
440 
441  // discrete collision detection query
442  algorithm->processCollision(&obA, &obB, dispatch_info_, &contactPointResult);
443 
444  algorithm->~btCollisionAlgorithm();
445  dispatcher_->freeCollisionAlgorithm(algorithm);
446  }
447  }
448  }
449 
451  break;
452  }
453 
455  break;
456  }
457 }
458 
460 {
461  cow->setUserPointer(&contact_test_data_);
462  link2cow_[cow->getName()] = cow;
463  collision_objects_.push_back(cow->getName());
464 
465  // Create cast collision object
466  COW::Ptr cast_cow = makeCastCollisionObject(cow);
467  cast_cow->setUserPointer(&contact_test_data_);
468 
469  // Add it to the cast map
470  link2castcow_[cast_cow->getName()] = cast_cow;
471 
472  if (cow->m_collisionFilterGroup == btBroadphaseProxy::KinematicFilter)
473  cows_.insert(cows_.begin(), cast_cow);
474  else
475  cows_.push_back(cow);
476 }
477 
479 {
480  auto margin = static_cast<btScalar>(contact_test_data_.collision_margin_data.getMaxCollisionMargin());
481  for (auto& co : link2cow_)
482  co.second->setContactProcessingThreshold(margin);
483 
484  for (auto& co : link2castcow_)
485  co.second->setContactProcessingThreshold(margin);
486 }
487 
488 } // namespace tesseract_collision::tesseract_collision_bullet
tesseract_common::VectorIsometry3d
AlignedVector< Eigen::Isometry3d > VectorIsometry3d
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::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_cast_simple_manager.cpp:367
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::dispatch_info_
btDispatcherInfo dispatch_info_
The bullet collision dispatcher configuration information.
Definition: bullet_cast_simple_manager.h:154
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
bullet_cast_simple_manager.h
Tesseract ROS Bullet cast(continuous) simple collision manager.
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::setActiveCollisionObjects
void setActiveCollisionObjects(const std::vector< std::string > &names) override final
Set which collision objects can move.
Definition: bullet_cast_simple_manager.cpp:307
tesseract_common::CollisionMarginData::getMaxCollisionMargin
double getMaxCollisionMargin() const
tesseract_collision::tesseract_collision_bullet
Definition: bullet_cast_bvh_manager.h:48
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::setCollisionMarginPairData
void setCollisionMarginPairData(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type=CollisionMarginPairOverrideType::REPLACE) override final
Set the pair contact distance thresholds for which collision should be considered on a per pair basis...
Definition: bullet_cast_simple_manager.cpp:354
tesseract_collision::ContinuousContactManager::UPtr
std::unique_ptr< ContinuousContactManager > UPtr
Definition: continuous_contact_manager.h:48
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo
Definition: tesseract_collision_configuration.h:52
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::cows_
std::vector< COW::Ptr > cows_
A vector of collision objects (active followed by static)
Definition: bullet_cast_simple_manager.h:162
contact_allowed_validator.h
tesseract_collision::ContactTestData::done
bool done
Indicate if search is finished.
Definition: types.h:355
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::clone
ContinuousContactManager::UPtr clone() const override final
Clone the manager.
Definition: bullet_cast_simple_manager.cpp:67
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::getCollisionObjects
const std::vector< std::string > & getCollisionObjects() const override final
Get all collision objects.
Definition: bullet_cast_simple_manager.cpp:305
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::coll_config_
TesseractCollisionConfiguration coll_config_
The bullet collision configuration.
Definition: bullet_cast_simple_manager.h:158
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::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_cast_simple_manager.h:170
tesseract_collision::tesseract_collision_bullet::CastHullShape
This is a casted collision shape used for checking if an object is collision free between two transfo...
Definition: bullet_utils.h:155
tesseract_collision::tesseract_collision_bullet::CastCollisionCollector
Definition: bullet_utils.h:407
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::onCollisionMarginDataChanged
void onCollisionMarginDataChanged()
This function will update internal data when margin data has changed.
Definition: bullet_cast_simple_manager.cpp:478
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::incrementCollisionMargin
void incrementCollisionMargin(double increment) override final
Increment the collision margin data by some value.
Definition: bullet_cast_simple_manager.cpp:375
tesseract_common::TransformMap
AlignedMap< std::string, Eigen::Isometry3d > TransformMap
tesseract_collision::tesseract_collision_bullet::TesseractCollisionConfigurationInfo::clone
TesseractCollisionConfigurationInfo clone() const
Clone the collision configuration information.
Definition: tesseract_collision_configuration.cpp:63
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::BulletCastSimpleManager::link2castcow_
Link2Cow link2castcow_
A map of cast collision objects being managed.
Definition: bullet_cast_simple_manager.h:164
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
transform
template Halfspace< double > transform(const Halfspace< double > &a, const Transform3< double > &tf)
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::config_info_
TesseractCollisionConfigurationInfo config_info_
The bullet collision configuration information.
Definition: bullet_cast_simple_manager.h:156
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::BulletCastSimpleManager::active_
std::vector< std::string > active_
A list of the active collision objects.
Definition: bullet_cast_simple_manager.h:148
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::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 collision object to the checker.
Definition: bullet_cast_simple_manager.cpp:93
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::link2cow_
Link2Cow link2cow_
A map of collision objects being managed.
Definition: bullet_cast_simple_manager.h:160
tesseract_collision::tesseract_collision_bullet::makeCastCollisionObject
COW::Ptr makeCastCollisionObject(const COW::Ptr &cow)
Definition: bullet_utils.cpp:1249
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::getCollisionMarginData
const CollisionMarginData & getCollisionMarginData() const override final
Get the contact distance threshold.
Definition: bullet_cast_simple_manager.cpp:349
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::getName
std::string getName() const override final
Get the name of the contact manager.
Definition: bullet_cast_simple_manager.cpp:65
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::hasCollisionObject
bool hasCollisionObject(const std::string &name) const override final
Find if a collision object already exists.
Definition: bullet_cast_simple_manager.cpp:129
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::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_cast_simple_manager.cpp:387
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::disableCollisionObject
bool disableCollisionObject(const std::string &name) override final
Disable an object.
Definition: bullet_cast_simple_manager.cpp:162
tesseract_collision::tesseract_collision_bullet::needsCollisionCheck
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.
Definition: bullet_utils.cpp:700
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::getActiveCollisionObjects
const std::vector< std::string > & getActiveCollisionObjects() const override final
Get which collision objects can move.
Definition: bullet_cast_simple_manager.cpp:341
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::getCollisionObjectGeometriesTransforms
const tesseract_common::VectorIsometry3d & getCollisionObjectGeometriesTransforms(const std::string &name) const override final
Get a collision objects collision geometries transforms.
Definition: bullet_cast_simple_manager.cpp:122
name
std::string name
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_fcl::KinematicFilter
@ KinematicFilter
Definition: fcl_utils.h:69
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::setCollisionMarginData
void setCollisionMarginData(CollisionMarginData collision_margin_data) override final
Set the contact distance threshold.
Definition: bullet_cast_simple_manager.cpp:343
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::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_cast_simple_manager.cpp:381
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::setCollisionObjectsTransform
void setCollisionObjectsTransform(const std::string &name, const Eigen::Isometry3d &pose) override final
Set a single static collision object's tansforms.
Definition: bullet_cast_simple_manager.cpp:184
tesseract_collision::CollisionShapesConst
std::vector< CollisionShapeConstPtr > CollisionShapesConst
Definition: types.h:51
tesseract_common::CollisionMarginData::apply
void apply(const CollisionMarginPairData &pair_margin_data, CollisionMarginPairOverrideType override_type)
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::BulletCastSimpleManager
BulletCastSimpleManager(std::string name="BulletCastSimpleManager", TesseractCollisionConfigurationInfo config_info=TesseractCollisionConfigurationInfo())
Definition: bullet_cast_simple_manager.cpp:50
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::removeCollisionObject
bool removeCollisionObject(const std::string &name) override final
Remove an object from the checker.
Definition: bullet_cast_simple_manager.cpp:134
tesseract_collision::ContactTestData::res
ContactResultMap * res
Distance query results information.
Definition: types.h:352
tesseract_common::CollisionMarginData::incrementMargins
void incrementMargins(double increment)
tesseract_common::CollisionMarginPairData
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::enableCollisionObject
bool enableCollisionObject(const std::string &name) override final
Enable an object.
Definition: bullet_cast_simple_manager.cpp:149
tesseract_collision::tesseract_collision_bullet::TesseractBridgedManifoldResult
This is copied directly out of BulletWorld.
Definition: bullet_utils.h:251
tesseract_collision::ContactTestData::req
ContactRequest req
The type of contact request data.
Definition: types.h:349
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::setDefaultCollisionMargin
void setDefaultCollisionMargin(double default_collision_margin) override final
Set the default collision margin.
Definition: bullet_cast_simple_manager.cpp:361
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::dispatcher_
std::unique_ptr< btCollisionDispatcher > dispatcher_
The bullet collision dispatcher used for getting object to object collison algorithm.
Definition: bullet_cast_simple_manager.h:152
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::collision_objects_
std::vector< std::string > collision_objects_
A list of the collision objects.
Definition: bullet_cast_simple_manager.h:150
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::name_
std::string name_
Definition: bullet_cast_simple_manager.h:146
tesseract_common::CollisionMarginData::setDefaultCollisionMargin
void setDefaultCollisionMargin(double default_collision_margin)
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::isCollisionObjectEnabled
bool isCollisionObjectEnabled(const std::string &name) const override final
Check if collision object is enabled.
Definition: bullet_cast_simple_manager.cpp:175
tesseract_collision::tesseract_collision_bullet::convertEigenToBt
btVector3 convertEigenToBt(const Eigen::Vector3d &v)
Definition: bullet_utils.cpp:62
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::ContactRequest
The ContactRequest struct.
Definition: types.h:300
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::contactTest
void contactTest(ContactResultMap &collisions, const ContactRequest &request) override final
Perform a contact test for all objects based.
Definition: bullet_cast_simple_manager.cpp:391
tesseract_collision::CollisionMarginData
tesseract_common::CollisionMarginData CollisionMarginData
Definition: types.h:52
tesseract_collision::tesseract_collision_bullet::BulletCastSimpleManager::getCollisionObjectGeometries
const CollisionShapesConst & getCollisionObjectGeometries(const std::string &name) const override final
Get a collision objects collision geometries.
Definition: bullet_cast_simple_manager.cpp:114


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