Maslow Home Maslow Community Garden

List of sources of error


When looking at the firmware calculations, here are those Geometry parameters that seem to matter, and wether thay are missing.

Spoiler: Chain Stretch and Top beam flex corrections seem very important and missing.

Parameter Description Impact on XY coordinates Present in firmware?
motor spacing distance between the center of the gear box shafts 0.5:1 on horizontal, 2:1 on vertical Yes
motors y offset Vertical distance from the gear box shaft (motor) to the top of the workspace nil on horizontal, constant 1:1 on vertical Yes
rotation radius ‘extra’ distance to add to the actual chain length to reach the bit 1:1 proportional on horizontal, 2.5:1variation on vertical Yes
chain sag flexible chain/line will sag under it’s own weight in a catenary curve lower corners get up to 4mm horizontal, 0.6mm vertical error Not registering the real sled and chain weigth. But the parabola approximation is more efficient. although it needs calibration. The firmware CoordinatedMovement() migh need to be rewriten to improve accuracy by breaking long moves into small ones. ( sag correction warps space!)
chain tolerance gap between chain links to allow them to move creates asymetrical horizontal displacement errors. 0.13% error yields up to 4mm horizontal error in the oposite corner, and 4mm vertical error along the workspace top Yes
chain stretch elongation due to chain tension (rubber band effect) 1mm horizontal near the workspace top. 4 mm vertical near the workspace top center. NO but is simple to implement. It would require a chain tension estimation. See the MaslowCNCModelOnOctave
sprocket “12 o’clock” error Is calibrated using Ground Control The error shows up to 1:1 on the horizontal oposite side, and creates a vertical error amplified on the workspace center top. Yes by careful calibration
Chordal error the amount of chain fed out for a given amount of rotation is not a constant as the effective radius of the sprocket changest Neglectable No
top beam flex (front/rear) potential for the top beam to flex forward slightly, changing the effective motor spacing TBD No
top beam flex (up/down) The weight of the sled moves from side to side, changing the downward force on the ends of the beam 0.5:1 Proportional to sled horizontal position, and parabola on vertical up to 1:1 NO would need a parameter and a simple calculation. See the MaslowCNCModelOnOctave
top beam tilt (compared to workpiece) if the top beam is tilted compared to the workpiece, coordinates are wrong TBD No, but seemd small based on a thread dicussion where a pull request did not conclude
top beam tilt (compared to gravity) if the top beam is tilted compared to gravity, tensions on the chains will not be what’s expected, which will throw off the position TBD No, but using a level to install the frame at a level position could be a critical step on frames like the 10 feet top beam for a 4x8 workspace.
triangulation kit flex If the triangulation kit doesn’t keep the end of the chain the exact same distance from the bit, (due to flexing under tension, shifting of joints, or other reasons) this will affect the effective chain length TBD could not yet be measured out of the other uncontrolled parameters No
sled rotation if the sled rotates to the point that the triangulation kit hits a limit, the line of the chain effectivly bends TBD if occurs in normal operation No
triangulation kit sag the triangulation kit is heavier than the same effective length of chain TBD if significant No
encoder error the encoder measures rotation of the sprocket using discrete steps. Movement less than a step size cannot be measured. However this error does not accumulate Neglectable No
backlash If tension on the gearbox moves from being on the sled side to being on the back side, the chain position gets an offset equivalent to the gears play. Neglectable if design prevents reverse of balance No
weight of cords/vacuum hose depending on where the sled is, there is a different amount of weight added to the sled by the cords/vacuum hosts Would create chain stretch and Sag correction change but sag correction is usefull in lower corners only No, but once stretch and sag will be tuned, we might want to see if this item becomes significant.
Loose router fit into router base depending on how loose the clamp is to allow sliding with some types of Z axis mod Would let the router bit deflect under lateral forces during routing No. Carefull mechanical assembly is the way to go

That is why I carefully waxed and adjusted the clamp latch to not hold the router body and yet not let the router body move sideways (affecting the bit position).


From what I’ve done, the only thing missing is compensation for top-beam deflection.

I am trying to think about the best way of setting up some compensation such that we don’t have to set up a tape-measure and attempt to measure ~1 mm deflection for every machine that is built.

Would it be feasible to create a 3D model of some common machine configurations: default frame; default frame with unistrut; default frame with 2x6 header; etc. Use FEA to calculate deflection parameters for each machine configuration. These deflection parameters would then be placed into a data table as a configuration option in GC.

Just an idea. Any thoughts?

  • There is a lot of variation in the characteristics of wood regionally and even more globally. Metal strut has variations between manufacturers as well.
  • None of those would be needed if the frame was built rigid enough to not deflect. That’s not too much to ask of a user.
  • Firmware with too many variables is very much harder to configure and to support.


@blurfl, thanks for the input.

I agree with this.

I don’t agree with this. If the default frame flexes by 2 mm (in any direction), it would take twice the material to bring the deflection to 1 mm, 4x the material to achieve 0.5 mm deflection, and 8x the material to achieve 0.25 mm deflection. I am imagining a frame with 8 2x4’s stacked to make the top-beam; it seems like a lot. Via hardware, it is easy to achieve a small improvement, but difficult to achieve an order-of-magnitude improvement. I have seen videos of high-precision machines where the machine is absolutely massive; I know they are designed that way because of this effect, trying to achieve a minimum level of deflection.

I agree with this.

We need to balance fidelity against difficulty in configuration management.

  • With a few extra calculations in the firmware, and considering flexibility characteristics of only one frame (the default frame), we would probably improve accuracy for 98% of users. The only case when accuracy would be worse is for extremely rigid frames that are >2x more rigid than the default frame.


Why would one use a thicker beam instead of installing bracing targeted to resist the deflections? The original Madlow frame was elegantly designed to provide bracing, but when the top beam became popular bracing wasn’t considered.


Good thought. It is very likely that the current design could be improved through more elegant methods than just adding material.


Yes, and no. The top beam became popular in part because it provided bracing against the forces that are working to pull the motors toward each other. Unfortunately, the community didn’t immediately recognize that the top beam traded one unbraced direction for another.


So I stiffened my top beam. After all, I need the Router to stay on course when getting side forces from the routing bit.


Sub milimeter positioning error? Unequal chain pitch error, chain stretch, chain sag… I think I got the best out of parameter hand tuning. Then interpolating measured errors for residual correction did the rest. et voilà!

Now I just can’t measure position errors with my tape measure anymore, and my router bit goes accross the workspace up to the edges.

Here is what I did:

After stiffening my top beam to make sure gear boxes are really stiff, I wanted to see how chain pitch factor change x,y coordinates accross te workspace. So I ran another set of Octave simulations!
Here is what I found:

a) when chains pitches are over or under estimated in the same proportions, the horizontal center (x=0) is accurate.

So I made a compass with a stick, a screw and a set of wholes to squeeze a pen, then drew on my spoil board to find the center line, then started to adjust my chain pitches to fit horizontally on the line when GC reports (x,y) = (0,0):




Then tuning brings the sled center on the line:

b) When chain pitches bear errors in the same proportion, but one is over- and the other is under-estimated, then the Y error shows an asymetrical error on the top edge and rather flat at the bottom edge. While the X error is rather constant. So I began tweeking the chain pitch to get top edge Y errors symetry and pull X offset error near 0…

After a few hours of trial and error work to characterise my chains, that yielded left chain pitch correction at 0.12% and right chain at 0.03%. Note that I had to extend my chains with another supply because my frame is 11.5 feet wide. So there is likely a batch difference here.

The result on the top edge: ±0.5 mm horizontal spacing between 585 mm marks. And (-585,585) is a the same height as (+585,585) then (-1170,585) at the same height as (1170,585) within ±0.5 mm.

At the end, my overall Y position was generally offset too low and even lower where chain tension is high (top center). But:
a) I was quite sure rotation radius was good at 138.14 as it was carefully checked by the Maslow community.
b) I really measured carefully the left and right sprockets distance, and I would have to change it way out of the tape measure error to fix the top edge.
c) Also, the bottom edge Y positions were quite in line from left to right. They were offset too low, but in line.

So I tweaked the only parameter that pulls hard vertical position on the top edge while not changing it much on the bottom edge: Chain elongation ( stretch) factor. = 8.1E-6 m/m/N. ( Note: 1N = 1kg9.8 = 1lbs2.2*9.8 ) Got an almost straight top edge while not agravating the bottom edge too much.

I then adjusted the sag correction until horizontal spacing was ±0.5mm similar to top. On my 11.5 feet wide motor distance, I set it to 12.

Then I began scoring my spoil board with rows and columns marks at 585 mm intervals from the center (0,0). Took out tape measures from my top beam (an unistrut lying above but in the same plane as the spoil board). And measuring horizontal distances between marks. I got a set of absolute position errors ( as absolute as my top beam distance and my compass work.:slight_smile: ):

Assembly of pictures of the top, middle, bottom center of my spoil board (from the web cam installed over the router bit): Looks like my ruler was a little off the compass crosses near the center. My pen is a 0.5mm ball. The router bit is a 6.35mm cylindrical.

As a result, residual error variation after parameter tuning is in the magnitude of 0.1% horizontal and 0.2% vertical when compared to workspace span.

Note 1: I dare estimate tape measures down to 0,25mm. I got good eyes and apply constant pressure on the tape when measuring from top beam underside.
Note 2: I repeated the scoring and marks measurement a few times to make sure results are repeatable. Then I installed a new spoil board to celebrate!)
Note 3: When setting the chain 0mm position using Ground Control, I make sure to zero my chains length by placing a level on the top chain link an tweaking angle until level says it is horizontal.

At that point, I think these errors may somehow be improved a little more with parameter tuning (note that my firmware parameters are including chain stretch factor). But there is some sort of anomalies in X and Y errors distribution that are not behaving like a combination of parameter effects. So at that level of error variation, I think the most was acheived with parameter tuning.

To go further (sub milimeter error) the next step was to use the error datasets in the firmware and use them to correct the sled destination positions. So did I.

Now I just can’t measure position errors with my tape measure anymore, and my router bit goes accross the workspace up to the edges.

That would not be the end of it though: All these measurements are done at no load on the router bit. So the next step is to hit the plywood with optimised tool paths. And the next field of improvement is tool path generation to deal with the specific MaslowCNC property: chains (or cables ) do sag and can’t push the sled. So beyond the top beam and triangulation links, seeking gantry stiffness is not the holly grail.

Note: I updated my firmware version on github with the latest code including residual corrections. You’re welcome to look at it, namely GCode.cpp (B17, B18, B19) and Kinematics.cpp to getCorrection() applied, setCorrectionGrid() and rreportCorrectionGrid(). I still use Ground Control 1.24 and I have been creative with the firmware eeprom table now at my version 7. For advanced users only: I do not offer end-user support with this alpha prototype :slight_smile: . ( Note: my GC is not handling these new eeprom values, I set top beam deflection and chain stretch factor manually with macros calling $45= and $46=.)

Compensate for inaccuracy in software?
Maslow accuracy - simplification proposal
What is correct chain pitch?
Chain Tolerance Effect on Accuracy
The Zipper Tree Challenge... because
What's Your Chain Sag and Rotational Radius
Thoughts on Chain Sag Calculation

I think I understand what you did here, but it is not clear to me how this is more accurate. I understand that there are methods utilizing compasses, but is there something that justifies the use of a compass vs. alternatives, like measuring the chain-length directly?

I did a quick check against my number. I got 5.18E-6 m/m/N (converted units from lbf to N), based on looking at a plotted elongation specification in The plot I used was zoomed out, and it was difficult to estimate with any precision, but it was approximately correct. Your number (8.1E-6) it is the same order-of-magnitude as mine (5.18E-6), so your calibrated number passes a very rough check.

Not too long ago, I did a calibration, which was very different from yours, but achieved similar results. When I reviewed the distance errors, I concluded they were most likely measurement errors, not machine errors. For example, I attempted to measure to 1/32 inch, which is 0.8 mm, and I likely was not able realistically achieve 1/32 measurement accuracy. I believe that including the physical factors(chain-sag, chain-stretch, chain-tolerance) and a sufficient optimization routine can achieve accuracy that is better than can be measured with a tape-measure.


Hi Jushua,
The compass is a straight wood beam stick, and It seats into a sprocket notch. Is imune to chain stretch, chain tolerance, and tape measures. So it seemed to me that using this to mark the board is very repeatable and might shed a new light on the calibration question.

On the other hand, this drawing construction reveals the line crossing the top beam 90 degrees across the center point. That is a simple task, and a significant result.

I sought this alternate technique to step back and review my MaslowCNC from a different angle. The analysis of sources of errors reveals that this center line is a key to tune chain tolerances. So I wanted to find it without the chains. :slight_smile:

But it is possible that a very small lateral error on this trace may limit chain tolerance correction below necessary tuning accuracy. So I’m currently studying the sensitivity of the drawing error and chain tolerance.


I must admit that the chain stretch was adjusted to flatten the top. And maybe my chain tolerances were slightly low which would require more stretch value to compensate.


We share the same faith :slight_smile:

The knowledge of these factors is key to reach accuracy because unless these parameters are right, the workspace will be warped.

I wanted to find each one, and to do so I analysed the source of errors to find where on the workspace each factor affects only one measurable feature.This way, I could tune one parameter at a time and check the result by looking one feature at a time.
a) chain tolerance affects the lateral shift. (assuming the sled hole is well centered relative to the triagulation kit.) And it is the only parameter I found to affect the horizontal distance at center.
b) chain sag does not pull lateraly on the sled located on the vertical center line. has no noticeable lateral shift until geting close to corners and has most lateral shift on bottom corners. (that is what matematical simulation yields). If chain tolerance is right, and stretch is a good estimate, then sag is the single remaining tuning to get same horizontal distance at top and bottom edges. (assuming frame top beam and workspace is stiff and chain zero was set with a level)
c) chain stretch is the only parameter having a strong “U” pull on the top workspace edge and nearly flat on the bottom edge. (again that is what mathematical simulation yields)

Then, “how much do we need the calibration measurements to be accurate?” is another mathematicaly interesting question. It depends on the sensitivity of the feature to be solved. And the sensitivity tells you how much error on a parameter results from the error on the selected measurement. The mathematical models like I built for the analysis of sources of errors is a good tool to show that relation.

So I resolved my parameters one at a time and checked the best I could to see if there is warp remaining in the workspace. Currently I am searching for a CNC little project that would be unforgiving to warping. A successful make would be a confirmation of sufficient accuracy for this kind of job.


Hey @c0depr1sm, I was thinking about Holey Triangular Calibration, and @Jametek’s test-cuts. I wondered about how the accuracy of the initial 12 O’Clock position of the gears impacted accuracy of the system. I looked at your analysis here. I am trying to understand: what is the error, in deg, relative to the accuracy I thought I was able to achieve with my machine? I see the 1/6th of a tooth. Doing the math with 10 teeth per rotation 1/6th of a tooth is 6 deg. From the hip, I thought I was able to achieve about + or - 3 deg accuracy. That would mean for my machine, I have about half of your modeled inaccuracy as a result of the initial 12 O’Clock position, about 1 mm if you include both. This is not addressed by Holey Triangular Calibration. Not saying it should be.

Nonetheless, this is definitely something that could be improved via a more precise approach on my part.


I updated and brought some details about setting 12OClock correctly before calibration.
There is no need ( no way?) to automate an optimisation of a 12OClock error.
Simply use the proper plastic tool or plywood tool or acrylic tool to zero-it out :slight_smile: