*Since I finally understand it (or think I do), I thought I’d make a wiki post explaining, at a high level, the current calibration process. This post is not intended to criticize of the current calibration process, just explain it and what assumptions are made. It’s a clever piece of work and is a significant improvement over previous methods.*

### The Calibration Process, In General

The process starts by making two sets of vertical cuts at the top of the board and the bottom of the board. and a horizontal cut made in the top right corner. The cuts are made using predefined coordinates 10-inches in from the sides. The program then calculates how long the chains were when the cuts were made using the same algorithm as used by the controller.

You are then asked to measure the distances between the vertical cuts and the distance between the top of the board and the top of the horizontal cut. The program assumes that the two sets of vertical cuts are perfectly centered (i.e., equal distant from the center of the board). It determines that the vertical center of the two top horizontal cuts based upon the distance you measured to the horizontal cut. If your top beam is tilted, or your chains have worn unevenly, it may make for a bad assumption. It also assumes the bottom vertical cuts are 28-inches below the top vertical cuts. This may also be a bad assumption. Assuming the assumptions are correct, then the program calculates the x,y position of the centers of each of the four vertical cuts.

With the centers of the four vertical cuts and knowledge of how long the chains were to make those for cuts, the program iterates through multiple variations of the following parameters until it figures out the parameters that when the positions of the four cuts are entered into the algorithm, the calculated chain lengths matches those that were determined at the beginning of the process:

- Rotational Radius
- Height of Motors Above Workarea
- Chain Sag Correction Factor

There’s also a Cut34YOffset variable that gets adjusted, but the goal is for this number to be zero since it isn’t used by the algorithm. In essence, it appears to be a fudge factor so that the routine ultimately arrives at a solution. If it’s not zero, then it represents a measure of error or an indicator that an assumption was bad, or both. This number, however, doesn’t get presented to the user at this time.