flexible-collision-library / fcl

Flexible Collision Library
https://flexible-collision-library.github.io/
Other
1.36k stars 415 forks source link

Segmentation fault on Box-Cylinder signed distance (ccd-GJK) #407

Open wxmerkt opened 5 years ago

wxmerkt commented 5 years ago

Using the latest master (2112037d3f0490f83c9e2d237886eb113b7b0d31), I get the following kind of segmentation faults fairly often (it's also happening with older commits):

Thread 1 "python" received signal SIGSEGV, Segmentation fault.
0x00007fffa534a313 in fcl::detail::libccd_extension::ccdGJKSignedDist(void const*, void const*, _ccd_t const*, _ccd_vec3_t*, _ccd_vec3_t*) () from [path]/lib/libfcl.so.0.6
(gdb) bt
#0  0x00007fffa534a313 in fcl::detail::libccd_extension::ccdGJKSignedDist(void const*, void const*, _ccd_t const*, _ccd_vec3_t*, _ccd_vec3_t*) () from [path]/lib/libfcl.so.0.6
#1  0x00007fffa5348931 in bool fcl::detail::GJKSignedDistance<double>(void*, void (*)(void const*, _ccd_vec3_t const*, _ccd_vec3_t*), void*, void (*)(void const*, _ccd_vec3_t const*, _ccd_vec3_t*), unsigned int, double, double*, Eigen::Matrix<double, 3, 1, 0, 3, 1>*, Eigen::Matrix<double, 3, 1, 0, 3, 1>*) ()
   from [path]/lib/libfcl.so.0.6
#2  0x00007fffa532c805 in fcl::detail::ShapeDistanceTraversalNode<fcl::Cylinder<double>, fcl::Box<double>, fcl::detail::GJKSolver_libccd<double> >::leafTesting(int, int) const () from [path]/lib/libfcl.so.0.6
#3  0x00007fffa536bf2f in void fcl::detail::distance<double>(fcl::detail::DistanceTraversalNodeBase<double>*, std::__cxx11::list<fcl::detail::BVHFrontNode, std::allocator<fcl::detail::BVHFrontNode> >*, int) ()
   from [path]/lib/libfcl.so.0.6
#4  0x00007fffa538e418 in fcl::Cylinder<double>::S fcl::detail::ShapeShapeDistance<fcl::Cylinder<double>, fcl::Box<double>, fcl::detail::GJKSolver_libccd<double> >(fcl::CollisionGeometry<fcl::Cylinder<double>::S> const*, Eigen::Transform<fcl::Cylinder<double>::S, 3, 1, 0> const&, fcl::CollisionGeometry<fcl::Cylinder<double>::S> const*, Eigen::Transform<fcl::Cylinder<double>::S, 3, 1, 0> const&, fcl::detail::GJKSolver_libccd<double> const*, fcl::DistanceRequest<fcl::Cylinder<double>::S> const&, fcl::DistanceResult<fcl::Cylinder<double>::S>&) ()
   from [path]/lib/libfcl.so.0.6
#5  0x00007fffa539861c in fcl::detail::GJKSolver_libccd<double>::S fcl::distance<fcl::detail::GJKSolver_libccd<double> >(fcl::CollisionGeometry<fcl::detail::GJKSolver_libccd<double>::S> const*, Eigen::Transform<fcl::detail::GJKSolver_libccd<double>::S, 3, 1, 0> const&, fcl::CollisionGeometry<fcl::detail::GJKSolver_libccd<double>::S> const*, Eigen::Transform<fcl::detail::GJKSolver_libccd<double>::S, 3, 1, 0> const&, fcl::detail::GJKSolver_libccd<double> const*, fcl::DistanceRequest<fcl::detail::GJKSolver_libccd<double>::S> const&, fcl::DistanceResult<fcl::detail::GJKSolver_libccd<double>::S>&) () from [path]/lib/libfcl.so.0.6
#6  0x00007fffa5399385 in double fcl::distance<double>(fcl::CollisionObject<double> const*, fcl::CollisionObject<double> const*, fcl::DistanceRequest<double> const&, fcl::DistanceResult<double>&) ()
   from [path]/lib/libfcl.so.0.6

I.e., when computing a distance between a Box and a Cylinder using libccd's GJK. Alas, I do not have a reproduction case. Have you seen these kind of segmentation faults?

I am on Ubuntu 18.04, using the latest libccd and FCL (2112037d3f0490f83c9e2d237886eb113b7b0d31). Compiled without SSE or march=native.

wxmerkt commented 5 years ago

I am getting a similar segmentation fault between a BVH and a primitive (box) - possibly a separate issue?:

#0  0x00007fffa1dec502 in fcl::detail::GJKSolver_libccd<double>::S fcl::distance<fcl::detail::GJKSolver_libccd<double> >(fcl::CollisionGeometry<fcl::detail::GJKSolver_libccd<double>::S> const*, Eigen::Transform<fcl::detail::GJKSolver_libccd<double>::S, 3, 1, 0> const&, fcl::CollisionGeometry<fcl::detail::GJKSolver_libccd<double>::S> const*, Eigen::Transform<fcl::detail::GJKSolver_libccd<double>::S, 3, 1, 0> const&, fcl::detail::GJKSolver_libccd<double> const*, fcl::DistanceRequest<fcl::detail::GJKSolver_libccd<double>::S> const&, fcl::DistanceResult<fcl::detail::GJKSolver_libccd<double>::S>&) () from [path]/libfcl.so.0.6
#1  0x00007fffa1dec815 in double fcl::distance<double>(fcl::CollisionObject<double> const*, fcl::CollisionObject<double> const*, fcl::DistanceRequest<double> const&, fcl::DistanceResult<double>&) () from [path]/libfcl.so.0.6