English • العربية • български • català • česky • Deutsch • Ελληνικά • español • فارسی • français • hrvatski • magyar • italiano • română • 日本語 • 한국어 • lietuvių • Nederlands • norsk bokmål • polski • português • русский • Türkçe • українська • 中文（中国大陆） • 中文（台灣） • עברית •
Forum Threads and Blogs
3D printing with only 2 motors
Practically all 3D printers require (at least) 3 motors, in order to independently control X, Y, and Z.
Even most polar 3D robots have 3 motors: one to move radially, one to move tangentially (which together cover X and Y); and a third to move up and down (Z). On those robots tangential motor move things in a perfect circle, so moving it +360 degrees makes it end up in precisely the original location,
It seems possible to make a 3D printer with polar linkages that only require 2 motors:
http://forums.reprap.org/read.php?185,128565 : "arm robot may have only 2 motors"
- Hans Wargers turntable prototype http://staff.bath.ac.uk/ensab/replicator/Downloads/Wargers/wargers.html
some RepRap researchers propose a "polar" robot such that the tangential motor moves things in a helix using some screw thread. so that moving it +360 degrees makes it end up in almost precisely the original location, except the position is higher up 1 screw thread increment (Z). Then we don't need a separate Z motor.
This forces the Z axis to increment in steps of exactly 1 screw lead. Alas, standard 8 mm threaded rod has a screw lead of 1.25 mm (coarse) or 1 mm (fine), both of which seem to be too much of a step from one layer to the next when using a typical RepRap 0.5 mm extruder nozzle. (Getting the first layer close enough to stick to the build plate is also a little tricky with a 2-motor mechanism).
(Other, more complex ways to make 2 motors control 3D: you could have the X and Y motors move to a special location to push one lever to ratchet Z up one increment. Perhaps another lever elsewhere to ratchet down one increment.)
I've considered a polar z axis as well. Until I get everything in X and Y, I decided to table that work, since worst case, I could use a linear bearing and threaded rod drive for that stage -- there is no great need for speed. One problem I ran into with a polar Z is that the extruder may not remain orthogonal to the print surface as it is raised or lowered. Creating a linkage system might be required.
> I am going to do some calculations to find the relationship between the x, y, and z position compared to the angle of rotation for each joint.
The two arm solution can be expressed in closed form; I'm not so sure about all configurations of 3 arms, but probably for configurations that you would consider, they should be solvable.
In terms of what the angle relations look like, for 2 planer angles, constant rotation generate Rose Curves. Adding an incline link would simply generate rose curves with a trigonometric 'zoom' scale.
You might also want to take a look at the image I generated that shows the 'grid' of the two link arms. If you change the angle on one link, while fixing the angle on the other, you'll trace out the lines in these images (I still didn't fix the one on the left.. it still looks wrong to me, so ignore that one, and just look at the one on the right. smiling smiley )
UPDATED: I double checked the topology on the left, and it too is correct. I guess optical illusions played with my mind in terms of thinking it not correct. This shows the model space if one link in a two link pair is shorter or longer than the other for the full 360 degree rotation on one link, and 180 degree on the second link (Another 180 degree on the second link wraps back into the same model space volume, so I excluded it when displaying the grid pattern.)
Posted by: galaxyman7 () Date: March 10, 2010 10:44PM
Very interesting! I have done many calculations trying to solve the angles of each member in terms of x, y , and z. It has proved to be very difficult. I have attached a picture of what I am doing. It includes the equations. First I solve for r and z, which are fairly easy. All I have to do is add up components of the lengths using trig. This converts it to cylindrical form.
- Each angle is positive in the counter clockwise direction
- Assuming the lengths are the same = L
Now once I have r and z, x= r*cos(theta), y=r*sin(theta), and z stays the same. (converting from cylindrical to rectangular)
So in all I have 3 equations and 3 unknowns (a, b, theta). They look like this.
- x= (Lcos(a)+Lcos(b+a))cos(theta)
- y= (Lcos(a)+Lcos(b+a))sin(theta)
- z= Lsin(a)+Lsin(b+a)
I have solved for theta, which is pretty easy, it is just tan(theta)= y/x
so theta= arctan(y/x)
I have tried using Maple to solve this, but I do not know how to set it so that the answer is only in the specified range (on the picture). When I do solve it, it comes up with a gigantic equation. I don't mind a gigantic equation, it is just that it gives me multiple answers because the range is not specified.
So if anyone could solve this system for me or tell me how to use Maple to do it, that would be awesome.
By the way, the linkage of the arms is hidden for simplicity
Posted by: BeagleFury () Date: March 11, 2010 05:32AM galaxyman7 Wrote: ------------------------------------------------------- > Wow, I just found a paper explaining the > mathematics of robotic arms! This is exactly what > I was looking for. I have attached it. It is in x, > y coordinates, which for me is r, z coordinates. > So I will still need to do some work on it.
Law of cosine is awesome if you want to solve for angles given the side lengths.
If you have three points on your arm, A, B, and C, and know the lengths between each side, and need to solve for an angle, say angle ABC, simply solve the law of cosines identity for the angle:
- AC^2 = AB^2 + BC^2 - 2 * AB * BC * cos(ABC)
- AC^2 - AB^2 - BC^2 = 2 * AB * BC * cos(ABC)
- ( AC^2 - AB^2 - BC^2 = 2 * AB * BC ) = cos(ABC)
- acos( ( AC^2 - AB^2 - BC^2 ) / ( 2 * AB * BC ) ) = ABC
Take care though, acos is multivalued (as well as atan, which is also used when you need to compute angles to a specific x,y,z). Make sure you choose the branch cut appropriate to the solution desired (otherwise, your motor motion might travel in the wrong direction to get to the target angle.)
Giving a rough outline for the 3 degree of freedom robot arm you proposed,
1. given x,y,z, solve for the distance from the base point to the point = sqrt(x^2+y^2+z^2).
2.This gives you the third side for the triangle formed by the two arms. = motor angle 1
3. Solve for the angle on the right triangle formed by the x,y,z point, and the build plane. atan2(z,sqrt(x^2+y^2)) works.
4. Solve for the angle at the base point for the triangle created at step 2, using another law of cosines rule application.
5. Add the angles from step 3 and 4 together. = motor angle 2.
6. The final angle is the easy one. Simply find the angle formed by x and y, using atan2. = motor angle 3.
[quote] Posted by: galaxyman7 () Date: March 11, 2010 10:45PM Equations for angles a, B, and theta (plus some inbetween equations) B = arccos((R^2 + Z^2 -L1^2 -L2^2)/(2*L1*L2))_____-180 < B < 0 a = arccos(R/sqrt(R^2 + Z^2)) + C _____0 < a < 90 theta= arctan(y/x) Note: two answers for theta, pick right one in program supporting equations C = arcsin(L2*sin( B ))/sqrt(R^2 + Z^2) _____0 < C < 90 R = abs(x/arctan(y/x))_____ abs value because R can never be negative