2026; Building a Mini-Strandbeest Robot (Part I)
Updated: 5 days ago
Introduction
I have been interested in the Theo Jansen's Strandbeests after watching Veritasium's video on their evolution. I always wanted to recreate a smaller variant but never got the time to do so, until after my graduation when I went back home and came across both "time" and "resources" (from my undergrad years). After getting myself a Bambulab A1 mini 3D printer and testing it out, I set out to build my version of the Mini-Strandbeest Robot. This is Part I of the full series covering the initial setup and design.
Now note that there are specific goals I have in mind:
Firstly, I want to remote control it with high level commands such as linear velocity (often found in quadrupeds or humanoid robots), mainly through a joystick.
Secondly, while I might be going against the original philosophy behind Strandbeests being powered by mechanical energy entirely (even for sensing perhaps), I wanted to still build one with motors and sensors (pardon me already).
Finally, what I truly want out of the robot is automatic gait adjustment depending on the floor type or the terrain. Now this is one part which might be questionable since once you build Jansen's linkage for the limbs, the structure is fixed in place and we can only vary the speeds. I have some ideas like using different phase differences between the limbs using position servos but this is TBD.
The entire project is divided into two parts: firstly, designing the model and building the simulation model to test it out, and secondly, simultaneously building the real robot or parts of the robot to go along with that version of the design.
PLEASE NOTE that this is not a How-To-Build or DIY guide, this is mainly about my progress through building this robot and just the steps I took, hoping someone might find it interesting and also that my experiments would be useful for someone else too. The final files will be uploaded to github later.
The Strandbeest Chronicles
My entire progress is laid out here in chronological order starting from the very first variant of the robot. However, just to catch your attention, the current best version is provided at the top.
WEEK I: Starting with the basics
First things first, I wanted to print out an easy-to-build version of the Strandbeest for two reasons: get to know the physical structure well, and understand the problems that come with designing my own variant. Without even going into the kinematics of the linkage, I set off to print one out for myself following the popular LoboCNC's model on Maker World.
This is my variant, printed entirely with Bambulab PLA Lite filament. This was extremely light, powered by wind and had a lot of fragile parts. I also had to sand down some of the leg parts since print-in-place did not work. However, through this physical model, I also realized that a non-trivial change in torque is needed to keep a fixed velocity (rotation) for the cranks, even when the Strandbeest wasn't in contact with the ground. This could be either due to tolerances, slight flexibility in the links and joints, or due to the design itself. That is, I would need a separate inner loop control to keep the cranks running at a fixed velocity, instead of just performing direct torque control from my main controller.
Now that I had this going, I wanted to recreate it in simulation first. After downloading the stl files, modifying it using Sketchup (for most modelling and stl modifications) and Fusion (mainly for step files and small modifications), I prepared the model in MATLAB's Simcape Multibody, which is my go-to tool for most multibody sims. As long as parallel simulations with a large amount of samples is not necessary like in RL, this toolbox offers a large number of useful blocks. Given below is my really bad design of the entire simulation:

We start by building the closed loop chain for each leg, attaching all the leg's rotation axis and the crank components through revolute joints and then finally attaching the gear constraint from the input to the crank. Overall this model did not even have contact forces to actually simulate movement, but it did give me a base for designing the next simulation.
WEEK II: Building Strandbeest_V2 Simulation (Please walk)
Now that I understood the mechanism, it was time to test the contact forces in simulation and get it to behave like the actual model I printed.

After cleaning up the model and replacing some revolute joints with cylindrical joints to mitigate some tolerance issues when simulating both leg closed-loop kinematics and the closed-loop with the ground contact, I finally added spatial contact forces between the feet and a plane ground. Note that instead of impractically adding spatial contact to every part of the leg, we instead simulate it using a cylindrical contact geometry (visible in light blue) at each feet, giving us the following Strandbeest_V2 simulation:
WEEK III: Controlling the Strandbeest
After taking week II a bit slow, I decided it's time to attach some actuators to the joints and see if I can make it move around as I originally planned, at least in simulation (which I call V3):

To start off, I had to make two main changes:
Firstly, the single crank is divided into two separate cranks, which meant two separate gear constraints and two separate inputs.
Then, I design an inner loop controller taking rotation matrix and linear velocity measurements, with a body linear velocity reference command as input with actuator torques as output. This was a simple PID controller with some level of dither signals (there is small deadband region even in simulation due to how the kinematics and contact forces are designed), and anti-windup. Then we have a position controller that uses reference position and current position to generate the body linear velocity reference for the inner loop controller. This used a simple PI system instead.
You can see that there are two small cuboids at the top which is supposed to simulate the motor masses. I realized that the center of mass is quite high now and so it is unstable, and also found that I had no motors that match the required size for the existing models taken directly from the V1 model I printed, so we move onto the next week.
WEEK IV: Rebuilding from scratch
All I could find were TowerPro 995 Servos (velocity controlled) with me, and I decided to use these instead, which meant I also had to redesign the entire leg mechanism from scratch. I used this desmos tool and also scaled the entire size by 50% and also tried to improve the rigidity.

As you can see the crank system was also improved to have modular parts, so that the leg to crank joint can be stronger (the V1 model had cutouts and was flexible).
You can also note that the motor will be attached with the axis aimed vertically while the leg attachment is sideways. I had to design it this way to since the MG995 servo has quite some height making it difficult to place it sideways while still making the entire body narrow enough to match my aesthetics. To transfer the torque I use a bevel gear with a 1.5:1 ratio generated using this tool by Me Virtuoso.

I had to make a cutout on the pinion to attach it to the MG995's star horn attachment, and for the actual gear, I made a D-shaped cutout to fix it firmly to the crank. I also obtained print-in-place custom bearings by Koolm on Maker World, finally culminating in a single leg model with servo control:
Now that I verified the physical model worked correctly, it was time to design the simulation with all these parts and all the 8 limbs:

This was my Strandbeest_v4 model and after attaching the spatial contact blocks between the feet and the ground plane, I had the following masterpiece:
This happened because of bad contact friction, and due to heavy weights I added to the feet contacts due to an error. Anyway after fixing this, I also added joystick control and modified the controller to receive velocity norm and yaw rate commands instead since that simplified the controller design extensively. I finally test the robot in simulation (at 2x speed since the robot movement is too slow):
WEEK V: Working towards failure
Going into week V, I had two things to work out:
Improve the simulation contact geometries to use point proxies instead of the cylindrical geometry to improve performance.
Print out the entire model and test it in real time.
As you can see at the start of the post, the simulation was definitely improved and also included a lunar surface to simulate the robot. Given my small A1 mini printer, it took me quite some time to print out the entire thing, but after I built the entire thing, I realized my grave mistake(s). Firstly, the size difference was excessive compared to V1, and hence the overall mass increased significantly too even after excluding the motors.

Secondly, the joints were extremely weak given this new size, and so whenever the robot turned, the joints kept breaking due to the lateral forces.
Also, I found that my flat contact time for the legs were very short compared to the original Strandbeest design or the Holy Numbers. So, after a lot of rethinking I decided to redesign the model again.
WEEK VI: Going Plus Ultra
I have decided to learn more of Fusion 360 instead of depending on Sketchup (which I have been using since I was 12yo) for parametric designs and also to get more into the mechanical design workflows. This section will be covered in Part II since the current post is going beyond a 5 min read.
Comments