Closed isucan closed 9 years ago
Ran into the same issue. The problem is that there is no template specialization of the GJKInitializer class for a Plane. Thus, the nonspezialized version is used, which returns a NULL pointer instead of a GJK object.
First, FCL calls GJK solver when there is no template specialization of the GJKSolver_libccd::shapeIntersect()
for shape collision. However, there is GJKSolver_libccd::shapeIntersect<Cylinder, Plane>()
that calls specific collision algorithm for cylinder-plane instead of GJK solver for cylinder-plane so it shouldn't returns NULL pointer.
The problem arises when the order of collision object pair is reversed (i.e., plane-cylinder). For the case, FCL attempts to call GJKSolver_libccd::shapeIntersect<Plane, Cylinder>()
that doesn't exist. Then, FCL attempts to call GJK solver for plane-cylinder, which returns NULL pointer as @tobiaskunz explained.
I believe this issue fixed by #53. I haven't tried to test with moveit so if it's still a problem with it let me know.
When a plane is added to a collision world in moveit (where an octree also exists), fcl segfaults.