Holey Triangular Calibration

Thanks! I didn’t know you had to disconnect the arduino to get settings to take; I thought they were live. That could explain some things!

I created a simple file in makercam with an 18" circle with a 12" square in the center.e
with my original calibration settings and then with the new holeyCalibration figures.

The old settings with 1.25 firmware and GC:
The circle was 17 7/8" wide and about 18 1/32" tall.
The square was also under 1/16" in width and over a 1/16" in ht.

The Holey firmware and GC with new calibration numbers from the script.:
The circle was spot on 18" in height and 17 15/16" wide.
The Square looked bang on a true 12 square!

So definitely an improvement, and the best I have seen on my machine to date.

Thanks again


I wonder why the circle was off on width, and the square was not. Could you comment about where on the board the two were cut?

Jamtek, can you also give a quick description of your machine: frame type (top bar?), size (width and height above work piece), angle, sled weight, linkage type?

The cuts where made side by side in the center of the board, the 1.25 firmware on the left and holeyCal on the right . The tops of the circle were about 10 in down from the top of the board. I plan on re-measuring and re-running script again with metric tape measure, and make sure I did not make a goof.

1 Like

@WoodCutter4, I started with Bar’s bolt on frame when I got my kit last year. But after top beam split under one of the motors, I went with a 10 ft superstrut top beam, with a vertical motor offset of 619mm. I have pictures in this post. Up against the wall Frame
The frame is at 15 degree angle, waste board is 3/4 MDF, sled weight is 24.5 lbs.using the ring linkage in a top feed chain configuration.

I hope that helps, cheers.

1 Like

I am trying to create the GUI for Holey Calibration. I am trying to implement the “Pull Machine Parameters from Firmware” part. This is the button, when clicked, requests the machine parameters from the Firmware, and populates them in the GUI. I am searching for how to do this. I believe I will be able figure it out, but I am hoping others will have this information at-hand, and be able to provide it more easily. The parameters are:

  • Distance Between Motors
  • Motor Y Offset
  • Left Chain Tolerance
  • Right Chain Tolerance
  • Quad Kinematics or Triangular Kinematics
  • Chain Over Sprocket vs. Under Sprocket
  • Sled Weight/Chain-Sag Correction
  • Triangular Rotational Radius

The other pieces of this are, how to execute the request, and how the data is stored in GC. These questions primarily relate to the structure of the code. This is a very open-ended question, so I understand it may be difficult to answer. I appreciate any advice/suggestions you can provide.


1 Like

PSA for holey testers: must use python v2.7.
The latest versions available online are not compatible with any GC.

@Joshua Totally my fault for not reading more about GC and python compatibility. Adding that note to the instructions would save newbies like me some time. :slight_smile:

1 Like

@Joshua, I made a tweak to my top beam by adding a shim under the left most support to square things up and and re-ran your HoleyCal NC file with your firmware and GC. This time I laid the board down on a table to take the measurements with my tape measure and machinist ruler and plugged them into your script.

I am happy to report that the cuts improved to under 1/32" of error if any on my square and circle test cut! makercam-test.nc (2.6 KB)
I know feel ready to take on some projects with everything dialed in, thanks again.:grinning:


That’s awesome! Gives me hope… Although now I’m feeling like I need to start over and make a new frame :disappointed:

A button to swap between metric and imperial units would be convenient.

I ran Holey Calibration. I haven’t cut anything yet (have to wait for Tuesday) but I like the numbers it generated.

RunHoleyCalibration.py (1.0 KB)
HoleyCal_Results1.txt (2.2 KB)

Edit: @Joshua, as soon as I entered the new motor distance, I was given this error:
I entered the rest of the settings, unplugged the power and USB to the arduino/shield but it still does this. I thought someone else had a similar issue but I didn’t find anything searching this thread.

I’ll have to redo the “set chain length” Tuesday night.

1 Like

Here is a description of what, why, when about the “Unable to find valid machine position” case

1 Like

This is strange behavior. It looks like it is calculating the sled position as a function of the chain lengths. Usually, it goes the other way: sled position => chain lengths. Because the kinematics.forward is a numeric solution, it could be an issue in that function.

Here is where the code issues that error.

For now, the best we can do is recommend that you return the sled to the home position (0,0) before modifying the calibration in GC. @WoodCutter4, I know this is too late for you now.

Actually, I just looked into the code. There are several reasons the machine will report this message. Below is a screenshot of the code.

  1. If the kinematcs.forward method is unable to converge on a position before KINEMATICSMAXGUESS (200)
  2. If the chain-lengths are greater than sysSettings.chainLength.

I am guessing (2.) is the most likely cause. I would go into “System Settings” and look at your “Chain Length” setting. For some reason, it might be too short. If your chain-length settings are less than the 2000 mm, it will issue this error.

Another thing is the “KINEMATICSMAXGUESS” setting. In the GC kinematics.forward function, it is 5000. However, in the Firmware kinematics.forward function, it is only 200. This seems suspicious, too. If there is no issue with the chain-length, you can go into the code and modify this “KINEMATICSMAXGUESS” setting. I did a quick search. It is located in the file, “/cnc_ctrl_v1/Kinematics.h”, on line 27. To change it, simply replace the “200” with “5000”. Then, save the file, re-compile, re-upload, and try again.

1 Like

Thanks for looking at this, Josh. I replied in @c0depr1sm 's thread that I did in fact home the sled before doing this. It is surprising that this happened by making such a small change in motor distance (from 3613.15 to 3613.77). The actual length of both chains are ~3810mm.

Edit: I will verify sysSettings.chainLength and if it looks good, I’ll update “KINEMATICSMAXGUESS” setting from “200” to “5000” and let you know what happens.

Edit 2: If no one else is having this issue, I must be doing something wrong/in the wrong order. It is quite a bummer to lose so much time when time is limited :frowning:

I haven’t posted on this topic for a while, but I have done some work. I thought it would be good to provide a basic update.

Current Status

Created a branch from schmittjoshc/GroundControlUpdate-master repository, schmittjoshc/GroundControlUpdate-HoleyCalibrationGuiDev.

  • Integrated the widgets into the GC calibration framework
  • Added a widget which chooses between Triangular and Holey Calibration processes.
  • Maintained the Measurements and Calibration widgets from this previous post, 227
  • Removed the “Machine Parameters” widget. Instead, it will leverage the widgets that are already in the calibration process.
  • Added functionality to pull the initial parameters from the existing GC settings class.

Next Steps

  • Need to add comments and guidelines into the widgets.
    • Add things to explain: this is what is happening, this is what you need to do
  • Add a widget to cut test-pattern
  • Add functionality to push the calibration result back into GC and the Firmware

Related to WebControl

At one point, I decided to implement the GUI into base GC, because it was working on my machine. Right now, it is not clear to me whether or not WebControl or GC is the better long-term solution. I didn’t want to make more work for myself than necessary. However, in the code, I have separated the GUI parts from the functional parts as much as possible. This means I am attempting to minimize the amount of work required to integrate the functionality into another GUI. It might be good to understand what python code is re-used in WebControl. This could inform a better organization of the calibration tools.


Is that button implemented?
What firmware to load to test this branch?

1 Like

I don’t think it is test-ready, in terms of the Firmware. Right now, the buttons are in place, and most things are functioning as a GUI. However, there are a few more things needed before the Firmware can be tested.

To answer your question, the firmware is the same schmittjoshc/MaslowCNCFirmwareUpdate-master that I have been working with. There may be a few updates in the MaslowCNC/Firmware-master repository, that need to be merged back in.


For the bravest among you, The GUI could be testable. Everything is in place, and should be functional.

Remaining Issues

  • There is a popup at the end of all the calibration that warns you about exiting early. It shouldn’t be there
  • I haven’t actually tested the cut step (the one step before you enter your measurements). I did my best, but your machine might burn your house down as soon as you click “go”. It should be checked.
  • I haven’t actually re-downloaded the repository onto my machine to make sure it works like the version on my machine. This needs to be checked.

The Links:

How it Works

If you go to “Actions”=>“Calibrate”, it should lead you through the typical calibration. If you choose “Triangular” for your kinematics option, you will eventually make it to a widget that looks like the one below. If you choose “Holey Calibration”, you will go through the Holey Calibration steps. There is some descriptive text which should explain what to do. However, it is terse, and it may not be clear.


So, @gero, it is ready for testing. However, it does still need work.



You cannot offset the cuts from the home, (0,0) center. That means you cannot re-cut on a sheet by simply shifting the home position by a few inches, as was done here. This is an invalid operation. Instead, you will have to shift the stock by a few mm, leaving the home position at (0,0). Below is where I saw this done by @c0depr1sm. I don’t know how significantly this will impact the result, but it is a misalignment (between the calibration’s assumptions and the cut).


I downloaded to my Maslow laptop via TeamViewer this morning and poked around a bit. I didn’t do much with it since I’m out of town. Will get to try it tomorrow afternoon. Thanks for your awesome work!!

1 Like