Building an Open Source 3DOF Palletizing Robot


Last week on the Instagram and Twitter feed I showed a picture of a 3 degree of freedom palletizing robot I built. I just created the Github repository for the open source code. As mentioned on the About page I’m dedicating the next year to one of my dream projects: Building a 6DOF arm and making it available for everyone.

Why now?

For the last two years I’ve been teaching myself what I need to know to build a robot arm. I started the Makelangelo to learn how to use stepper motors. I built my first Delta robot to learn how to calculate Inverse Kinematics. I Build the first Stewart Platform because I thought I could use it as a wrist for the robot arm and because I want to drive at least 6 stepper motors in the final arm. It’s like I’ve got the Minecraft blocks and now I can craft them together. The Makelangelo 3 is out, the Seattle Mini Maker Fair is over, and I have more time to work on what really matters to me.

How does it work?

Let’s start by naming the major parts. The finger is the triangle bit at the end where a tool would go. Connected to that is the forearm, which is a parallelogram shape. Connected to the forearm is the bicep, which also has a parallelogram. The two parallelograms are connected by the triangle piece at the top, which forces the finger tip to always be level with the table. The bicep is connected to the shoulder where all the motors and electronics are mounted. The shoulder is connected to the base, which is suction cupped or screwed to a table.

Between the shoulder and the elbow there’s an extra “tendon” bar that pulls on the back of the elbow. See how there’s two gears on the front of the shoulder? One of those gears is attached to the tendon. That way I can put all the motors on the base and make the arm lighter. The second gear is turning the shoulder.

In this first prototype I’m using Two Adafruit Motor Sheild v2 on an Arduino UNO for the brain. For the first test of the software I used the GCodeCNCDemo for AMS2 with 4 axis. I could type gcode command G00 Z10 and the robot would turn to the left, G00 X10 would move the shoulder, and G00 Y10 would move the elbow.

Inverse Kinematics

I’ve also taught it to understand the cartesian coordinate system. When the arm turns on it homes – backs up until it touches some switches. The robot knows where the finger tip is located when it is at home position. After that I can tell it “move the finger to XYZ” and it calculates how many steps it has to move each motor to get the finger tip to that spot. As long as the motors never miss a step it will move in straight lines to any spot I ask for.

Next steps

I’ve already started writing code for the RUMBA controller. I’m going to add 9 or 10 flanged 3mm ID bearings to make the movement extra smooth. I’m very keen to learn how to run OpenGL in Java so I can show a 3d model on your screen that copies the real robot. Over the next few weeks I’ll be making steady improvements so stay tuned.

Code + More

Grab the firmware here

Download the free plans

Get all the parts from us


I want to stress again this is my very first prototype so please be gentle. They will only get better from here.  The rattling you will here is caused by a combination of the large step size and the low speed.  When it moves faster with smaller steps that sound becomes a smooth hum.

The resulting output looks like this.

Hello World Test 1