Welcome! Log In Create A New Profile

Advanced

Cartesian Delta Hybrid

Posted by craigbossard 
Cartesian Delta Hybrid
February 12, 2015 12:08PM
Hi,

I posted some of this in the repetier board, so I apologize if you have seen this before.

I have an idea for a hybrid printer that is based on using what is available to the utmost. I have been salvaging scanner beds and came up with a configuration that keeps them mostly intact. If two scanner beds are set so the linear guides face each other, it's the same configuration as between the B and C towers on a delta printer. The nice thing about this, is that universal joints aren't needed. Beefy piano hinges or something like that is fine because only XY motion is generated. From there, the Z axis can be made by mounting 2 scanners perpendicular to the XY platform underneath. The config will work perfectly with a ramps 1.4 setup. I haven't really thought about extruders because I don't know anything about them.

I need to modify controller firmware, but I don't know how. I think the repetier bipod config could be close, but it's not implemented yet. I know the geometry for the setup, but I don't know how to code it yet. If anyone thinks this is interesting, I would really like people to collaborate with. Criticism is welcome as well.

Thanks,

Craig
Re: Cartesian Delta Hybrid
February 21, 2015 03:00PM
Sounds interesting. Have you seen Nicholas Seward's Wally? It's a little like this, but it uses a pair of SCARA-like hinged arms instead of linear guides. It also uses a four-bar linkage to move the bed, making the entire printer function without linear guides.

Also, piano hinges seem a little "loose" for a printer. Could a pair of 608's with some space in between work instead?
Re: Cartesian Delta Hybrid
February 21, 2015 03:54PM
I love the SCARA designs. I don't have any angle motors. The basis of this idea is to build a printer that can use basic parts from scanner beds with minimal modification.

What are 608s? I will look into those for sure.
Re: Cartesian Delta Hybrid
February 21, 2015 04:18PM
608zz bearings
Re: Cartesian Delta Hybrid
February 21, 2015 04:23PM
Right. I would like something that pins linearly. This youtube video shows something similar bearing ideas in the first example. Will need to be tight like you say though.

[www.youtube.com]

I cannot find the transformation codes in repetier, otherwise I would have a motion system to show right now...
Re: Cartesian Delta Hybrid
February 25, 2015 10:56AM
So, I have been trying to decipher where this code is in repetier. I got frustrated and tried a look at marlin. I think I hit the right one.

If we start with the following:

#ifdef DELTA
void recalc_delta_settings(float radius, float diagonal_rod)
{
delta_tower1_x= -SIN_60*radius; // front left tower
delta_tower1_y= -COS_60*radius;
delta_tower2_x= SIN_60*radius; // front right tower
delta_tower2_y= -COS_60*radius;
delta_tower3_x= 0.0; // back middle tower
delta_tower3_y= radius;
delta_diagonal_rod_2= sq(diagonal_rod);
}

void calculate_delta(float cartesian[3])
{
delta[X_AXIS] = sqrt(delta_diagonal_rod_2
- sq(delta_tower1_x-cartesian[X_AXIS])
- sq(delta_tower1_y-cartesian[Y_AXIS])
) + cartesian[Z_AXIS];
delta[Y_AXIS] = sqrt(delta_diagonal_rod_2
- sq(delta_tower2_x-cartesian[X_AXIS])
- sq(delta_tower2_y-cartesian[Y_AXIS])
) + cartesian[Z_AXIS];
delta[Z_AXIS] = sqrt(delta_diagonal_rod_2
- sq(delta_tower3_x-cartesian[X_AXIS])
- sq(delta_tower3_y-cartesian[Y_AXIS])
) + cartesian[Z_AXIS];
/*
SERIAL_ECHOPGM("cartesian x="); SERIAL_ECHO(cartesian[X_AXIS]);
SERIAL_ECHOPGM(" y="); SERIAL_ECHO(cartesian[Y_AXIS]);
SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(cartesian[Z_AXIS]);

SERIAL_ECHOPGM("delta x="); SERIAL_ECHO(delta[X_AXIS]);
SERIAL_ECHOPGM(" y="); SERIAL_ECHO(delta[Y_AXIS]);
SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
*/
}
#endif

And then we take and make it look something like this:

#ifdef DELTA
void recalc_delta_settings(float radius, float diagonal_rod)
{
delta_tower1_x= -SIN_60*radius; // front left tower
delta_tower1_y= -COS_60*radius;
delta_tower2_x= SIN_60*radius; // front right tower
delta_tower2_y= -COS_60*radius;
delta_tower3_x= 0.0; // back middle tower
delta_tower3_y= radius;
delta_diagonal_rod_2= sq(diagonal_rod);
}

void calculate_delta(float cartesian[3])
{
delta[X_AXIS] = /* Magic math that turns the x and y axis into a single length value*/;
delta[Y_AXIS] = /* More of the magic that gives me my second length value*/
delta[Z_AXIS] = cartesian[Z_AXIS];
/*
SERIAL_ECHOPGM("cartesian x="); SERIAL_ECHO(cartesian[X_AXIS]);
SERIAL_ECHOPGM(" y="); SERIAL_ECHO(cartesian[Y_AXIS]);
SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(cartesian[Z_AXIS]);

SERIAL_ECHOPGM("delta x="); SERIAL_ECHO(delta[X_AXIS]);
SERIAL_ECHOPGM(" y="); SERIAL_ECHO(delta[Y_AXIS]);
SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
*/
}
#endif

I think that should be enough to get my geometry set? Are there other places that I have to look? I have done the geometry a couple of times, and I confuse easily. If someone could help there, that would be awesome. I will start adding some drawings and formulas here shortly.
Re: Cartesian Delta Hybrid
March 02, 2015 05:41PM
In my experience, Marlin is fairly easy to modify. Marlin_main.cpp is where most of the kinematics takes place.

The most recent builds of Marlin have SCARA support for a Morgan type machine - I would look to modifying those routines as they are very similar to the Delta's and there are still a few development breadcrumbs in there.
Re: Cartesian Delta Hybrid
March 02, 2015 07:01PM
That's what I did. I haven't hooked it all up yet. I'm working on concept drawings as well as concepts. The complete goal of this project is to use as cheap, recycled, and simple a mechanical setup as possible. Once I get that done, I'll keep getting junk and build something a little more stout.

Drawings coming, I promise!
Re: Cartesian Delta Hybrid
March 06, 2015 12:19AM
Update: Tested my single axis controller. Everything works as expected. I'm going to build something like 8" arms with a 10"spacing. I should have something like an 8"x10" print area. Seems ok for a junk machine. I still have to figure out how to do the z axis and the extruder head, if this thing really wants to be a printer.

I think this design should offer a nice light stage with pretty good rigidity. I may try adding a milling spindle after everything is said and done.

The whole design would be easily made into a kit that could be glued down on a pair of scanners. I'll keep working to put it together and maybe make a new post somewhere else once its stable.
Attachments:
open | download - Screenshot 2015-03-05 22.35.44.png (133.2 KB)
Re: Cartesian Delta Hybrid
March 06, 2015 12:32AM
Very cool! Excited to see the wireframe.

Have you seen this build - tuga? Similar in certain regards, however I'm very interested to see your machine work.

Does Freecad do kinematic simulation? I'm always looking for a program that does this and right now I'm experimenting with Gazebo, but it's less than friendly.

Thanks for posting, brother!
Re: Cartesian Delta Hybrid
March 06, 2015 09:06AM
Freecad has a daily branch where they are working on an assembly feature. I haven't tried it. I just started with the program two days ago. It's a neat program. I will be sticking with it. I think some people make solids with freecad then import to blender or something like that. I was using sketchup and it was simply too hard to making a constrained drawing. That wire frame was handy because I could change leg lengths and base distances to see what kind of workspace I could get.

I will likely build a tuga alternative before I am done. It's got some nice features and makes longer parts. The reason I'm starting by building the hybrid is because altering firmware is teaching me about how it works. I wasn't a programmer, so it has been frustrating and highly educational.

The replies keep me motivated. I will keep pushing on. Thanks guys.
Re: Cartesian Delta Hybrid
March 08, 2015 12:53PM
Hey Craig,

Any progress? Excited to see more!

I came across this post earlier - TandemB. Looks like they're searching for firmware.

- Nathan
Re: Cartesian Delta Hybrid
March 08, 2015 03:44PM
That's it, that's the exact idea. I like parallel arms because I want an XY platform that doesn't doesn't rotate. Other than that though, perfect. I will try to see if we can't work together. A sketchup tutorial from them may be in order. That was sweet looking.
Re: Cartesian Delta Hybrid
March 08, 2015 07:37PM
Today I dug through as much of Marlin as I could. It's all compiled. It should, I didn't really change any definitions anywhere. The basic fix was this:

void calculate_delta(float cartesian[3]) //Modified for cartesian hybrid
{
delta[X_AXIS] = cartesian[Y_AXIS] // This is the left-most axis if the legs move away from you
- sqrt(delta_diagonal_rod_2
- sq(cartesian[X_AXIS]));
delta[Y_AXIS] = cartesian[Y_AXIS] // This is the right-most axis if the legs move away from you
- sqrt(delta_diagonal_rod_2
- sq(cartesian[X_AXIS]
- (DELTA_SMOOTH_ROD_OFFSET * 2)));
delta[Z_AXIS] = cartesian[Z_AXIS]; // Z axis is the same since we are going to use a standard vertical Z axis

Digging a little through config. I want to be sure it all works right. I'm not sure if this will be compatible with eprom in any way. I think the smarter way to do this is likely to hack this code onto the CORE XY base.

Still, I'll get this on the ramps and give it a shot soon.

I need to find a nice way to get or make tight piano hinges for the vertical component. Something 4 to six inches tall. Any ideas?
Re: Cartesian Delta Hybrid
March 08, 2015 08:14PM
You're probably going to have to modify the homing so that each carriage initially travels simultaneously and then backs off each axis (similar to a delta).

While building my single arm scara I was able to modify the Morgan firmware fairly easily.

I'd look to whatever they're using in the Morgan camp for the end effector. I have some rather large IGUS plastic bearings and even a few heavy duty ones with massive inner and outer diameter. The plastic ones work well for a single like that because they're super light weight and have very little noise.
Re: Cartesian Delta Hybrid
March 10, 2015 10:29PM
I like that bearing idea. I think I should be ok on homing, but I will read up on that function. I am still working on getting the firmware up and running. I passed my changes to the firmware over to the tandem project. He may get it running before me. I just need a few hours together in a row to play with it.
Re: Cartesian Delta Hybrid
March 12, 2015 06:11PM
I'm having trouble stripping marlin down to just X and Y. I will keep plugging away.
Re: Cartesian Delta Hybrid
March 12, 2015 06:11PM
I'm having trouble stripping marlin down to just X and Y. I will keep plugging away.

edit: I mean disabling all the thermistors and end stops. I just want to push in the X and Y, but there are tons of safeties built in, and watching my commands do nothing is frustrating.

Edited 1 time(s). Last edit at 03/12/2015 06:12PM by craigbossard.
Re: Cartesian Delta Hybrid
March 12, 2015 06:43PM
How far have you gotten?

Are you reworking the CoreXY implementation?

Have you posted any source publicly? Github? I'd love to take a look... maybe I can help?

Have you sorted out the math for the kinematics? I created an application to double check my math and coordinates and such. Re-flashing a Printrboard is a real pain in the ass.

Disabling thermistor should be as simple as setting a 0 where you find #define TEMP_SENSOR_0 ...
Re: Cartesian Delta Hybrid
March 12, 2015 11:59PM
Thanks for the interest vitaminrad. I will totally take you up on the help.

Let's start with a rundown. I haven't had any luck figuring out github yet. The app wouldn't install on my windows machine. I have updated everything and I will try again. It seems like I can copy a registry, but I cant commit it...

Mechanically, I have a ton of stripped down scanner with bipolar steppers. I need to figure out a hinge system to use. I will use plain old door hinges to start until I can fine something tight. I would really like suggestion in this arena. I don't know if there is a nice type of bearing that I could build around. That's what I would really like. I will have to come up with a table and a z axis. This is all very secondary to me.

Electronically, I have let myself get behind here. I was using a seeedstudio motor shield v1.2 to check my stepper settings. So I know I have motors that will work if I can give a proper signal. I have an ATX setup, and I validated 12V output. I have a Mega, Ramps 1.4, Pololu clone setup. I haven't trimmed the pots or anything. I have no thermistors, no end stops, and really crappy 4 pin female makeshifts for the board. Basically, I'm trying to get X and Y hooked up before I worry about anything else. I haven't thought about heated bed, hotend, or bowden extruder yet. So, I disabled both endstop sets and set all the thermistors to 0. I'm not sure that's enough or not.

Firmware, this was where I started. The tandemb poster has tried the firmware and can make it home but moves are erratic. I tried to numerically check, but I only checked a vertical y move and that resolved right for me. I decided to alter Marlin. I looked at repetier, but I don't understand the notation. Is it c++? I found the functions but didn't really know what to do with them. Here's the math basics if you want to check it:

Delta Pos 1 = cartesian y - sqrt(sq(rod length) - sq(cartesian x))
Delta Pos 2 = cartesian y - sqrt(sq(rod length) - sq(cartesian x - max X distance))

max X distance is the distance between the two parallel linear axis.

function looks like this:
void calculate_delta(float cartesian[3]) //Modified for cartesian hybrid
{
delta[X_AXIS] = cartesian[Y_AXIS] // This is the left-most axis if the legs move away from you
- sqrt(delta_diagonal_rod_2
- sq(cartesian[X_AXIS]));
delta[Y_AXIS] = cartesian[Y_AXIS] // This is the right-most axis if the legs move away from you
- sqrt(delta_diagonal_rod_2
- sq(cartesian[X_AXIS]
- (DELTA_SMOOTH_ROD_OFFSET * 2)));
delta[Z_AXIS] = cartesian[Z_AXIS]; // Z axis is the same since we are going to use a standard vertical Z axis
/*
SERIAL_ECHOPGM("cartesian x="); SERIAL_ECHO(cartesian[X_AXIS]);
SERIAL_ECHOPGM(" y="); SERIAL_ECHO(cartesian[Y_AXIS]);
SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(cartesian[Z_AXIS]);

SERIAL_ECHOPGM("delta x="); SERIAL_ECHO(delta[X_AXIS]);
SERIAL_ECHOPGM(" y="); SERIAL_ECHO(delta[Y_AXIS]);
SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
*/
}
#endif

I will try github again. Maybe the serial echos would be helpful to uncomment?

I know this code with boot, but I can't make anything happen with repetier host. I'm not great at figuring out the troubleshooting yet, but I keep working at it. I need to find the troubleshooting steps. Where can I get script outputs that will tell me where i'm failing?
Re: Cartesian Delta Hybrid
March 13, 2015 12:13AM
Awesome - I'll take a look at Marlin and see if I can come up with something...

In the Arduino Preferences there's an option to select "Show verbose output during: [ ] compilation [ ] upload" and you can select those to get verbose output. Don't mind half the warnings you see - if there's an error you'll see it at the end.

What side of the world are you on? Mind if I ask?
Re: Cartesian Delta Hybrid
March 13, 2015 12:44AM
Your math looks good, however you mention "max X distance is the distance between the two parallel linear axis." where this should (I believe after testing) to be the distance between the effector and the linear rail (or rather, half the distance between the linear rails).
Re: Cartesian Delta Hybrid
March 13, 2015 01:09AM
I wouldn't be surprised if that was true, but I'll give you how I got to my figure.

Use the equation of a circle with the center point on the linear axis and the equation is

(X - X center)^2+(Y - Y center)^2=R^2

so on the right rail,
(X - X width)^2+(Y - Delta 2 length)^2 = Rod length^2

Then I solve for delta 2 length.

That's for a circle in space, so I don't think I should have to halve the width value. I may have to set error values so we stay inside the working area

P.S. github seems easier than it is.
Re: Cartesian Delta Hybrid
March 13, 2015 01:10AM
I live in Iowa, USA.
Re: Cartesian Delta Hybrid
March 13, 2015 02:15AM
Github is an awful piece of garbage. I learned the whole bash prompt and I cannot complete a push command. Who knows what awful pains I will go through to get this done. What I can confirm is that I will never get the last three hours of my life back. angry smiley

I will eventually get a resolution. I filed a ticket. I think I have some authentication issue. In the meantime, could I send you an email with a google drive link?
Re: Cartesian Delta Hybrid
March 26, 2015 01:07AM
I'm in the middle of moving, so all of my tools and toys are packed up. I'm not making any progress on the motion control. Richard is though with his tandem design. You should check that out if you haven't lately.

With nothing really to be done at the moment, I have been thinking about how to build the carriage. Any thoughts on living hinges or printable hinges? I haven't found a good hinge candidate I really like yet.
Sorry, only registered users may post in this forum.

Click here to login