Excluding joint from articulation causes simulation instability

I attached several articulated robots together with rigid bodies to do some transportation work. But since I need to use ArticulationView and keep them in tree-shaped hierarchy, I set Exclude from Articulation = True for the connecting joints. However this causes simulation instabilities (objects blowing themselves away) while Exclude from Articulation = True does not.

So, what is the expected effect of this setting? Is there a way that I can create ArticulationView while still keeping the simulation stable?

It’s likely that the articulations or bodies are interpenetrating, resulting in the instability. This can be avoided by creating collision groups for the two articulations (or subsets thereof) and filtering collisions between the two.

When the joint is included in the articulation, this effectively joins the two articulations (or articulation and rigid body) into a single PhysX articulation, wherein collisions are filtered by default.

1 Like

What is the difference between disabling the collision by setting the prim’s attribute, setting filtered pairs, and setting collision groups? Are they equivalent under the hood?

I wonder if creating collision groups is the only way because it seems that the cloner would alter some related settings when cloning the Env and I want to avoid potential conflicts with it.

So it should work like this:

  • Disabling the collision by its prim’s - this will disable the collision shape for simulation, so no collisions with anything will happen. Basically empty bodies will be simulated with given masses
  • Filtered pairs are filtering pairs of given bodies/colliders. Those are meant for local disable, meaning if you have an asset instanced you can spot disable the collision between given pairs and instantiate the asset as much as you want but the pair information remains
  • Collision groups are much more higher level of filtering. As far as I know the IsaacSim collision groups filtering works in a way that only collisions within the same group works. So as long as both articulation end up in different group it should work. Though indeed this might require to modify the groups after cloning.

I think we should add support for filtered pairs where the pair would be two articulations, I think this should be easy to add, let me add a Jira ticket for that.