How to fix this bone? Piston example

I followed a tutorial and created this simplified model and rig. It's a piston (blue), rod (green) and flywheel (red) example with 2 armatures consisting both of 2 bones. It works almost. Problem is with the connection-joint between the piston (blue) and the rod (green). It doesn't keep the same rotation axis or the same location (I'm not sure which one), when I rotate the flywheel the axes are off. I need the piston and rod, to connect well, to have the same rotation axis. (Along global X). Note that it probably has to do with the BHelfer2 bone (AHelfer armature), it needs to stay at a certain Z and X position, but move only on the Y, I don't know how to achieve that. How to fix this?

• link to tutorial? Commented Jun 18, 2016 at 2:48
• Commented May 17, 2022 at 9:51

It would be really nice if you could post the link to the original Tutorial, as this is a quite common rigging problem with multiple solutions, and it would be interesting to see the approach with two armatures in action.

I found a different solution which deals with one single armature only, and gives you a physically correct motion. See this blend file here:

The trick is to use one bone as the master controller, and a second one mirroring the master controller's orientation. By using that, a simple IK chain can be spawned inbetween, and that serves as the master for the rod. See this screenshot:

Arm.Top is the master, which shall be rotated by the animator. Arm.Bottom receives a Transformation constraint like this:

So whenever Arm.Top rotates by a certain number of degrees, Arm.Bottom rotates the same amount, but the other direction. Arm.Bottom needs to be rotated by 180 degrees in Edit Mode already for this to work, and the Axis have to be oriented sideways by pressing Ctrl + N, using Global +X direction as the target.

Arm.IK.Target and Arm.Base.Parent are helper bones, they have Inherit Rotation set to off to avoid axis fliping issues. They are simply childs of Arm.Top and Arm.Bottom.

The IK Chain has to be modelled in a way so top and bottom arm have equal length. Arm.Base is a child of the main bone, and receives a Copy Location constraint like this:

For Arm.IK I've added an IK constraint obviously:

The targets of both of these are always the helper bones. Finally, the Piston bone, also a child of the main bone, is added and receives another Copy Location Constraint. Rod and Piston are now parented to the respective bones, the flywheel is parented to Arm.Top, and the grey part to the main bone.

In the blend file, you can play the simple animation which I've added to see the stuff in motion.

I suggest you to align your bones at the "X" axis.

This can be done manually by aligning the bones using the pose mode, or by removing the constraints for a while and aligning them in edit mode. When you finish alignment you can put back the contraints.