-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
clone.py is corrupting environment - something is toggled on every clone #255
Comments
To be clear, are these three separate clones from the source environment? Or three nested clones? I.e.:
or
|
It's the second diagram. I dug deeper and disabled all planners except for Workspace. However if I directly call So maybe it's something in how the environment is cloned multiple times that causes the corruption. |
There are a bunch of different self-collision cloning problems we've faced in the past, so those links might or might not be relevant. Some more things to check out:
|
I think I found the problem. The lists are wrong in the first place because there's a bug for "sphere" geometry. By removing the sphere geometry from the robot xml and only using trimesh geometry, the link adjacency lists are correct, and cloning does not result in strange self collision errors. I will create a minimum example that demonstrates the bug. |
I propose that we add a check somewhere: maybe in robot or kinbody loading, |
There's some test code in this repository: Note: in these tests, there are 2 OpenRAVE robots: HERB and a fridge. Bug # 1:Link adjacency Loading an OpenRAVE robot with spheres geometry results in an in-correct calculation of the adjacent and non-adjacent link pairs. Code: test1.py Output:
. Bug # 2:Cloning an environment containing a robot with spheres geometry AND prpy planning sequence sometimes causes a self-collision error for the cloned robot In this example, before generating the last plan the fridge is not in self-collision. I spent a long time trying to minimize this example. Code: test2.py Output:
|
Thanks! This is an excellent analysis of the bug.
|
Regarding the bug with the lists of adjacent links and non-adjacent links, it occurs when the robot's initial configuration is such that a pair of links is already in collision. |
I have an OpenRAVE environment containing two robot objects.
I make a planning request robot.PlanToEndEffectorOffset() which throws because one of the robots is in self-collision, which it's not.
Digging deeper, the planning request is fanned-out which happens to call clone.py 3 times.
Inside clone.py I check the self-collision status of the second robot.
First time: the second robot has no self-collisions.
Second time: the second robot is in self-collision. (normally an exception would be thrown)
Third time: the second robot has no self-collisions.
The text was updated successfully, but these errors were encountered: