RobotLocomotion / drake

Model-based design and verification for robotics.
https://drake.mit.edu
Other
3.35k stars 1.27k forks source link

Document geometry query result precision #10907

Open SeanCurtis-TRI opened 5 years ago

SeanCurtis-TRI commented 5 years ago

In the current master (as of 3/13/2019), the quality of the answers in geometric queries is accurate to machine precision in some cases, and approximate to within some threshold in others. Even as we improve the code so that more and more answers will be precise to machine precision, we know we can't guarantee that universally.

So, the module documentation should discuss this and document the current state of affairs. Users should be able to pull up a set of tables (one per query type) that say:

For shape type A vs shape type B, this query will produce an answer that is within [tolerance] of the true answer.

For example:

Sphere Box Cylinder
Sphere ε ε ε
Box 10e-8 ε
Cylinder user tolerance¹

When we're done, every cell that can be populated with ε will be, all others will be configurable with user-defined tolerances. And, in the interim, it will reflect the current state of the code. (In some cases, the tolerance for the current state of the code may be "unknown".)


Update March 12, 2021

I have a PR train that will resolve this for the signed-distance-based queries, e.g., ComputePointPairPenetration, ComputeSignedDistancePairwiseClosestPoints, etc.

Still to be done/scheduled/planned

DamrongGuoy commented 4 years ago

I'm just curious. This documentation issue is for all of these queries, right?

SeanCurtis-TRI commented 4 years ago

That's my intent.

DamrongGuoy commented 4 years ago

This is the content from #12468 "Support shape permutations across scalar types in ComputeSignedDistancePairwiseClosestPoints", which will be resolved as part of this issue #10907.

Following up from #10153, there is still more work required for full proximity engine support. Currently only certain shape permutations are supported and only with certain scalars. Even for doubles, there are varying levels of precision when falling back to using FCL. In distance_to_shape_callback.h, the current supported configurations are:

Sphere Box Cylinder Halfspace Capsule Ellipsoid Convex Mesh
Sphere double
Autodiff
1e-14
double
Autodiff
1e-14
double
1e-14
double
Autodiff
1e-14
double
Autodiff
1e-14
double (FCL fallback) double (FCL fallback) :x:
Box double
1e-14
double (FCL fallback) double (FCL fallback) :x: double (FCL fallback) double (FCL fallback) double (FCL fallback) :x:
Cylinder double
1e-14
double (FCL fallback) double (FCL fallback) :x: double (FCL fallback) double (FCL fallback) double (FCL fallback) :x:
Halfspace double
1e-14
:x: :x: :x: :x: :x: :x: :x:
Capsule double
Autodiff
1e-14
double (FCL fallback) double (FCL fallback) :x: double (FCL fallback) double (FCL fallback) double (FCL fallback) :x:
Ellipsoid double (FCL fallback) double (FCL fallback) double (FCL fallback) :x: double (FCL fallback) double (FCL fallback) double (FCL fallback) :x:
Convex double (FCL fallback) double (FCL fallback) double (FCL fallback) :x: double (FCL fallback) double (FCL fallback) double (FCL fallback) :x:
Mesh :x: :x: :x: :x: :x: :x: :x: :x:

We should fully support the shapes we care about, i.e. shapes with spheres, by providing our own implementation for sphere-XXX in distance_to_point_callback.h. Otherwise we should provide fallbacks and update the documentation to reflect the latest state.