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