ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Collision is not detected with cylinder model

asked 2014-09-16 22:57:05 -0500

akihiko gravatar image

updated 2014-11-22 17:05:48 -0500

ngrennan gravatar image

I am testing the arm_navigation's collision detection for a virtual object added to the planning scene and a virtual object attached to the robot. When using CYLINDER models, the collision detection fails; the results are OK when using BOX models. Using CYLINDER models is better in my case, so if somebody knows the reason, please tell me.

Here is the detail:

First, I added a virtual CYLINDER object to the planning scene through the /environment_server/set_planning_scene_diff service. Also, I attached a virtual CYLINDER object to the robot's left gripper. Then, I checked the collision during moving the robot's arm through the planning_scene_validity_server/get_state_validity service.

It could detect collisions between 1. the robot's body and the virtual scene object, and 2. the virtual robot's object and the robot's body. However, it could not detect collisions between the virtual robot's object and the virtual scene object. I tested to change the SetPlanningSceneDiffRequest.operations.collision_operations parameter, but it did not work.

Here is a video to show this problem: (CYLINDER case)

By changing the objects to BOX models, it works as I expected.

The video is here: (BOX case)

Many thanks!

Update: Combinations of (CYLINDER and BOX) or (BOX and CYLINDER) work well. Only the (CYLINDER and CYLINDER) case is weird.

edit retag flag offensive close merge delete


I know this was a bug I reported way back in the day. No idea what became of it or even where I reported it.

David Lu gravatar image David Lu  ( 2014-09-17 16:48:46 -0500 )edit

Thanks for the information.

akihiko gravatar image akihiko  ( 2014-09-17 22:26:41 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2015-03-10 19:13:36 -0500

akihiko gravatar image

The collision detection of planning_environment ( ) seems to be using the collision checker of ODE (open dynamics engine). The codes are not available online now, but they are:

  • /opt/ros/groovy/stacks/arm_navigation/planning_environment
    • src/models/collision_models.cpp
    • src/models/collision_models_interface.cpp
    • include/planning_environment/models/collision_models.h
    • include/planning_environment/models/collision_models_interface.h
  • /opt/ros/groovy/stacks/arm_navigation/collision_space
    • include/collision_space/environmentODE.h
    • src/environmentODE.cpp

Anyway, unless fixing this bug, collision detection between two cylinder models does not work.

Hence, a better solution is using other collision detection library, such as:

Though MoveIt! is an integrated planning tool, we can use it as a collision detection library (and it is easy to use on ROS).

The following videos are the similar situations where we are using MoveIt! as a collision checker. No problem is happening in the collision detection between two cylinder models case.

edit flag offensive delete link more

Question Tools

1 follower


Asked: 2014-09-16 22:57:05 -0500

Seen: 824 times

Last updated: Mar 10 '15