Welcome! Log In Create A New Profile

Advanced

Bed levelling on a Delta system, possible alternative?

Posted by Irish_Steve 
Re: Bed levelling on a Delta system, possible alternative?
October 22, 2013 08:31AM
Jokeri Wrote:
-------------------------------------------------------
> What can I do to fix the symbol problem, other
> than changing those to somethign else?

I do not know. It depends on what kind of maxima version you are using. But symbol names do not matter as long as they are unique. If you are using MS Windows version then you can try to to convert the file from UTF-8 to UTF-16 and load it into maxima after the conversion. It may help. Not sure what utility will do it on MS Windows. On Linux, it would be iconv.


> Do you have any idea how can I get your marlin
> firmware to work with printrboard electronics?
> It gives me serial error amongs other errors when
> i try to compile it. I'll get screenshot of the
> error.

My Marlin version does not really differ much from ErikZalm's version. The only difference is a different version of G29. So if you can get running ErikZalm's version then just use config from his version in mine and it should work. Actually the only thing you need a single point probe command. Based on G-code wiki (http://reprap.org/wiki/G-code#G29-G32:_Bed_probing), G30 will do it too. That indicates there is some other firmware which you can use (and use G30 in it). The only thing you need is single point probe. If you do not have z-probe but have a micrometer dial and are good at math then you can adjust the equations so that they take input from the micrometer dial (then you would not even need a single point probe command).

As for as my branch, I can provide an example config for Arduino Mega + RAMPS. I do not have printrboard.
Re: Bed levelling on a Delta system, possible alternative?
January 12, 2014 05:50AM
Sorry for the really late reply.
Here is the compilation error that I get:

Error pic

Quote
hercek
Jokeri Wrote:
-------------------------------------------------------
> What can I do to fix the symbol problem, other
> than changing those to somethign else?

I do not know. It depends on what kind of maxima version you are using. But symbol names do not matter as long as they are unique. If you are using MS Windows version then you can try to to convert the file from UTF-8 to UTF-16 and load it into maxima after the conversion. It may help. Not sure what utility will do it on MS Windows. On Linux, it would be iconv.


> Do you have any idea how can I get your marlin
> firmware to work with printrboard electronics?
> It gives me serial error amongs other errors when
> i try to compile it. I'll get screenshot of the
> error.

My Marlin version does not really differ much from ErikZalm's version. The only difference is a different version of G29. So if you can get running ErikZalm's version then just use config from his version in mine and it should work. Actually the only thing you need a single point probe command. Based on G-code wiki (http://reprap.org/wiki/G-code#G29-G32:_Bed_probing), G30 will do it too. That indicates there is some other firmware which you can use (and use G30 in it). The only thing you need is single point probe. If you do not have z-probe but have a micrometer dial and are good at math then you can adjust the equations so that they take input from the micrometer dial (then you would not even need a single point probe command).

As for as my branch, I can provide an example config for Arduino Mega + RAMPS. I do not have printrboard.

Edited 1 time(s). Last edit at 01/12/2014 11:51AM by Jokeri.
Re: Bed levelling on a Delta system, possible alternative?
January 12, 2014 09:19AM
Which source code are you trying to compile?
Re: Bed levelling on a Delta system, possible alternative?
January 12, 2014 11:51AM
Quote
hercek
Which source code are you trying to compile?

The one from your git

[github.com]
Re: Bed levelling on a Delta system, possible alternative?
January 12, 2014 02:12PM
OK, I guess you want it because of the single point z-probe, i.e. you have a z-probe hardware mounted on your machine and want G29 not to do the matrix based bed leveling (which is what most Kossel owners use) but only a single point probe. You need this if you want your delta bot as perfectly calibrated as possible (either manually or with the help of the calibration.wxm maxima notebook). This precise calibration is needed only when you care also about precise dimensions in X/Y directions too.

Anyway you need to realize that you need to provide your own Configuration.h and Configuration_adv.h. These also define symbol DELTA for the delta bots. If DELTA is defined then calculate_delta and other undefined symbols in your error messages will be available. You can adapt some of the config files in example_configurations/delta or you can check out my private branch where there is one example delta config included directly in the source.
You also need symbol ENDSTOPS_ONLY_FOR_HOMING undefined (commented out in Configuration_adv.h) for single point z-probe to work.

Getting your firmware configuration right may be quite a chalenge for you if you do not have a clue about programming in C.
Re: Bed levelling on a Delta system, possible alternative?
January 12, 2014 04:38PM
Quote
hercek
OK, I guess you want it because of the single point z-probe, i.e. you have a z-probe hardware mounted on your machine and want G29 not to do the matrix based bed leveling (which is what most Kossel owners use) but only a single point probe. You need this if you want your delta bot as perfectly calibrated as possible (either manually or with the help of the calibration.wxm maxima notebook). This precise calibration is needed only when you care also about precise dimensions in X/Y directions too.

Anyway you need to realize that you need to provide your own Configuration.h and Configuration_adv.h. These also define symbol DELTA for the delta bots. If DELTA is defined then calculate_delta and other undefined symbols in your error messages will be available. You can adapt some of the config files in example_configurations/delta or you can check out my private branch where there is one example delta config included directly in the source.
You also need symbol ENDSTOPS_ONLY_FOR_HOMING undefined (commented out in Configuration_adv.h) for single point z-probe to work.

Getting your firmware configuration right may be quite a chalenge for you if you do not have a clue about programming in C.

I think I've got it now. Months ago when I first tried it, I didnt check the delta settings.
Earlier today when I tried it again, I did check the delta define and it was undefined. I did change that but I think I mixed up the firmwares or something. Maybe I forgot to save it, so when I compiled it I got that error message.
I defined DELTA and undefined ENDSTOPS_ONLY_FOR_HOMING, now it compiled without errors.

Next week I'll try the FW in my kossel mini.

Thanks for the help!
Re: Bed levelling on a Delta system, possible alternative?
October 29, 2015 07:50PM
Quote
hercek
Hopefully it helps. It took me quite a lot of time to add/improve comments.
[github.com]

If you find bugs or devise a better way to do it, let us know.
(I may not be available the next week though.)

I'm having some issues with bad convergence in calibration.wxm, wondering if hercek or anyone might have a solution. I'm using a Rostock Mini derivative.

Basically, it takes a lot of iterations to come up with a solution, but the numbers are all very large and don't make sense. I even had to lower the precision to get it to even get that far (epsilon=0.01). I've attached my wxm file. Any ideas?
Attachments:
open | download - calibration.wxm (13.4 KB)
Re: Bed levelling on a Delta system, possible alternative?
October 30, 2015 05:19AM
Get the latest version from github. Though probably only the comments were improved from the time you downloaded it.

If your printer cannot print/probe significantly behind the line which connects two virtual tower bases then you cannot optimize both diagonal rod length and tower position at once. Notice that most linear delta printers cannot check that far since their bed is too small compared to diagonal rod length. In such a case, measure your diagonal rod length precisely with calipers and optimize only the tower positions and endstops.
See this post to understand why you cannot optimize both tower positions and the diagonal rod length in most cases: [forums.reprap.org]

Your probe should ideally check the distance just below the hotend. I never tested it with probes which check to the side of the hotend but I guess that if the distance to the side is not big and the heatbed is almost perfectly perpendicular to towers then this will not matter much.
Here is an example of a probe which measures properly just below the tip:




The maxima worksheet recommends to do it at least in 8 points or something like that. I currently run it with at least 100 points. The more points the better result since errors in the measurement average out better. I run a script which probes the points in a random order and then I process the log file with grep and vim (takes just a few minutes) to get the proper m list definition which I then paste to the maxima worksheet.
An example probing gcode is attached too. It is for 20x20 cm bed.

Edited 1 time(s). Last edit at 10/30/2015 05:22AM by hercek.
Attachments:
open | download - probe.gcode (2.4 KB)
Re: Bed levelling on a Delta system, possible alternative?
October 30, 2015 05:07PM
Quote
hercek
Get the latest version from github. Though probably only the comments were improved from the time you downloaded it.

If your printer cannot print/probe significantly behind the line which connects two virtual tower bases then you cannot optimize both diagonal rod length and tower position at once. Notice that most linear delta printers cannot check that far since their bed is too small compared to diagonal rod length. In such a case, measure your diagonal rod length precisely with calipers and optimize only the tower positions and endstops.
See this post to understand why you cannot optimize both tower positions and the diagonal rod length in most cases: [forums.reprap.org]

Your probe should ideally check the distance just below the hotend. I never tested it with probes which check to the side of the hotend but I guess that if the distance to the side is not big and the heatbed is almost perfectly perpendicular to towers then this will not matter much.
Here is an example of a probe which measures properly just below the tip:

The maxima worksheet recommends to do it at least in 8 points or something like that. I currently run it with at least 100 points. The more points the better result since errors in the measurement average out better. I run a script which probes the points in a random order and then I process the log file with grep and vim (takes just a few minutes) to get the proper m list definition which I then paste to the maxima worksheet.
An example probing gcode is attached too. It is for 20x20 cm bed.

Thanks for the quick response and ideas. I think I did start working off the latest github version (although I'm not super familiar with github, so I could be mistaken), so no problems there. I'm working on being able to probe behind the line that connects towers, but I'll need to fix an unrelated issue before being able to (the firmware balks at returning the carriage to the endstop when it starts from that low).

Unfortunately, I don't have an actual z-probe to work with, so for now I'm doing this manually using the sheet of paper method, then using G133 in Repetier firmware to measure steps to the offset. As soon as I'm well calibrated, maybe I'll be able to print off a z-probe for myself.

I've been trying to figure out how to make rod length a constant when optimizing as you suggested, but I'm having troubles. What do I need to change in the wxMaxima file to do this? I think I have to replace variable r with constant ir (measured rod length) and remove r as a input variable in FAll but I'm not sure how to implement that.
Re: Bed levelling on a Delta system, possible alternative?
October 30, 2015 07:46PM
Yes, that is right:
RVr :  lbfgs( FAll(ir,xa,ya,xc,α,β,γ), [xa,ya,xc,α,β,γ], [ixa,iya,ixc,0,0,0], 0.05, [1,1]) ;
Play with the parameter 0.05 a bit if needed.
Sorry, only registered users may post in this forum.

Click here to login