Close
0%
0%

Walking Machine

Almost everyone has seen images/videos of Theo Jansen's walking machine, the "Strandbeesten". Here I want to look at a simplified version.

Similar projects worth following
Development of a 4 bar walking machine.

The Walking Machines

-

Theo Jansen designed and built the Strandbeest, a walking machine:

Title: Strandbeest walking on the wind

Currens Ventosa, Oostvoorne NL 1993, photo: Adriaan Kok

Source: https://www strandbeest.com/strandbeest/1993-currens-ventosa

-

There is an excellent website (DIY Walkers) that discusses the Jansen linkage and has a web simulation for experimentation (Source: https://www diywalkers.com/strandbeest.html).

This site covers (among others) the Jansen's (8 bar) linkage, the Klann's (6 bar) linkage and the 4 bar linkage.

-

The Jansen 8 Bar Linkage

Here is an example of Jansen's 8 bar linkage using the DIY Walkers web simulation:

Picture

Source: https://www diywalkers.com/uploads/5/3/3/9/53394177/strandbeest-simulator-6_orig.gif

-

The Klann 6 Bar Linkage

Here is an example of Klann's 6 bar linkage (the "crab walker"):

Source:https://www diywalkers.com/uploads/5/3/3/9/53394177/f4-motion_orig.gif

Note that the rear legs need to walk backwards.

The foot trace should be but may not be symmetrical.

-

The 4 Bar Linkage

Here is DIY Walker's version of the 4 bar walker:

Source: https://www diywalkers.com/uploads/5/3/3/9/53394177/f4-motion_orig.gif

Note that the foot trace in not symmetrical here.

--

Here is my copy of the 4 bar linkage:

The bars are:

  1. The (black) fixed Base (Axle to Hip)
  2. the (red) Crank (Axle to Crank)
  3. the (green) Idler between the Hip and Knee
  4. the (blue) Leg consisting of the Thigh (Crank to Knee) and the Shin (Knee and Foot).

Note that the Knee angle (90 degrees) is fixed.

-

This is where my journey begins.

  • Designing the Body

    agp.cooper07/27/2026 at 09:58 0 comments

    Designing The Body

    -

    I have started designing the body. First thoughts is a bumper bar:

    It serves several functions:

    • A floor to the battery and micro-controller board.
    • Protection for the legs (they look rather fragile).
    • A sensor platform.
    • A structure to increase rigdity.

    I think I will need to extent the motor plate forward and aft, to reinforce the bumper bar floor.

    -

    I have selected 2 mm thick PTFE M3 washers.

    Bought the rods and pins.

    Bought the Nema 14 round steppers.

    A couple for the motor shaft (5 mm) to the drive shaft (3 mm).

    -

    I looked at buying M3 collars but after a long consideration, stayed with gluing the "fixed" rods/collar to the shafts.

    -

    While there are commercially  available stepper drivers, a long long time ago I built discrete drivers based on TTL logic:

    transistors - Totem Pole Output Driver - Electrical Engineering Stack ExchangeI seem to remember that I added protection diodes between ground and the output, and the output to the power supply.

    The input transistor was not used but looks like a good idea.

    -

    For the micro-processor I feel rather retro. As in the vein of "How to build your own working robot pet." by Frank DaCosta. A book I repurchased after more than 40 years. So I am looking at the Intel 8085.

    -

    When I look at the bumper bar, I could add a nose and it would look like a dog from above!

    That is the bumper bar looks like a head and a set of ears, all it needs is a snout and a nose,

    -

    I started this project on the 28th of June so tomorrow is one month.

    -

    Its been a few days with some success and failures to report:

    • Good progress on refactoring the code, getting slot and tab working:

    If you wondering, the big holes in the carriage torsion box,  are used to get access to the stepper motors.

    Balancing the Rotating Mechanisms

    I looked at a balancing the crank:

    The double thickness counter balance matches weight and centre of mass so should work okay.

    -

    Here is my first pass counter balance design:

    -

    Recalculated the counter balance weight (as best I could):

    Made the counter weight balance small as practical, but no allowance for reciprocating parts. 

    Usually an allowance of 50% to 90% of the moment of these parts is made (for internal combustion engines).

    -

    Bugs in OpenSCAD

    Bug in OpenSCAD are silent (but Syntax errors are noisy).

    -

    To implement Slot and Tabs, I wrote Function Slots(). Easy enough, create some slots, translate them to the edge in question and take the difference:

        // Add Slots for Bulkhead
        mirrorCopy([1,0,0])
        translate([cgap/2-5,0,0])
        rotate([0,0,90])
        slots(wgap,plateThick,3);

    -

    Worked fine until it does not!

    Spent a day working through this, the answer was a vertical version of slots to avoid the rotation: 

    -

    Slotting

    The slotting code work with odd and even matching slots or tabs:

    // Make Slots for edge joins
    module xslots(l,d,n) {
      let(m=n%2)
      let(w=l/(2*n+2*m-1))
      for(i=[1-n:2:n-1+0.001])
      translate([i*w,0,0])
      cube([w+0.01,d+0.02,3*d],center=true);
    }
    
    module yslots(l,d,n) {
      let(m=n%2)
      let(w=l/(2*n+2*m-1))
      for(j=[1-n:2:n-1+0.001])
      translate([0,j*w,0])
      cube([d+0.02,w+0.01,3*d],center=true);
    }
    

    -

    For example, adding slots and tabs using  tab = 3 and slots  = 4, to bulkheads:

      // Add Bulkheads
      color("Red") mirrorCopy([1,0,0]) { 
        translate([cgap/2-5,0,0])
        rotate([0,90,0])
        difference() { 
          cube([wgap,mgap,plateThick],center=true);
    
          // Add Tabs on Sides
          mirrorCopy([1,0,0]) 
          translate([wgap/2-plateThick/2,0,0])
          yslots(mgap,plateThick,4); // 4 slots and 3 Tabs
    
          // Add Tabs on Top and Bottom
          mirrorCopy([0,1,0]) 
          translate([0,mgap/2-plateThick/2,0])
          xslots(wgap,plateThick,4); // 4 slots 3 and Tabs
        }
      }

     -

    First the bulkheads with edges oversized:

    -

    First set of slots cutout:

    -

    Second set of cutouts:

    -

    Other cutouts:

    -

    So the trick here was to use n=3 for tabs and n=4 for slots, keeping d=depth and l=length the same.

    Note: (1,2) and (3,4) and (5,6) etc, are matching sets. 

    Now some matching slots in the Top:

      color("Magenta") translate([...
    Read more »

  • Building an OpenSCAD 3D Model and Animation

    agp.cooper07/22/2026 at 08:48 0 comments

    Learning OpenSCAD (work in progess)

    -

    Using the WikiBooks OpenSCAD User Manual Strandbeest (https://en_wikibooks.org/wiki/OpenSCAD_User_Manual/Example/Strandbeest), as a base, I reworked the code (it has lots of bugs) for a 4 Bar and add

    3D offsets.

    It is still a work in progress:

    -

    Here is a 3D GIF of a three leg walker (one side):

    -

    Removed the cogs and replaced with a side crank. Only one of the axles need to be driven:

    -

    Next is to add spacers or washer between moving parts:

    -

    Notes:

    • The two colours Red and Yellow are inference fits to the rods. The other as sliding fits.
    • The spaces are 25% of the plate thickness but this is not that important.
    • The design has been changed to a "side-rod" drive. The two driven shafts are now centrally located.
    • Now I need to design the motor mounts and the internal cargo space.

    -

    Update:

    • Refactored the code to make creation more systematic and easier to debug.
    • Replaced most of the individual spacers and shim code with a function and a list.
    • Added cross-rod reinforcements and motor mounts (had to make the body a little longer).
    • To coupling the motors to the drive rod, I will use a flexible tube.

    -

    Refactored the code and removed hacked code. Now able to rebuild with parameters except for the stepper motor. Cool to be able to shop online for some Teflon washers and adjust the walker for the washer thickness that was available. 

    To do:

    • Controller board mounts.
    • Battery mounts.
    • Sensor mounts.
    • And more.

    AlanX

  • Optimising the 4 Bar Linkage

    agp.cooper07/22/2026 at 05:44 0 comments

    Optimising What Exactly?

    -

    It is not easy to optimise most problems have:

    • multiple local optima
    • multiple objectives
    • objective functions may result in degenerative (useless) solutions
    • constraint functions may result in degenerative (useless) solutions
    • the need to start with a feasible solution

    The process involves mapping out the feasibility areas and then focusing in on the most important objectives that result in the best solution.

    -

    Finding an initial feasible solution

    Fortunately we can start with DIY Walkers solution (but at half scale):

    • Axle: (0.0 mm,0.0 mm)
    • Hip:  (-48.0 mm,33.0 mm)
    • Crank L1: 30.0 mm
    • Thigh L2: 60.0 mm
    • Idle    L3: 40.0 mm
    • Shin   L4: 70.0 mm
    • Knee Angle: 90.0 degrees

    -

    Here the foot trace down range is 120 degrees between the green markers and 180 degrees inclusing the green markers:  

    Note how the foot trace slow down near each left/right extremes, and is very fast when the foot up.

    -

    Extending the Flat Bottom Range

    The first major objective identified was the need to have a flat bottom (as much as practical):

    While this objective has been meet for 120 degree range (suitable for a three leg walker). How ever foot lift has been lost.

    -

    A Symmetry Constraint

    -

    For symmetry, the difference between each Y point at each horizontal extreme is minimise, using:

    • DeltaY = ABS(Yfwd-Ybwd)
    • Minimum mid-section upper and lower range of 10.0 mm

    Here is the result:

    --

    Using this as an initial feasible solution, we can impose a flat bottom:  

    -

    The final walker parameter are:

    • Axle: (0.0 mm,0.0 mm)
    • Hip:  (-53.1 mm,52.5 mm)
    • Crank L1: 30.0 mm
    • Thigh L2: 60.0 mm
    • Idle    L3: 59.3 mm
    • Shin   L4: 60.0 mm
    • Knee Angle: 90.0 degrees

    Reducing the minimum mid-section upper and lower range to 5 mm for the final result:

    Note the flat bottom has been optimised for 120 degrees
    -

    The same design as imported into a CAD package:

    Note the cyan bottom range is for 180 degrees.

    -

    This is what I see after my optimiser runs:

    -

    Clearly the 4 bar linkage can be used for a three foot (120 degree) walker, but its use would be best for relatively smooth floors as the minimum clearance is about 5.0 mm (for a 94 mm step).

    The cyan vertical range (for 180 degrees) is about 3.5 mm, suggesting a two foot (rather than three foot) walker is possible, but perhaps some what bumpy ride.

    AlanX

  • Modelling the 4 Bar Linkage

    agp.cooper07/22/2026 at 05:06 0 comments

    Modelling the 4 Bar Linkage

    -

    It is convenient to build the initial model in a spreadsheet. The results can be displayed as a graph:

    -

    First steps would be to start at the Axle (0,0) on the black base plate and calculate the red crank position:

    X1 = L1*COS(RADIANS(A0))+X0
    Y1 = L1*SIN(RADIANS(A0))+Y0

    Where:

    • (X0,Y0) is the Axle position
    • A0 is the rotation angle (clockwise from the X axis)
    • L1 is the Thigh length
    • (X1,Y1) is the Crank position

    -

    Next is the find the intersection of two circles from the Crank and the Hip:

    -

    There are generally two solutions and the correct one needs to be selected. If the order of the parameters are consistent, then the selected solution will be consistent.

    -

    One method to solve this problem follows:

    Source: https://math stackexchange.com/questions/256100/how-can-i-find-the-points-at-which-two-circles-intersect

    -

    Here are the Circle Intersection Calculations:

    CX1 = Crank X
    CY1 = Crank Y
    R1 = Thigh length (L2)
    CX2 = Hip X
    CY2 = Hip Y
    R2 = Idler Length (L3)
    D = SQRT((CX1-CX2)^2+(CY1-CY2)^2)
    L = (R1^2-R2^2+D^2)/2/D
    H = SQRT(R1^2-L^2)
    IX1 = L/D*(CX2-CX1)+H/D*(CY2-CY1)+CX1
    IY1 = L/D*(CY2-CY1)-H/D*(CX2-CX1)+CY1
    IX2 = L/D*(CX2-CX1)-H/D*(CY2-CY1)+CX1
    IY2 = L/D*(CY2-CY1)+H/D*(CX2-CX1)+CY1

    -

    The two solutions are:

    1. (IX1,IY1)
    2. (IX2,IY2)

    -

    For the way I ordered my circles, the solution 2 (IX2,IY2) was chosen for the Knee position:

    X2 = IX2

    Y2 = IX2

    -

    Finally the Foot has to be extended (L4) from the Knee at 90 degrees toward the Floor:

    Thigh Angle: A = DEGREES(ATAN2(X2-X1,Y2-Y1))
    Foot X: X3 = L4*COS(RADIANS(A+90))+X2
    Foot Y: Y3 = L4*SIN(RADIANS(A+90))+Y2

    Note: Spreadsheets use atan2(Cos,Sin) while C code uses atan2(Sin,Cos).

    -

    Having satisfied myself that I the equations are working, I can code the model in C code for optimisation.

    AlanX

View all 4 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates