Just in time for Christmas, a new update:
https://github.com/626Pilot/Smoothieware
There are a lot of changes. Type G31 to see the new commands - some stuff was moved around.
Probe offsets don't work with depth-mapped Z correction. I got hung up on this for over a week! It's best to use a probe mounted at the perfect center of the effector. I have plans to update my Z-probe to allow mounting like this.
Jimustanguitar was talking about using shimming to solve some of his problems. I originally said I didn't think it would help my problems, but it seems that I was wrong. I have added virtual shimming support as a calibration type, and it does seem to help the annealing routine arrive at slightly better solutions.
The 5x5 grid was probed in a diamond shape before, which meant the diagonal "corners" of the circle were left out of the equation in depth correction (correcting for Z based on a depth map). I have added code that does some chicanery with linear extrapolation to probe at the edge of the circle in rows 2 and 4 (where the diamond shape excludes some area). It seems to be working well so far.
G32 (regular GeneB calibration) is working again.
Upstream changes from the main Smoothieware branch have been merged in, fixing a few minor things including a race condition (that I have never seen).
Per-tower arm length was scrapped. I could never get anything useful to happen with it.
Here's how you use this to get a picture-perfect calibration:
G32
G31 OPQRS
G31 Z to see how it did
You may want to run G31 OPQRS and G31 Z multiple times to see if the simulated annealing algorithm can get better results. (It usually does for me, but maybe it'll get everything super good on your printer the first time.)
G31 A (depth maps the print surface, saves depths to the SD card)
Now comes the annoying part: saving the config. Luckily, the depth mapper saves the depths correctly to the SD card. Unluckily, M500 is FUBAR. (No, it's not my fault.) If you try to save, you'll get a corrupted config-override on the SD card.
Instead of typing M500, type M503. This dumps the config to the Repetier console. Copy and paste it to a text file, and remove all the timestamp garbage from the beginning of each line. Shut the printer down and MOVE THE SD CARD TO A SEPARATE READER. Save the text file to config-override on the SD card, then safely eject it and put it in the printer.
When you boot up the printer, type M503 to verify your settings made it over (just check whether M667 exists at the end of the file) and then type G31 Z. You should get something like this:
Code: Select all
[DM] Current kinematics:
[PK] Arm length: 268.708
[PK] Delta radius: 129.680
[PK] Endstop offsets: {-1.886, -1.431, 0.000}
[PK] Radius offsets (ABC): {0.000, 1.166, 0.781}
[PK] Angle offsets (DEF): {-0.143, 0.636, -1.597}
[PK] Virtual shimming: {1.263, 0.669, -0.385}, vector={0.006, 0.009, 1.000}, d=-0.516, enabled
[PK] Depth (Z) correction: enabled
[BH] Determining the probe-from height.
[PR] Priming probe 5 times.
[BH] Bed height set to 350.813
[PR] Priming probe 5 times.
[DM] Depth to bed surface at center: 2243 steps (0.000 mm)
[PD] 0.033
[PD]
[PD] [0.000] -0.005 0.009 0.009 [0.000]
[PD]
[PD] 0.005 -0.009 0.000 -0.009 0.005
[PD]
[PD] [0.000] -0.005 -0.009 -0.014 [0.000]
[PD]
[PD] -0.009
[PD] Best=0.000, worst=0.033, min=-0.014, max=0.033, mu=-0.000, sigma=0.009, energy=0.010
These numbers are excellent. The absolute worst one is 33 microns, or 1/3 of a layer height when printing at 0.1mm. I can get numbers like this without simulated annealing (depth correction only) but this fixes errors in the XY plane, AND in Z.
CAVEAT - This is experimental. Run it at your own risk.
If you have any questions, DO NOT send me a private message. Ask here instead. That way, everyone sees the answer, and other people can contribute to the discussion.