Accuracy Issues

Definition and the Calibration Model

It’s important to make sure you use the correct language when describing your issues and the definitions of accuracy and precision are often confused.

Accuracy is how close a measured value is to a desired value. You want to cut a 12-inch square and you get an 11-inch square, you accuracy is poor.

Precision is how close multiple measured values are. You want to cut a 12-inch square and do so in 5 passes around the plywood and each cut perfectly overlaps the previous, your precision is excellent.

I found this image that I think really clears it up (taken from :


Maslow has so far been shown to be very precise, regardless of how far off the calibration is. Precision is determined by the hardware and software of the machine (motors, encoders, controller, firmware) and the current generation does an excellent job… even an amazing job for what it is.

Accuracy, however, is controlled by two things, the model of the system built into the firmware and the measured values of the parameters used by the model. This article discusses only the triangular kinematics model based upon usage of the ring kit or one of the linkage kits. We’ve seemed to have moved on from the original quadrilateral system (though a few still use it).

Currently, the model considers the following primary factors that are subject to calibration:

  • Distance between motors
  • Rotational radius (distance from end of chain to the router bit)
  • Chain sag
  • Vertical height of motors above worksurface
  • Chain stretch (in development)
  • Chains pitch tolerance (in development)
  • Sled weight (in development)

The following diagram presents sled positioning and chain properties:

The idea is that to move the router to a specific location, the firmware calculates how much chain to feed out from each side and the math is based upon a triangular relationship between the motors’ gearbox sprockets and the router bit (hence, triangular kinematics)


Draft: Distance Between Motors

Warning… it seems to me this is backwards but its based on what the simulator is showing. So maybe I’m misinterpreting the inputs to the simulator… take this writeup with a grain of salt.

Edit: So I’ve gone back and forth on this and I’m going to make the assumption that I’m interpretting the simulator wrong. When I see error, I naturally think measured value minus actual value, but I think the simulator is asking for actual value minus measured value. So if maslow measured 3000 mm for a distance and actual is 3005 mm, the error is +5 mm, not -5 mm. So I swapped what was below. If I’m totally hosed up on it, I’ll blame it on my head cold.

The Why

To know the length of chains to be fed out, the firmware has to know how far the motors are apart (one side of the triangle). The more accurate this is known, the more accurate the firmware will be in moving the router to where you want it to.

If the controller thinks the motors are further apart than they are, then it will feed out too much chain and will make the vertical distance of your cuts lower, wider, and actually shorter than it should (green line is ideal, red is what happens when controller’s motor spacing value is 50 mm too large):

#used a simulator error of -50.00mm#

If the controller thinks the motors are closer together than they are, it will feed out too little chain and will make the vertical distance of your cuts higher, narrower, and actually longer than it should (controller’s motor spacing value is 50 mm too small)

#used a simulator error of +50.00mm#

How Maslow Calculates Distance Between Motors

One of the calibration steps has the user applying the left chain on the left sprocket and then using the GroundControl software the feed out chain until enough is fed out to reach the right sprocket. The chain is then “pulled tight” and the software equates the amount of chain that was fed out to the distance between sprockets (it adjusts for the two extra links that are applied to the right sprocket, if you were wondering). This method in measuring is dependent upon a three primary factors:

  • The motor mounting points and top beam do not flex
  • The chain is fed out precisely at 2.5-inches (63.5 mm) per sprocket full rotation.
  • Precise knowledge of gear ratios of motors

The original frame design wasn’t the best at keeping the mounting points from flexing. The new frame designs incorporate a rigid top beam that the motors are mounted to and this seems to do a good job. Also, if the mounts are well secured to the top beam, they can rotate under stress and this will cause the distance between motors to change, thereby throwing off the calibration.

As for chain issues, the 10-tooth sprocket for #25 chain should spool out precisely 63.5 mm of chain for every rotation (10 teeth x 6.35 mm chain pitch). However, chain will wear over time, or get damaged, and after a rotation the length of the chain that is spooled out is actually longer than 63.5 mm… how much exactly depends upon the chain. Personally, I measured a difference of about a 10 mm between what I got from using a tape measure (which I assume is accurate) to what Maslow calculated… a 0.27% difference. May not seem like much but if you are trying to reach sub-mm accuracy in your cuts, it will have an effect.

Finally, someone early on discovered that the assumed gear ratios were wrong and that led to distance between motors to be calculated wrong. We think this is fixed… we hope (could it still be off by some small amount?? :man_shrugging: @krkeegan did some extensive testing and it seems right).


Rotational Radius

The rotational radius is the distance from where the chain ends to the center point of the router bit. This distance is needed to calculate the chain length because the firmware calculates the length of chain needed to all the way to the router bit. Since the chain stops short (wherever it attaches to the ring carriage or linkage kit) this distance, called the rotational radius, needs to be backed-out/subtracted.

For the standard ring kit, the approximate rotational radius should be around 140 mm, for @pillagethenburn’s wooden linkage kit it’s approximately 260 mm and for @dlang’s metal linkage kits, it’s approximately 150 mm. The last stage of calibration makes adjustments to this value to try to arrive at a rotational radius such that the computed values of the cuts closely matches the values you measured and entered.

As with measuring distance between motors, there’s a true value and if calibration results in a value significantly different than it, then something is off. For instance, if you calibrate using a ring kit and it calculates a rotational radius of 130 mm, then it’s trying to compensate for an error somewhere else because the true number should be much closer to 140 mm. Check, double check, recheck all measurements… as patriotic as I am, doing thing in metrics really is much easier than trying to do them in inches.

The effect of a miscalculated rotational radius is very similar to the effect of a mismeasured distance between motors (the are, after all, just parts of the triangle).

If the rotational radius used by the firmware is smaller than it actually is, too little of a value will be backed out of the computation and therefore the controller will feed out too much chain. The effect is very similar to the effect of the controller thinking the motors are further apart than they are.

#rotational radius error of +25mm #

If the rotational radius used by the firmware is larger than it actually is, too high of a value will be backed out of the computation and therefore the controller will feed out too little chain. The effect is very similar to the effect of the controller thinking the motors are closer together than they are.

#rotational radius error of -25 mm#


Chain Sag

Chains have a natural tendency to sag due to their own weight, forming what’s called a catenary. The effect of this phenomenon is that the controller needs to feed out a wee bit more chain from each motor to compensate for the fact that the chain is taking a parabolic path rather than a straight line path. As with rotational radius, the last step of the calibration makes adjustments to this value to try to arrive at a correction factor such that the computed values of the cuts closely matches the values you measured and entered.

In reality, chain sag is most pronounced when the chains are long (surprise!) and the correction factor attempts to take this into account. The effect is the greatest in the lower left and right corners of the work area. If the chain sag correction factor is too high, chain lengths spooled out will be too short and the cuts will be “inward” (i.e., closer to the center)

Chain sag correction error of 49

If the chain sag correction factor is too low, chain lengths spooled out will be too long and the cuts will be “outward” (i.e., away from the center)

Chain sag correction error of -49

Keep in mind that other factors can result in errors in the lower corners of the work area, such as the fact there’s really very little force pulling the sled into the corners.


Vertical height of motors above worksurface

This is an easy one, I think. The firmware assumes you’ve centered the work area horizontally, but it needs to know just how high above the work area the motors are. Actually, it needs to know how high above the center of the work area the motors are (to form the triangle) but since you enter the size of the work area, it divides the vertical dimension of the work area in half and then adds the vertical offset that you enter.

It’s not exactly easy to manually measure the vertical distance between the motors and the top of the work area, so during calibration you are asked to enter an approximate number (best guess) and during the last calibration step as it’s making changes to rotational radius and coming up with a chain sag compensation value, it will also adjust the vertical offset value.

The following is based upon my logic and further evidence that I’ve been interpretting the simulator wrong

Unsurprisingly, if the vertical offset used is smaller than the actual value, the firmware will feed out too little chain and therefore everything will be cut higher on the work area than intended. Vertical offset distance 1-inch too low (i.e., 18 inches instead of, say, a true 19 inches) then everything will be cut 1-inch too high. Vertical offset distance too high, then everything will be cut 1-inch too low. If you are trying to take advantage of every square inch of the board, then it matters. If not, no big deal.

Note, a Motor Vertical Error of +50.00 mm in the simulator results in the cuts being high… so to me it seems that the error measurement is actual value minus machine value, not machine value minus actual value


the vertical offset doesn’t get entered into the chain length calculation, it’s strictly a constant offset to the Y position you tell the system you want to move to.

one source of error you didn’t catch was motor mount movement. It’s similar to the frame flexing in it’s effect.

There is a chain tolerance value for each chain that lets you say how much longer the chain is than it should be. We currently make the assumption that the chain error is evenly spread across all the links.

Chain is rated at something like -0 to +0.15% link and as it wears it will get longer (depending on who you look at, 1.5% or 3% are the point where you replace the chain)

if you buy matching chains (added cost), you can get them to guarantee that the chains match within 0.006"/ft (0.05%) or for more money 0.002"/ft (0.0167%)

when we have a nominal chain length of a bit over 3000mm, and error of 0.05%, this translates into a real chain length error of 1.5mm.

In the top center, an error of 1mm effective chain length translates into an error of ~2mm in sled position.

Unfortunately, for the chain length, we have a bunch of different factors:

  1. was the sprocket really at 12 o’clock when you started (if not, this affects how long the maslow thinks the chain is compared to it’s actual length)

    Fixed error

  2. how much extra length is there in the chain per link

    Error proportional to amount of chain fed out

  3. how much sag is there

    Error varies by the amount of chain fed out (more chain, more error), and the tension on the chain (more tension, less error)

  4. error in rotation radius

    Any error in the rotation radius directly translates into effective chain length error. If the triangulation kit flexes, this is a variable amount of error (see the 2:1 potential error)

Unfortunately there is no direct way to separate these various errors.

Some we can measure (for chain tolerance, measure between motors with a tape measure, measure with the left chain, measure with a tape measure while the chain is under tension (to detect if you have flex or motor mount movement), measure with the right chain (doing multiple tape measure measurements will give you a chance to detect/average out the human error)

Then in the calibration, we do a series of cuts at what should be known locations and then experimentally fill in these variables until it finds a ‘good enough’ match.

the cuts locations should be in places that maximize the effect of each type of error (ideally paired with places that minimize that source of error) to give the best resulting calculation

It does get used (and has to get used) in the sense that the yCordOfMotor is set to equal the halfHeight of the machine + the motorOffsetY… The effect is strictly a vertical offset, but in this thread, I was trying to explain the values that get adjusted/entered during calibration.

I mentioned it with flex of the top beam… but I edited the post to add a sentence regarding that specifically.

Thanks for the your insight on chain tolerance. I’ll try to formulate that into a post.

Also, thanks for mentioning the 12 o’clock position issue. I think I need to add that in as well.

Thank you for these insights into the considerations in the software.

It does bring a question to mind. Does it dynamically calculate the sag? The sag of a chain down to the nearest corner versus the over to the opposite side top corner would be significantly different.



The firmware, to the extent I understand it, calculates how much sag to compensate for based upon the location of the sled. So, I believe, the answer is yes… it calculates sag dynamically (in real time).

Thank you

My favorite accuracy vs precision graphic is one like this:


Accuracy is how well are you aimed while precision is how repeatable is your shot.