# List of sources of error

does it sag in the middle? moving 4mm vertically would require the ring bend
~2mm.

I would bet that you are off in some other factor, and since we don’t properly
handle chain stretch, that would be my best guess for the reason of a sag in the
top center.

But the purpose of this topic was to try to document these error sources and get
people to consider them. I don’t claim to have all the answers.

I’m not sure it’s that simple. What is happening is that your striaght line from
the sprocket to the bit now is a triangle, with your chin as one leg, the
rotation radius being the second leg, and the base between them being the actual
distance. It’s no longer a catenary calculation.

It’s a reasons to keep the triangulation kit components light. I don’t think
this is a big factor.

It’s also a reason to keep the weight so that the sled does not rotate under
motor torque.
k

Here I propose an update:

First, let’s split the error sources in two categories:
a) Medium based: Errors caused by sled friction and non-uniform material properties
b) Geometry based: Errors caused by machine’s shape, dimensions and mechanical elasticity.

The hypothesis is : If both error types were exactly modeled into the firmware control, and if the control had no limit on generating sled movement then cuts could be perfect.

Fixing exactly a)

1. Would need a deep maping of the material, taking into account new grooves, sled surface properties, vacuum cleaner pull effect, etc.
2. Might be impossible, but to mitigate this to some extent, wax the sled, round the sled edges, use a uniform material, limit the vacuum pull by opening some air opening intakes if needed… (what else?)

To fix b)

1. We give to a) the case where forces are applied by the Medium. So here we consider the sled is frictionless and the router bit cuts with no force, and the sled is idle. Hence we say that we “omit kinematics details”. (you’ll see that in the graphs titles below).
2. Then we need measurements of the CNC geometry parameters such as components size, weight, and flex. This seems more constant and predictable. To get there, some parameters might be rather constant from one Maslow to the other (like sprocket size), otherwise we need good measuring techniques for the others. But just the important ones.
3. Finding which parameters are important is one task.
4. Measuring them right is the purpose of some initiatives like the promising Holey Triangular Calibration.

To sort this out, let’s re-list each error source showing the category (Medium or Geometry), then for Geometry errors, draw a simulation of impact on the sled XY position.

### Note: The simulator is FOSS under the GNU licence here for you to play with it

Error Description Simulation Condition Error Type Simulation Graph
motor spacing distance between the center of the gear box shafts [motors] Control parameter underestimates by 2.5mm ref:cheatLRDistance = 2.5 Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
y offset Vertical distance from the gear box shaft (motor) to the top of the workspace Control parameter overestimates by 2.5mm ref:cheatLRMotors YOffsetAboveWorkSurface = 2.5 Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
rotation radius ‘extra’ distance to add to the actual chain length to reach the bit Control parameter is 2.5mm underestimated (too short) ref: cheatRotationRadius = 2.5 Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
chain sag flexible chain/line will sag under it’s own weight in a catenary curve compare ideal weighless chains with sagging chains ref: cheatChainDensity = 1E-6 Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
chain tolerance gap between chain links to allow them to move Control parameter for the average left chain links length is overestimated by 0.13% ref: cheatleftChain LengthCorrectionRatio = 0.0013 Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
chain stretch elongation due to chain tension (rubber band effect) Compare 2.6mm / m elongation at 640N with a perfectly rigid chain. ref: cheatleftChainLength CorrectionRatio = 0 Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
sprocket “12 o’clock” error the chain was calibrated starting with a link positioned on the sprocket with one pin not exactly positioned at 12 o’clock. Makes the chain length steadily longer or shorter Control parameter on the chain position is 1mm underestimated (roughly 1/6 of a tooth distance.) ref: cheatLeftChainLength =1 mm Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
chordal action the amount of chain fed out for a given amount of rotation is not a constant as the effective radius of the sprocket changes for a 10 tooth sprocket, see below Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
sprocket-chain departure angle since the chain leaves the sprocket at a different angle depending on where the sled is, the top corner of the triangle moves Not simulated Geometry
Error Description Simulation Condition Error Type Simulation Graph
top beam flex (front/rear) since the chains are not pulling perfectly aligned with the center of the top beam, there is the potential for the top beam to flex forward slightly, changing the effective motor spacing Having no realistic values yet, not Simulated (My MaslowCNC shows very little bow even when using the laser pointer) Geometry
Error Description Simulation Condition Error Type Simulation Graph
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 Control parameter ignores the 2.9mm max beam flex when sled is right under the motor gear box shaft. ref: cheatmaxTopBeam TipFlexAndTwist = -2.9 mm (canceling out the model value) Geometry See below

Error Description Simulation Condition Error Type Simulation Graph
top beam tilt (compared to workpiece) if the top beam is tilted compared to the workpiece, coordinates are wrong Not simulated yet Geometry
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 Not simulated yet Geometry
Error Description Simulation Condition Error Type Simulation Graph
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 Having no realistic values, could not simulate yet Geometry
sled rotation if the sled rotates to the point that the triangulation kit hits a limit, the line of the chain effectivly bends Not simulated More of design issue?
triangulation kit sag the triangulation kit is heavier than the same effective length of chain Not yet simulated. If the whole sled including parts of the triangulation kit is weighted and accounted into the sag calculations, it seems a marginal error. Geometry
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 Not simulated. analysis shows that error <0.008mm on chain length with the current 8k steps/rotation and a 10 tooth sprocket. Geometry
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. Simulation not yet done. Depends on the mecanism used to reduce the gearbox rotation load Geometry
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 Simulation not yet done. However, a 10kg sled would see an increase of less than 10%, which --in a first approximation-- would change sag error by as much. Geometry See sag simulation
3 Likes

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

2 Likes

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

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

4 Likes

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 http://tsubaki.ca/pdf/library/the_Complete_guide_to_chain.pdf. 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.

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

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.

2 Likes

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

2 Likes

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
2 Likes

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

2 Likes