Rigid Body Joints and Physics Steps

I’ve posted some stuff already about rigid body joints, but I’m still in search of some information as I progress. I’ve scoured the Blender Wiki, API, bullet API, this forum, and I’m running up dry.

First, I’ve built a rigid body system that works a bit like a zero-g bolo. It has:

  • A Rigid Body empty that acts as an anchor, with translation locked.
  • A Rigid Body object at a particular distance joined to the anchor with location constraints, but no rotational constraints.

This should represent a fixed anchor with the rigid body object acting as the end of the bolo. It can rotate freely, and move about the anchor constrained to the arc defined by the distance established at the creation of the joint.

I then apply forces to object to kick it around the anchor.

Think of it like a tethered model airplane. It applies it’s own forward force, and swings around in a giant arc.

It works well. But I’m trying to learn about the engine’s physics steps and substeps and how this relates to the drift and error I see in this rigid body system.

Let’s say I set the physics max steps and logic max steps to 1 as a base for testing.

At 1 physics substeps, when I apply force to the system, the object just sails away, dragging the anchor with it.

I then doubled the substeps until I found a mostly stable simulation. This turned out to be 16… but it still drifted and tugged. When I printed out the anchor’s position, it was drifting by about 1 unit depending on how much thrust the object is applying. At 14 substeps, the arc that the object travelled would begin to wobble and stray.

What’s happening? I don’t understand how more substeps equals more stable physics. What is a substep? What get’s processed in a substep that I need 16 of them to resolve a single rigid body joint?

My next question, is also related to the rigid body joints. If I take this same system, and apply a moderately hard force in a direction that is mostly aimed away from the center of the arc, the whole rigid body joint system will displace and sort of orbit the position in which the anchor should be locked. It looks like the fixed anchor is attached to a spring. This is the “drift” I mention earlier.

Using the tethered model airplane analogy, it would be as if the airplane is so powerful that it’s dragging the operator along with it, who is constantly trying to error correct back to his starting position.

Again… with higher substeps, this drift and springiness goes away.

Why?

I hope these scenarios make sense.

I establish the rigid body system in python modules. Gravity has been disabled.

Thanks for any insight.

I’ll try to clarify and respond to questions.

I have the same issue with rigid bodies,
if I up the mass of the “root object”

it fixes it with cars, until the force gets to high,

here is a simulation, that eventually breaks the joint.

I think it’s bullet timestep is locked, where bge might not be?

so occasionally it just skips a frame, and then all hell breaks loose?

Attachments

CheckIt.blend (498 KB)

Yeah, in your example, when it “breaks”-- it’s really that suddenly the anchor object seems to be yanked from it’s position and then sort of orbits the point it’s trying to get back to.

Hopefully someone will have some better insight to what’s going on under the hood.

They are talking about switching to the bullet wrapper the main GUI/RBJ solver engine uses

Can you supply a link to that effect? I’d like to read about up on that progress/intention.

it was in the developer meeting IRC,

Ah, yeah… I figured as much. I just finished reading the logs and the thread.