EWOK: An Interactive Program to Synthesize Four-Bar Linkages

Theodore B. Ruegsegger

What’s a Four-Bar Linkage?

A major objective in many branches of engineering is constraining motion: we want a tool, a conveyance, a sensor, a prosthetic limb, whatever, to move in a certain way and no other. We have many ways to accomplish this, among which are mechanisms, arrangements of connected parts that move, transforming one motion into another. Mechanisms vary widely in complexity (and cost). Among the simplest are linkages, whose parts are connected with pivots and sliding joints. Since we’re very good at mass-producing inexpensive, precise, long-lasting bearings for rotation or linear motion, linkages have obvious advantages over, say, cams or hydraulic actuators.

A four-bar linkage is among the simplest linkages, a closed chain of rigid links, connected by pivots, that move in a plane (or parallel planes). One link is generally fixed in space, the two attached to the fixed link are cranks and the link connecting the cranks is the coupler. A common variation occurs when a crank’s attachment to the fixed plane is (conceptually) very far away, effectively at infinity, in which case the coupler end moves in a straight line; in practical terms, a sliding joint or slider replaces a crank.

The motion of a four-bar linkage’s coupler is complex, as two points a fixed distance apart have their motion constrained to a circle (in the case of a crank) or a straight line (in the case of a slider). That said, it yields readily to mathematical analysis.

The reverse problem, synthesizing a four-bar linkage to guide the entire coupler (vs. just a point on the coupler) through a prescribed motion, is more tricky. It turns out that we can specify up to five specific precision positions of the coupler and design a linkage that will move the coupler through each position. Four- and five-position synthesis is mathematically complex and produces relatively few solutions, with no guarantee that any will be practical. Two- or three-position synthesis is much simpler and produces effectively infinite solutions from which to choose.

“Simpler” isn’t the same as easy or quick. In the old days, professional kinematicians spent long hours at the drafting table, laying out perpendicular bisectors and intersections of lines and circles, getting one solution at a time. And after finding a solution that, for one reason or another, doesn’t quite work, in which direction does a better solution lie?

Interactive computing has changed all that. Now we can specify the precision positions and then add centerpoints (fixed pivots, the ends of the cranks in the fixed plane), circlepoints (moving pivots, the crank ends attached to the coupler) and sliderpoints (sliders attached to the coupler but constrained to move in a straight line in fixed space). The software instantly displays the locus of solutions. As we move points, their counterparts (or loci) adjust in real time.

What’s EWOK?

EWOK is an interactive graphic program for synthesizing four-bar linkages to produce specific coupler motions. You specify the coupler motion graphically as two or three precision positions, add circlepoints, centerpoints, and/or sliderpoints, and the program calculates the geometry of linkages whose couplers will pass through those positions.

Once you have a linkage designed, you can use the program to animate it, to see what happens between the precision positions.

EWOK should be quite useful as it is, not just for its current capabilities but as a platform for enhancements. I’m grateful for any feedback on bugs, ideas for new features, or even code updates or patches.

System Requirements

EWOK works on any platform where Python and Tkinter work. I’ve tested it on GNU/Linux, Windows 10 and Mac. If you’re running it on a Mac, you need some way to right-click (actually right-click-and-drag), either plugging in a mouse with more than one button or trying the various methods to simulate a right click, e.g.,


This collection of program code and documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This collection is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this collection; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Contacting the Author



Theodore B. Ruegsegger Free Software Foundation Associate Member # 33