6-Axis Servo Arm

Timeline: December 2024 Context: Personal project Alejo Restrepo

In December 2024 I built a 6-axis robot arm out of hobby servos, 3D-printed parts and an Arduino UNO.

Servos keep the electronics simple. Each joint is one motor with a PWM line to the Arduino, no drivers and no limit switches, and the motor holds whatever angle it is given.

Testing the servos on the Arduino before assembly.

The servo horn on its own is not rigid enough, so I designed a 3D-printed housing for each motor to reduce the inaccuracy. Each housing holds a one-stage planetary reduction: the servo shaft drives a sun pinion, which turns three planet gears inside the printed ring gear, so the joint runs on the housing rather than on the horn. The rest of the body is printed as well.

3D-printed servo housing with the motor mounted inside
3D-printed housing for one of the servos.
Inside the printed housing: the sun pinion on the servo shaft and the ring gear of the planetary stage
Inside the housing: the sun pinion on the servo shaft and the printed ring gear of the planetary stage.
Printing the body.

First test with the base mounted: jogging the rotation joint from the serial monitor.

Rotation joint jogging test.

Servos only know their own 0–180° range, so I had to center each motor. I sent 120°, 90° and 60° to joint 1 and checked that the link actually ended up at that angle.

Joint 1 angle test: 120°, 90°, 60°.

I also used this setup to check that my kinematics code was outputting the correct joint angles. The Arduino computes the joint angles for a target, maps them onto the servo range and prints them to the serial monitor; if one of them falls outside 0–180° the target is reported as not reachable. To compare, I entered the same target in Maximilian Beck's robot GUI, which solves the inverse kinematics for a given robot geometry and shows the resulting pose.

Joint angles from the Arduino next to the same pose in the robot GUI. Thanks to Maximilian Beck for the GUI.

After assembly the motors had to be centered again, and one servo cable broke. Replacing the cable was faster than disassembling the joint.

Centering the motors again and replacing a servo cable.

The finished arm is in the video at the top.

Limits

Servos have no absolute position reference and only 180° of range per joint, which is what bounds the arm's precision and reach.

The full video is on YouTube.