# How can a mechanical linkage with a closed loop be rigged?

I'm trying to rig a model of a Peaucellier-Lipkin mechanical linkage. While inverse kinematics for a chain of bones in the armature works well for some of the linkage, I don't see how to create the closed loop portion. There must be some way to constrain the tails of two bones to stay together, but I am having trouble finding it.

Here's what I have so far.

• I wonder if non-rigging method is acceptable? If so, I can suggest a better one. Mar 4, 2014 at 11:44

There are generally two ways here: bone constraints and rigidbody simulation.

## Solution 1 - Bone Constraints:

2. Create armature with bones set as shown on the image below.
3. Animate the key bone (the red one here).
4. Rigging.

Result:

Example file:

## Solution 2 - Rigidbody Simulation:

1. Build the initial state of the linkage, make sure they don't intersect or too close to each other;
2. Select them all, click Add Active button in Physics tab in Toolshelf;
3. Select either two linkages, click Connect in that tab to create constraints, set type to Hinge, move them to expected hinge points. Note that Hinge rotates along the Z axis of constraints (empty objects), so you may need to correct the rotation.
4. Create rotation action for BoneEB (the blue bone in the image below), toggle Animated in its Rigid Body setting panel.

For better result, you need to set the Steps per Second and Solver Iterations relatively high in Scene tab.

Result:

Example file:

• That's cool! Can you provide some details about how you did that?
– Matt
Mar 4, 2014 at 16:20
• @Matt OK. See the updated answer. Mar 4, 2014 at 17:09
• Why are the Steps Per Second and Iterations so high? Mar 4, 2014 at 17:37
• @Vader I think there are some loop constraints, which needs more accurate calculation in this case. I've tried not to do so, but the result is weird. Mar 4, 2014 at 17:42
• Great! I started looking at rigid body physics, too, but I didn't get very far. Building on what you've done, someday, I'd like to write some Python to output the coordinates of the empty at D as a function of the rotation of the blue arm. Mar 4, 2014 at 18:34