Why does part of my rig seems to jump out of position in object and pose mode?

File: Pump Rig attached.
I run my animation in object mode, stop it, go into edit mode then into pose mode. I reset to frame 1 and part of the rig seems to be out of position. Why? It doesn’t seem to bother the animation but …
This is probably a common question but I can’t seem to frame my search terms to find the answer. Thanks for any enlightenment.

Attachments

Pump Rig 001.blend (487 KB)

You have cyclic dependencies on your rig.

The armature influence the Piston position by parenting, the Piston influence the Empty by parenting, which in turn influences the armature by constraints.
That creates a delay in updating objects/bones position. The whole setup need to be evaluated several times to get real positions of objects/bones.

The dependency graph in blender who is in charge of updating objects and bones position doesn’t make a fine grained job in calculating object/bones transformations. So you can easily create a cycle in dependencies even if there isn’t actual conflict ( = logically that should work but in fact it’s not)

This is a big part in blender that is rewritten in blender 2.8 so these corner cases shouldn’t append that easily.

If the animation is working as intended to you, you may keep it like that. Or replace the Empty and the Piston object by bones inside the armature. And finally parent the piston object to his corresponding bone. If that still doesn’t work try to rework constraints to break the cycle.

Hope that all this make a little sense, I’m not sure I’m explaining all this in a clear way.

To sozap: Thanks for the reply. I have made note of the cyclic dependency. In trying to simplify the rig I have made a new Blender file.
Unfortunately I have run into problems: The Limit Location constraint on the PistonBone does not work and the ArmLink bone moves relative to the Arm. Can you explain what I am doing wrong? - Thanks for your help.

Attachments

Pump Rig 003a.blend (508 KB)

Hum,

I was a bit lazy and instead of trying to understand how you wanted it to be done and why it doesn’t work I’ve done it my way.

The approach here is : instead of make things work like in real life in order to get the correct result, I’ve focused on what the result would be and cheated something that appear to work like in real life.

The bone ArmLink isn’t used anymore in order to get the Piston moving up and down, but I’ve keep it so you can attach mechanical parts to it.

Pump Rig 003b.blend (505 KB)

To sozap: Thanks for your rigging revision. It certainly clears away the problems I have encountered in my attempts. Now I have to learn about the constraints you used: Damped Track and Copy Location.

I suggest you “clean” you file. Remove any extra stuff which occurs due to “troubleshooting.” In addition, under the physic tab set the mesh to no collision as well as the Armature.