Page 1 of 1

### Remove Collision from an entire MultiBody

Posted: Thu Feb 07, 2019 10:18 pm
Hi,

i have a certain number of random generated MultiBody with multiple links BUT i dont want them to collide beteen them and i also want them to keep colliding with my main plane floor.

I find a solution but it works only on the body of the multy body not on the links. Part of the problem is : i dont know what is the LinkIndex parameter in the setCollisionFilterGroupMask function.

My code at the moment :

Code: Select all

``````p.createCollisionShape(p.GEOM_PLANE)
basePlan = p.createMultiBody(0, 0)

nbobj = 5

aShape = s.Shape(body, pos1)
aShape2 = s.Shape(body2, pos1)

# intitialize multibody matrix for "nbobj" new link
aShape.createRandom(nbobj)
aShape2.createRandom(nbobj)

# do the createMultiBody and return the UniqueBodyid
shape = aShape.createBody()
shape2 = aShape2.createBody()

# Do shape to not collide

# But enable the floor Collision
p.setCollisionFilterPair(basePlane, shape, -1, -1, 1)
p.setCollisionFilterPair(basePlane, shape2, -1, -1, 1)
``````

### Re: Remove Collision from an entire MultiBody

Posted: Tue Feb 12, 2019 2:10 pm
No one respond .. nice. The issue is in fact still open on github (https://github.com/bulletphysics/bullet3/issues/2020) and erwin coumans ignore the BUG still 1 month after. The only way i found is complexity O(n^4) which it's very very bad conpare to the real who is O(n^2)

Solution for intrested person who need to have a proof of concept :

Code: Select all

``````for i in range(-1, nbobj):
for j in range(-1, nbobj):
for elem1 in range(0, nbPop):
for elem2 in range(elem1+1, nbPop):
p.setCollisionFilterPair(pop[elem1].getId(), pop[elem2].getId(), i, j, 0)
print((i+2)/(nbobj+1))
``````

We need to remove the collision pair by pair so if you have 100 objects it's a 100*100 calculation. the fun doesn't end here.... if you have 10 piece in your multibody you need still to remove the collision pair by pair AGAIN. So it's actualy 100*100*10*10 calculation...

### Re: Remove Collision from an entire MultiBody

Posted: Tue Feb 19, 2019 12:18 am
PyBullet. setCollisionFilterGroupMask should be fixed in latest repository. Thanks for the report.

Note that link index -1 refers to the base, and link index >=0 refers to child links.
https://github.com/bulletphysics/bullet3/pull/2116

### Re: Remove Collision from an entire MultiBody

Posted: Tue Feb 19, 2019 11:34 am
Thanks a lot it works !!! and with the complexity of O(n²)

Here the final code for peoples who want it

Code: Select all

``````# pop => Array of multibody personal class where is stored the unique ID and number of links and all the links matrices
def removeAllColisions(pop):
for elem in pop:
# Get the numbre of sub-object/links in the multibody
for i in range(-1, elem.nbobj):