Robotic arm: A raspberry pi driven 6-axis ROT2U implementation

This is a build guide for a 6-axis servo driven robotic arm.  It includes open source software for positioning the arm using a raspberry PI and PWM based servo control.


Part Number Total Cost ($)
Rot2U 6-axis arm with MG996R servos 1 70
Adafruit 16-channel servo hat 1 18
Raspberry Pi 1 35
6Volt ~15amp power supply 1 X
Total: 123
Equipment list
Soldering iron and basic competency
Digital multimeter
Computer to program raspberryPi
Quickgrip clamps or baseblock to hold down robot


Servo hat


This tutorial makes use of the Adafruit 16-channel raspberry pi servo hat, although any PWM servo driver will do.  Detailed instructions on how to solder on the headers, attach the servos, and affix the hat on the raspberry pi are included here:

This tutorial assumes you have connected 6 servos to the servo hat (positions 0:5).

A point of note:  The MG996R Servos recommended above can draw several amps of current.  Please ensure that the power supply you are using for your RPI is isolated from the servo power, or else large current draws can cause brownouts on the pi. I used my desktop DC power supply (Long Wei PS-305D) because I had it laying around, but it is likely overkill:



Robot assembly

I followed the following youtube video that shows mechanical assembly instructions for the ROT2U:

Since I assembled mine, a video with English commentary has been published here:



Screen Shot 2018-01-01 at 1.34.35 PM

I wrote a basic software library for controlling the arm.  It is available here:

Detailed installation instructions are included in the  In short, you will generally start at the bottom of the list and work up.  You can set different servo positions directly using menu option #3, selecting a servo, then inputting a position.  Once you have the robot in the location of interest, you can list the servo positions.  These positions can then be added to create a teachpoint.

To create teachpoints, edit the Teachpoints.csv file on your local machine:

Blanks indicate not to change a given servo position, while values will move the servos in parallel to the location(s) of interest.  A human readable name (Position) is what will show up in the menu for selection.

Once several teachpoints are set, Sequences of these teachpoints can be implemented.  Similarly to setting teachpoints from servo positions, you can edit the Sequences.csv on your local machine:

In this file, semi-colon is the delimiter, and commas represent lists within a given cell.  You can have a series of teachpoints for a given sequence, and a list of similar length with associated delays.


Every project leaves some work undone.  It might be useful to provide teachpoint or sequence addition via the cli menu, instead of hand editing the CSVs.  Any other good ideas on how to improve the software, please submit a PR!