My goal is to create accurate and fast drop simulations of arbitrary mechanically complex assemblies of rigid objects like this bracelet consisting of 43 interlocking parts.
https://postimg.cc/Jsxd0M1j)
In order to do proper physical simulation I had to split the shells or segments of the model(s) into combinations of convex shapes which I did using VHACD (see my previous post at
viewtopic.php?f=9&t=12009&p=40395#p40395). Unfortunately for more complex objects like the bracelet, this is not sufficient and because of the cyclic nature of the physical relations (triplets of segments connected to each other via mechanical connection) the simulation suffers from instabilities and becomes prohibitively slow.
Simulating single pairs of mechanically connected segments works fine however, even in realtime. Hence the idea arose to simulate all the pairs in the assembly and then analyse the DOF between each pair and encode this in a generic6DOF constraint. Finding the basis frame for the constraint works quite well for the bracelet:
https://giphy.com/gifs/xj1cCQzz7MiW6OFXsI -you see two reference frames, one fixed representing the original position and orientation, the other representing the iteratively calculated pivot point between the segments.
The next step is to do the simulation of the entire assembly using just constraints without collision between the mechanically connected pairs, and using collision of convex hulls between non-connected pairs. This should be much much faster.
I noticed however that the btGeneric6DOFConstraint is unfortunately not exposed in pybullet, hence my question. I know I could do the entire project in C++ and have access to the btGeneric6DOF, but this does not fit our production pipeline very well which is entirely python based. I am now thinking to use the Blender python module, as this does seem to expose btGeneric6DOF and can run (and render) the simulation. However, if there is another way (by generating Urdf files perhaps?) I would love to hear that!