Skip to content

Commit 1100140

Browse files
committed
Clean up utils
1 parent 0a2490c commit 1100140

1 file changed

Lines changed: 8 additions & 16 deletions

File tree

tesseract_collision/coal/src/coal_utils.cpp

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -315,17 +315,13 @@ bool CollisionCallback::collide(coal::CollisionObject* o1, coal::CollisionObject
315315
coal::CollisionResult col_result;
316316
coal::CollisionRequest col_request;
317317
col_request.num_max_contacts = num_contacts;
318-
col_request.enable_contact = cdata->req.calculate_penetration;
318+
col_request.enable_contact = (cdata->req.calculate_distance || cdata->req.calculate_penetration);
319319
col_request.gjk_variant = coal::GJKVariant::NesterovAcceleration;
320-
col_request.gjk_convergence_criterion = coal::GJKConvergenceCriterion::DualityGap;
321-
col_request.gjk_convergence_criterion_type = coal::GJKConvergenceCriterionType::Absolute;
322320
col_request.gjk_initial_guess = coal::BoundingVolumeGuess;
323-
// col_request.gjk_tolerance = 1e-5;
324-
// col_request.epa_tolerance = 1e-5;
325-
// col_request.break_distance // Leave at default?
326-
// col_request.collision_distance_threshold // Leave at default (close to 0)
327-
// col_request.distance_upper_bound = // Collision margin + buffer?
328321
col_request.security_margin = cdata->collision_margin_data.getCollisionMargin(cd1->getName(), cd2->getName());
322+
// Stop GJK if distance is larger than the security margin, i.e. no collision (plus a small margin for numerical
323+
// stability)
324+
col_request.distance_upper_bound = col_request.security_margin + 1e-6;
329325
coal::collide(o1, o2, col_request, col_result);
330326

331327
if (col_result.isCollision())
@@ -334,6 +330,8 @@ bool CollisionCallback::collide(coal::CollisionObject* o1, coal::CollisionObject
334330

335331
const Eigen::Isometry3d& tf1 = cd1->getCollisionObjectsTransform();
336332
const Eigen::Isometry3d& tf2 = cd2->getCollisionObjectsTransform();
333+
Eigen::Isometry3d tf1_inv = tf1.inverse();
334+
Eigen::Isometry3d tf2_inv = tf2.inverse();
337335

338336
for (size_t i = 0; i < col_result.numContacts(); ++i)
339337
{
@@ -347,8 +345,8 @@ bool CollisionCallback::collide(coal::CollisionObject* o1, coal::CollisionObject
347345
contact.subshape_id[1] = static_cast<int>(coal_contact.b2);
348346
contact.nearest_points[0] = coal_contact.nearest_points[0];
349347
contact.nearest_points[1] = coal_contact.nearest_points[1];
350-
contact.nearest_points_local[0] = tf1.inverse() * contact.nearest_points[0];
351-
contact.nearest_points_local[1] = tf2.inverse() * contact.nearest_points[1];
348+
contact.nearest_points_local[0] = tf1_inv * contact.nearest_points[0];
349+
contact.nearest_points_local[1] = tf2_inv * contact.nearest_points[1];
352350
contact.transform[0] = tf1;
353351
contact.transform[1] = tf2;
354352
contact.type_id[0] = cd1->getTypeID();
@@ -385,12 +383,7 @@ bool DistanceCallback::collide(coal::CollisionObject* o1, coal::CollisionObject*
385383
coal::DistanceRequest dist_request(true);
386384
dist_request.enable_signed_distance = cdata->req.calculate_penetration;
387385
dist_request.gjk_variant = coal::GJKVariant::NesterovAcceleration;
388-
dist_request.gjk_convergence_criterion = coal::GJKConvergenceCriterion::DualityGap;
389-
dist_request.gjk_convergence_criterion_type = coal::GJKConvergenceCriterionType::Absolute;
390386
dist_request.gjk_initial_guess = coal::BoundingVolumeGuess;
391-
// dist_request.gjk_tolerance = 1e-5;
392-
// dist_request.epa_tolerance = 1e-5;
393-
// dist_request.collision_distance_threshold // Leave at default (close to 0)
394387
const double d = coal::distance(o1, o2, dist_request, dist_result);
395388

396389
if (d < cdata->collision_margin_data.getMaxCollisionMargin())
@@ -415,7 +408,6 @@ bool DistanceCallback::collide(coal::CollisionObject* o1, coal::CollisionObject*
415408
contact.type_id[1] = cd2->getTypeID();
416409
contact.distance = dist_result.min_distance;
417410
contact.normal = (dist_result.min_distance * (contact.nearest_points[1] - contact.nearest_points[0])).normalized();
418-
// contact.normal = dist_result.normal;
419411

420412
TESSERACT_THREAD_LOCAL tesseract_common::LinkNamesPair link_pair;
421413
tesseract_common::makeOrderedLinkPair(link_pair, cd1->getName(), cd2->getName());

0 commit comments

Comments
 (0)