List of sources of error

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.
1 Like

@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.

1 Like

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.

1 Like

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=.)


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.

1 Like

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.

1 Like

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:


With my participation in this thread, I thought about a couple of additional potential error-sources. At some point, we had categorized the types of errors as being: errors we can model in the firmware and compensate vs. things we cannot. Maybe some of these items don’t belong here, but here they are:

  • Accumulation of error due to missed pulses from the motor-encoder
  • Error from the motor PID controller
    • The motor PID controller attempts to control the length of the chains as a feedback loop, that operates using (requires as an input) an error between the chain-length setpoint and the actual chain-length. What are typical values for these chain-length errors in normal operation? How do those errors manifest as positioning errors on the work-surface?
  • Typical errors due to shrinkage/swelling of the wood on the top-beam due to water adsorption/desorption
  • Typical errors due to shrinkage/swelling of wood vs. steel due to temperature changes

Asking the questions is setting the journey, collecting facts and figuring how much of each is partof the answer is the journey.


When I first looked at the advanced settings, I was surprised to find that we use PID control. I’m very familiar with PID control (use it almost daily for my job) but didn’t expect it to be needed for this type of control. Do other CNC or 3D printers use PID control?

I need to start looking through the code. I’m very interested in the how and why. :slight_smile:


I think the answer is, it depends. I am not a CNC expert, so take this with a grain of salt. CNC machines which use stepper motors don’t require a PID controller. However, some higher end CNC machines use servo motors in coordination with an encoder; these machines require a PID controller to control the servo motor.

The Maslow uses these servo motors because they are cheap, and they have a gearbox which enables them to output substantial torque.

Yeah. Sorry. I feel like a trouble-maker.

Being a troublemaker is part of the journey as well. :grin:

1 Like

one other source of error that wasn’t listed earlier is errors in measuring the distances in the calibration.

the thread In search of accurate measurements has some thoughts on that, and the offshoot talking about tape measure accuracy is likely to be important as well.