## Friday, 4 July 2014

### Delta Theory

posted 9 Oct 2013 00:57 by David Taylor

Delta Robot Coordinate System
I enjoy making stuff, and I enjoy making stuff from scratch (often to the detriment of any estimated timeline).
I started building a TriCopter a couple of years ago (project still on-going). As part of this exercise I needed to cut some ABS Sheets to form the chassis of the TriCopter (TriRot). I ended up doing this with a scalpel and a metal ruler or free handing to curvy bits (which incidentally were most of them). I would have loved to have a CNC machine where my cad drawings could simply be realised precisely.
I started sketching up a standard 3 axis cnc machine and ended up with what I thought would be a fairly robust, buildable solution. As part of the research to do this I can across a Yourtube video of a Delta robot and was immediately blown away.
It just seemed much more interesting. I went on to design version 3 of my CNC machine in the form of a Delta robot:

One night in bed a quickly checked what stepper motors where available on ebay and found that you could buy some small 5 volt stepper motors and drivers for about £ 2.99. Yes, we are talking less than 3 British pounds.

I immediately bought 3 and decided that I would build a small prototype that would be capable of holding a pen and drawing pictures from GCode. I wanted to include my kids (5 and 6 years old) in the process to show them the fun that could be had. I redesigned my CNC machine into a much simpler version which ended up looking like this:

Parts in red where the parts we had built so far (at the time of rendering that picture anyway).
One day during my lunch break (much like today) I wondered how the coordinate system works. How would you get the tip of a pen to move to a pixel in an X, Y, Z coordinate system with 3 towers where you could only vary the height of 3 anchors.
I came up with:

 Where:  is the height of Anchor n  is the length of each beam set.  is the X coordinate of tower n  is the Y coordinate of tower n  is the X coordinate where you want the tip to be,  is the Y coordinate where you want the tip to be, and  is the Tower you are calculating for.

So how did I arrive at this I hear you ask:
 Pythagoras states that for a triangle with one of its corners always being 90⁰ it holds that
In this instance c is the beam and is always constant, a is the height on the tower you need to put the anchor to make the tip a given distance from the tower. For one tower, this is any point on a circle. For two towers, there are 2 possibilities. For 3 towers though, you would have a single specific possibility.
Combining this fact with the fact that each of the towers will exist on a specific coordinate themselves.
So let’s assume the following coordinates for each tower:
 Tower X Y T1 6.625 75 T2 93.375 75 T3 50 0

Now let’s say I want to draw a dot at the X:40 and Y:60

First, we need to find out how far the dot is from each of the posts in a straight line so again, using Pythagoras, we draw a right angle triangle and work out the length of side c.

Doing the same for the other two towers provides the distance from each of those towers as 55.44268 and 60.82763 from each respectively.
Looking at one of the towers from the side now:

We can draw another right angled triangle. The distance from the tower to the target coordinate was worked out above and is hence equal to b in this diagram. We know that the beam is a fixed length and in this example equal to 100. Therefore, to work out what height the given Anchor must be up the tower is the same process as before.
 Tower Height T1 93.06508 T2 83.22325 T3 79.37254

incorporating the first set of equations into the second yields the original equation as:

The z axis would be a simple 1 to 1 mapping. For the z target coordinate, all three towers would need to be offset by the same amount which would make the final equation:

Now for the disclaimer:
This is completely untested and totally theoretical. As I mentioned above, we have not even finished building the individual parts yet before we could even start testing this. The next interesting part is going to be working out how to interpret GCode which would drive all of this.