Building an Open Source 3DOF Palletizing Robot Part 2

The 3DOF robot arm I built is coming along very nicely. Today I attacked several low hanging fruit to improve the machine.

Photo on 14-03-26 at 10.30 PM

Noise and Electronics

First of all, the noise. Ow! It’s bad. I dipped into the Makelangelo and Stewart platform parts for a RUMBA controller. The code changes have already been checked into Github.

Pen holder

arm pen holder 2Sorry, Internet, but that’s as close to a cat as we get around here.

The next most obvious problem was the floppy pen. I replaced the 3d printed pen holder with a laser cut model that would give me everything I wanted. This newer model has graduated holes that will stop a Sharpie from falling out the bottom but still allow it to rise if the finger tip gets too close to the paper. I’m OK with the remaining play, it’s not really worth it to me to improve the pen holder much more.

If you’d like to make a tool for this machine, the M3 holes are 1.91cm apart on the horizontal and 2.65cm apart on the vertical, center to center. I have pin outs for exactly one servo, so a claw is doable. The RUMBA is meant for a 3D printer so I also have power out that’s meant for a heated bed or nozzle. That same power could be used for a vacuum pump.


The bicep side walls have been thickened from 1/8″ to 1/4″. This seems to dampen the torque caused by a fast moving finger tip. No DXF file changes were needed, I just cut the same part again from the thicker birch material.

arm tendon shoulder connectorCrazy glue FTW

While I had the laser going I also cut another of these pieces. This is a photo of the old piece. I cut a second copy of the bit sticking out and made a sandwich with the gear in the middle. The screw that goes through both pieces and the tendon can’t twist any more, which removes a lot of wiggle from the finger tip.


I ordered some 3mm ID, 8mm OD, 3mm thick, flanged bearings. I’m going to add 10 or 11 to this model to make the movement extra smooth. Right now I have to tighten nuts all the way and then loosen them 1/4 turn, which leaves a lot of wiggle room. I scoured Alibaba and got several quotes. the best offer wanted to charge me $150 for 50 bearings + shipping. An hour after I confirmed the order another supplier got back to me and said they could supply the same bearings for $50 less, shipping included. Oh well. If you think you can help me get better prices, please use the contact us form to say hi. I’ll be adding these bearings to the store when they arrive.

Homing and encoders

I invested a lot of time today on gcode G28, automatic homing. Imagine you wake up in a strange house, blind. All you can do is stumble blindly and hope you don’t stub your toe. Now compare that with waking up in your own bed: you know where you are, so you can go anywhere. When this robot first turns on it’s like waking up before dawn – the robot has no idea where it is. When I tell it G28 it backs up until it touches the switches. When that happens it knows where the switches are so it knows where the finger tip is and from there it can go anywhere. It’s a bit like the robot suddenly realized “oh, I’m on the left side of my own bed.” Big fancy industrial robots have absolute position encoders, which report the angle of every joint all the time. Those robots know where they are from the moment they turn on. Another nice thing about encoders is that I could turn off the power to the motors and physically move the arm while recording what the encoders tell me. Then I could turn the power back on and use the motors to replay that movement, just like the Baxter robot. Sadly, the price on even moderately accurate encoders is way out of range for a machine a student can afford. I would run a Kickstarter for that if I had any idea how to make an encoder.


The Inverse Kinematics code was calculating the elbow in the wrong spot, which was screwing up some of the movement commands. Also I’ve finally learned how to get LWJGL running in Java. I hope to use it to draw a 3D simulation of the arm and have it copy the real robot’s movements.  I’d like to get several of my existing robots to simulate in this way, maybe even all at once in the same app.