make a video of the calibration so that we can look at what happens at the
troubled points, is there something wrong with the order that the belts are
being tightened? are they not tight when they are being measured? something
else?
David Lang
make a video of the calibration so that we can look at what happens at the
troubled points, is there something wrong with the order that the belts are
being tightened? are they not tight when they are being measured? something
else?
David Lang
@bar What would you think of saving off the calibration data to the SD card something like this (not tested, c is not my best language, and I’m not totally up on the FluidNC codebase yet.) Then we could kick off calibration, close the browser, come back to it when its all done and load the results then… no reliance on capturing the output in the websocket to do the calibration calculations… just a thought. I’ll get to the UI side next.
#include "../FileStream.h"
...
// function for outputting calibration data in the log line by line like this: {bl:2376.69, br:923.40, tr:1733.87, tl:2801.87},
void Maslow_::print_calibration_data() {
String data = "[";
for (int i = 0; i < pointCount; i++) {
data += "{bl:" + String(calibration_data[2][i]) + ", br:" + String(calibration_data[3][i]) +
", tr:" + String(calibration_data[1][i]) + ", tl:" + String(calibration_data[0][i]) + "},";
//This log_info is used to send the data to the calibration process
//log_info("{bl:" << calibration_data[2][i] << ", br:" << calibration_data[3][i] << ", tr:" << calibration_data[1][i] << ", tl:" << calibration_data[0][i] << "},");
}
data += "]";
String logdata = "CLBM:";
logdata += data;
log_data(logdata.c_str()); //will it print really large strings?
// save to SD
log_data("Writing maslow_cal.json...");
FileStream file("maslow_cal.json", "w");
size_t bytesWritten = file.write(
reinterpret_cast<const uint8_t*>(data.c_str()), data.length() ); // Fixed the syntax for reinterpret_cast
// Check if all bytes were written
if (bytesWritten != data.length()) {
// Handle error
log_data("error writing maslow_cal.json on sd card");
}
log_data("Done.");
}
This already works! I added that last week. If you close the browser mid calibration it will hold onto it and send the data when you reconnect. It’s using the ESP32s internal memory instead of the SD card so it won’t survive a power cycle, but it will hold onto it as long as there is power.
I’m open to writing it to the SD card though if it’s not good enough.
not sure if this is related but I also have a “wide” frame and am getting poor (0.06-0.07) fitness scores. One thing I noticed is the arms run out of travel angle, could that be impacting things?
I think that is probably enough, except for a couple of use-cases. First, where you want to look at the simulation again and didn’t or can’t easily capture the numbers from the output (like they were sent to the tablet but I want to look on my computer. 2. Might also be useful to you to look at someone’s calibration in simulation after they have moved past calibration. you could do internal storage too, but with the ui getting bigger, we are closer to capacity there.
Yea, there is something weird going on with some of us. I notice it does worse on some of the points in terms of the maslow’s movement when tightening the belts. I’ll see if I get another chance to run it if I can video the whole thing to see if it helps…
I would expect that running out of travel angle would cause bad results.
try narrowing your frame anchor points from 12’ to 11’ (that should let the
angles work)
David Lang
Related, I use both my Mac and an Amazon Fire tablet to monitor and control the Maslow. (The Fire stays in the dusty shop and the laptop stays in the house).
I’ve found that if the Maslow has any browser connected it will send the output to it (ie tablet) but if I later connect the laptop (ie to gather logs because something went wrong) I can’t see the history of the logs and only get what is generated after the laptop connects. It would be very helpful for troubleshooting to keep a cache of the generated logs so that if you connect from a new browser you get a historical view of the “recent past”. At minimum the cache would go at least as far as the start of the last user command and ideally much further back in time.
Interesting observation I found when running the simulation UI, while its looping through, I see a point near the center point moving back and forth across the axis line between bl and tr. the rest of the points seem to be stable, but this one jumps back and forth. No idea if that helps at all, but thought I would mention it.
Also getting closer to having another tab on the main ui that plots this stuff (right now, pasting the results into a textbox, but we can hook it up to the calibration process…). I was thinking while working on this that it may be nice to spit out the belt lengths during calibration, so we can plot them as they happen?
might be upper right anchor point is flexing. as I look, that is also moving at the same time…
Love it, that sounds like a great idea!
Very very very preliminary calibration plotting tab… still working on it. (requires pasting into the text area on the bottom to plot.
Working on this branch:
Oh my god you are a hero!
This was 100% my weekend plan.
I’m feeling really good that we’re on to something here
If you want to continue doing my job for me better than I am here’s where I am planning to look next:
/**
* Computes all of the tweaks and summarizes them to move the guess furthest from the center of mass of the lines.
* @param {Array} lines - An array of lines to compute the tweaks for.
* @param {Object} lastGuess - The last guess made by the algorithm.
* @returns {Object} - The updated guess with the furthest tweaks applied.
*/
function computeFurthestFromCenterOfMass(lines, lastGuess){
var tlX = 0;
var tlY = 0;
var trX = 0;
var trY = 0;
var brX = 0;
lines.forEach(line => {
const tweaks = generateTweaks(line);
tlX = tlX + tweaks.tlX;
tlY = tlY + tweaks.tly;
trX = trX + tweaks.trX;
trY = trY + tweaks.trY;
brX = brX + tweaks.brX;
})
tlX = tlX/lines.length;
tlY = tlY/lines.length;
trX = trX/lines.length;
trY = trY/lines.length;
brX = brX/lines.length;
const maxError = Math.max(
Math.abs(tlX),
Math.abs(tlY),
Math.abs(trX),
Math.abs(trY),
Math.abs(brX)
);
var divisor = -10;
if(maxError == Math.abs(tlX)){
//console.log("Move tlY by: " + tlY/divisor);
lastGuess.tl.x = lastGuess.tl.x + tlX/divisor;
}
if(maxError == Math.abs(tlY)){
//console.log("Move tlY by: " + tlY/divisor);
lastGuess.tl.y = lastGuess.tl.y + tlY/divisor;
}
else if(maxError == Math.abs(trX)){
//console.log("Move trX by: " + trX/divisor);
lastGuess.tr.x = lastGuess.tr.x + trX/divisor;
}
else if(maxError == Math.abs(trY)){
//console.log("Move trY by: " + trY/divisor);
lastGuess.tr.y = lastGuess.tr.y + trY/divisor;
}
else if(maxError == Math.abs(brX)){
//console.log("Move brX by: " + brX/divisor);
lastGuess.br.x = lastGuess.br.x + brX/divisor;
}
return lastGuess;
}
This function takes the current guess for where the X and Y locations of each anchor point are and figures out which anchor point is the most off and in which direction. Then it moves that anchor point in the opposite direction a tiny bit.
In theory this should walk us into the right answer, but there’s a bug somewhere which is making it not do that.
HARDLY!!! I took your plotting code and copied it to your already existing calibrationStuff file and a new page, that’s all, lol.
I’m happy to look it over. I am sure I’m not even close to as smart as you are at the math involved. Also, I’m just not sure how much time I’ll have for maslow this weekend. Depends on a few honey do-s I have and how long they take
I had hoped to get this polished a bit more (it already uses “measurements” so I intended to hook it up to the serial to get the calibration on the server side, which I was going to have log each measurement as it records them so I could start hooking this up to be able to draw as the calibration runs too.
I was also thinking this could just be the whole calibration page vs (or in addition to) having the dialog, but I have not really thought all the way through how that might work… maybe the extract/extend/take/calibrate buttons across the bottom could work
ronlawrence3/ESP3D-WEBUI/tree/feature/calibration-tab
ronlawrence3/FluidNC/tree/feature/log-measurements
Still needing a lot of work, my measurements updating along the way didn’t plot, but it did auto-plot at the end of the calibration:
Results still bad though. Got a .1 this time but I did notice on waypoint 3 the bottom right belt did not tighten, and there is an error in the log
Serial Messages
$/axes/x/homing/mpos_mm=0.000
$/axes/x/homing/positive_direction=true
$/axes/y/max_travel_mm=1219.200
$/axes/y/homing/mpos_mm=0.000
$/axes/y/homing/positive_direction=true
[MSG:INFO: Channel auto report interval set to 50 ms]
[GC:G0 G54 G17 G21 G90 G94 M5 M9 T0 F0 S0]
[MSG:INFO: Caution: Unlocked]
[MSG:INFO: Retracting all belts]
[MSG:INFO: Bottom Left pulled tight with offset 0.000]
[MSG:INFO: Top Left pulled tight with offset 0.000]
[MSG:INFO: Top Right pulled tight with offset -0.054]
[MSG:INFO: Bottom Right pulled tight with offset 0.000]
[MSG:INFO: Channel auto report interval set to 50 ms]
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
No heartbeat from machine in 10 seconds. Please check connection.
[MSG:INFO: All belts extended to center position]
MEASUREMENT:{ tl: 1730.17,tr: 1728.31,bl: 1707.01,br: 1751.56,waypoint: 0}
MEASUREMENT:{ tl: 1730.18,tr: 1726.83,bl: 1706.89,br: 1751.56,waypoint: 0}
MEASUREMENT:{ tl: 1730.18,tr: 1726.83,bl: 1707.20,br: 1751.57,waypoint: 0}
MEASUREMENT:{ tl: 1730.18,tr: 1726.83,bl: 1707.33,br: 1751.57,waypoint: 0}
MEASUREMENT:{ tl: 1730.18,tr: 1726.83,bl: 1707.41,br: 1751.57,waypoint: 0}
MEASUREMENT:{ tl: 1730.18,tr: 1726.83,bl: 1707.47,br: 1751.57,waypoint: 0}
MEASUREMENT:{ tl: 1730.18,tr: 1726.83,bl: 1707.50,br: 1751.58,waypoint: 0}
[MSG:INFO: Measured waypoint 0]
[MSG:INFO: Center point deviation: TL: 0.246 TR: 0.174 BL: -18.130 BR: 23.684]
[MSG:ERR: Center point deviation over 15.000mmm, your coordinate system is not accurate, maybe try running calibration again?]
[MSG:INFO: Point: 0 (0, 0)]
[MSG:INFO: Point: 1 (0, -500.000)]
[MSG:INFO: Point: 2 (-500.000, -500.000)]
[MSG:INFO: Point: 3 (-500.000, 500.000)]
[MSG:INFO: Point: 4 (500.000, 500.000)]
[MSG:INFO: Point: 5 (500.000, -500.000)]
MEASUREMENT:{ tl: 1730.07,tr: 1726.76,bl: 1708.24,br: 1753.48,waypoint: 0}
MEASUREMENT:{ tl: 1730.07,tr: 1726.76,bl: 1708.04,br: 1753.48,waypoint: 0}
MEASUREMENT:{ tl: 1730.07,tr: 1726.75,bl: 1708.08,br: 1753.48,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.75,bl: 1708.11,br: 1753.48,waypoint: 0}
MEASUREMENT:{ tl: 1730.07,tr: 1726.75,bl: 1708.14,br: 1753.48,waypoint: 0}
MEASUREMENT:{ tl: 1730.07,tr: 1726.75,bl: 1708.15,br: 1753.48,waypoint: 0}
MEASUREMENT:{ tl: 1730.07,tr: 1726.76,bl: 1708.15,br: 1753.50,waypoint: 0}
[MSG:INFO: Measured waypoint 0]
MEASUREMENT:{ tl: 2112.50,tr: 2109.84,bl: 1389.16,br: 1442.36,waypoint: 1}
MEASUREMENT:{ tl: 2112.46,tr: 2109.70,bl: 1386.86,br: 1443.68,waypoint: 1}
MEASUREMENT:{ tl: 2112.46,tr: 2109.70,bl: 1386.93,br: 1443.77,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.70,bl: 1386.98,br: 1443.80,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.71,bl: 1387.00,br: 1443.81,waypoint: 1}
MEASUREMENT:{ tl: 2112.46,tr: 2109.70,bl: 1387.02,br: 1443.82,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.70,bl: 1387.05,br: 1443.83,waypoint: 1}
[MSG:INFO: Measured waypoint 1]
MEASUREMENT:{ tl: 1868.98,tr: 2433.14,bl: 999.90,br: 1891.80,waypoint: 2}
MEASUREMENT:{ tl: 1868.96,tr: 2433.10,bl: 1000.34,br: 1891.01,waypoint: 2}
MEASUREMENT:{ tl: 1868.96,tr: 2433.09,bl: 1000.50,br: 1891.02,waypoint: 2}
MEASUREMENT:{ tl: 1868.97,tr: 2433.08,bl: 1000.57,br: 1891.02,waypoint: 2}
MEASUREMENT:{ tl: 1868.97,tr: 2433.05,bl: 1000.72,br: 1891.01,waypoint: 2}
MEASUREMENT:{ tl: 1868.97,tr: 2433.05,bl: 1000.82,br: 1891.01,waypoint: 2}
MEASUREMENT:{ tl: 1868.97,tr: 2433.04,bl: 1000.87,br: 1891.00,waypoint: 2}
[MSG:INFO: Measured waypoint 2]
MEASUREMENT:{ tl: 1027.22,tr: 1865.98,bl: 1873.04,br: 2497.00,waypoint: 3}
MEASUREMENT:{ tl: 1027.24,tr: 1865.98,bl: 1873.29,br: 2496.99,waypoint: 3}
MEASUREMENT:{ tl: 1027.25,tr: 1865.99,bl: 1873.40,br: 2496.97,waypoint: 3}
MEASUREMENT:{ tl: 1027.24,tr: 1865.99,bl: 1873.41,br: 2496.97,waypoint: 3}
MEASUREMENT:{ tl: 1027.24,tr: 1865.99,bl: 1873.42,br: 2496.97,waypoint: 3}
MEASUREMENT:{ tl: 1027.25,tr: 1865.99,bl: 1873.44,br: 2496.84,waypoint: 3}
MEASUREMENT:{ tl: 1027.25,tr: 1866.00,bl: 1873.45,br: 2489.06,waypoint: 3}
[MSG:ERR: Measurement error, measurements are not within 2.5 mm of each other, trying again]
[MSG:INFO: Max deviation: 7.784]
[MSG:INFO: Bottom Right 1027.242]
[MSG:INFO: Bottom Right 1027.242]
[MSG:INFO: Bottom Right 1027.253]
[MSG:INFO: Bottom Right 1027.253]
[MSG:INFO: Top Right 1865.988]
[MSG:INFO: Top Right 1865.988]
[MSG:INFO: Top Right 1865.988]
[MSG:INFO: Top Right 1865.999]
[MSG:INFO: Top Left 1873.407]
[MSG:INFO: Top Left 1873.417]
[MSG:INFO: Top Left 1873.439]
[MSG:INFO: Top Left 1873.449]
[MSG:INFO: Bottom Left 2496.969]
[MSG:INFO: Bottom Left 2496.969]
[MSG:INFO: Bottom Left 2496.840]
[MSG:INFO: Bottom Left 2489.057]
MEASUREMENT:{ tl: 1027.27,tr: 1866.00,bl: 1873.44,br: 2497.74,waypoint: 3}
MEASUREMENT:{ tl: 1027.26,tr: 1866.00,bl: 1873.45,br: 2497.71,waypoint: 3}
MEASUREMENT:{ tl: 1027.26,tr: 1865.99,bl: 1873.46,br: 2497.63,waypoint: 3}
MEASUREMENT:{ tl: 1027.26,tr: 1866.00,bl: 1873.47,br: 2497.71,waypoint: 3}
MEASUREMENT:{ tl: 1027.26,tr: 1866.00,bl: 1873.48,br: 2497.66,waypoint: 3}
MEASUREMENT:{ tl: 1027.26,tr: 1866.00,bl: 1873.48,br: 2497.62,waypoint: 3}
MEASUREMENT:{ tl: 1027.27,tr: 1866.00,bl: 1873.48,br: 2497.63,waypoint: 3}
[MSG:INFO: Measured waypoint 3]
MEASUREMENT:{ tl: 1868.97,tr: 1023.04,bl: 2411.46,br: 1892.80,waypoint: 4}
MEASUREMENT:{ tl: 1868.95,tr: 1022.26,bl: 2409.99,br: 1892.69,waypoint: 4}
MEASUREMENT:{ tl: 1868.95,tr: 1022.29,bl: 2410.22,br: 1892.70,waypoint: 4}
MEASUREMENT:{ tl: 1868.95,tr: 1022.29,bl: 2410.35,br: 1892.70,waypoint: 4}
MEASUREMENT:{ tl: 1868.95,tr: 1022.30,bl: 2410.45,br: 1892.69,waypoint: 4}
MEASUREMENT:{ tl: 1868.95,tr: 1022.30,bl: 2410.51,br: 1892.70,waypoint: 4}
MEASUREMENT:{ tl: 1868.95,tr: 1022.30,bl: 2410.55,br: 1892.69,waypoint: 4}
[MSG:INFO: Measured waypoint 4]
MEASUREMENT:{ tl: 2435.38,tr: 1866.17,bl: 1819.69,br: 1047.95,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.05,bl: 1817.77,br: 1049.11,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.05,bl: 1817.87,br: 1049.20,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.06,bl: 1817.94,br: 1049.23,waypoint: 5}
MEASUREMENT:{ tl: 2435.31,tr: 1866.06,bl: 1818.00,br: 1049.25,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.06,bl: 1818.04,br: 1049.26,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.06,bl: 1818.06,br: 1049.27,waypoint: 5}
[MSG:INFO: Measured waypoint 5]
[MSG:INFO: Calibration complete]
CLBM:[{bl:1708.14, br:1753.49, tr:1726.75, tl:1730.07},{bl:1387.01, br:1443.82, tr:2109.70, tl:2112.46},{bl:1000.75, br:1891.01, tr:2433.05, tl:1868.97},{bl:1873.48, br:2497.66, tr:1866.00, tl:1027.27},{bl:2410.47, br:1892.69, tr:1022.30, tl:1868.95},{bl:1818.01, br:1049.25, tr:1866.06, tl:2435.32},]
Computing... This may take several minutes
Fitness: 0.026016354626008563 in 100 cycles
Fitness: 0.05599881404836482 in 200 cycles
Fitness: 0.0769700273885128 in 300 cycles
Fitness: 0.092940936750176 in 400 cycles
Fitness: 0.10090597440663439 in 500 cycles
Fitness: 0.10293255273860233 in 600 cycles
Fitness: 0.10373335757614206 in 700 cycles
Fitness: 0.10405122044702751 in 800 cycles
Fitness: 0.10398592112434846 in 900 cycles
Fitness: 0.10379273405399433 in 1000 cycles
Fitness: 0.10358418942401122 in 1100 cycles
Fitness: 0.10335767571346906 in 1200 cycles
Fitness: 0.10311839314650197 in 1300 cycles
Fitness: 0.10287375683949765 in 1400 cycles
Fitness: 0.10260468201224555 in 1500 cycles
Fitness: 0.10232697204083954 in 1600 cycles
Fitness: 0.1020377563807529 in 1700 cycles
Fitness: 0.10174091888844386 in 1800 cycles
Fitness: 0.10142127699310051 in 1900 cycles
Fitness: 0.1010819093113817 in 2000 cycles
Fitness: 0.10071112880280038 in 2100 cycles
Fitness: 0.10033890280746942 in 2200 cycles
WARNING FITNESS TOO LOW. DO NOT USE THESE CALIBRATION VALUES!
Calibration complete
Calibration values:
Maslow_tlX: -70.6
Maslow_tlY: 2186.0
Maslow_trX: 2610.4
Maslow_trY: 2208.4
Maslow_blX: 0.0
Maslow_blY: 0.0
Maslow_brX: 2633.8
Maslow_brY: 0.0
Probably done until tomorrow afternoon / evening Mountain time. I’ll probably just work on figuring out how to simulate the m4 to test the ui easier (I see there is a python simulator of sorts there), because doing actual calibrations takes some time…
I noticed that fitness peaked at 800 cycles and then decreased after that. How can that be? It sounds like a defect in the algorithm - I would think that it would refuse any new solution that decreases fitness, and stop if it had no new better solution.
Another run tonight (2x2 again, meaning 6 including start and bottom ) No failures of belt retracting this time (of course, I was videoing it!). Still bad fitness (.11), but I’ll run this through Bar’s new algorithm he’s working on and see what it says later tonight. If that does not solve it better, I’ll post the video of this in case it helps…
Plot looked like this:
Serial Messages
[GC:G0 G54 G17 G21 G90 G94 M5 M9 T0 F0 S0]
$/axes/x/max_travel_mm=2438.400
$/axes/x/homing/mpos_mm=0.000
$/axes/x/homing/positive_direction=true
$/axes/y/max_travel_mm=1219.200
$/axes/y/homing/mpos_mm=0.000
$/axes/y/homing/positive_direction=true
[MSG:INFO: Channel auto report interval set to 50 ms]
[GC:G0 G54 G17 G21 G90 G94 M5 M9 T0 F0 S0]
[MSG:INFO: Channel auto report interval set to 50 ms]
[MSG:INFO: Channel auto report interval set to 50 ms]
[MSG:INFO: Set to comply]
[MSG:ERR: Position error on Bottom Right axis exceeded 1mm, error is 36.684mm]
[MSG:ERR: Position error on Top Right axis exceeded 1mm, error is 50.226mm]
[MSG:ERR: Position error on Top Left axis exceeded 1mm, error is -46.832mm]
[MSG:ERR: Position error on Bottom Left axis exceeded 1mm, error is 25.322mm]
[MSG:ERR: Position error on Bottom Right axis exceeded 1mm, error is 713.317mm]
[MSG:ERR: Position error on Top Right axis exceeded 1mm, error is 148.265mm]
[MSG:ERR: Position error on Top Left axis exceeded 1mm, error is 49.741mm]
[MSG:ERR: Position error on Bottom Left axis exceeded 1mm, error is -689.756mm]
[MSG:ERR: Position error on Bottom Right axis exceeded 1mm, error is 558.516mm]
[MSG:ERR: Position error on Top Left axis exceeded 1mm, error is -2.062mm]
[MSG:ERR: Position error on Bottom Left axis exceeded 1mm, error is -771.814mm]
[MSG:ERR: Position error on Bottom Right axis exceeded 1mm, error is 444.975mm]
[MSG:ERR: Position error on Top Left axis exceeded 1mm, error is -5.152mm]
[MSG:ERR: Position error on Bottom Left axis exceeded 1mm, error is -819.463mm]
[MSG:ERR: Position error on Bottom Right axis exceeded 1mm, error is 282.938mm]
[MSG:ERR: Position error on Top Left axis exceeded 1mm, error is 160.379mm]
[MSG:ERR: Position error on Bottom Left axis exceeded 1mm, error is -191.349mm]
[MSG:INFO: Retracting all belts]
[MSG:INFO: Top Left pulled tight with offset 0.043]
[MSG:INFO: Top Right pulled tight with offset 0.086]
[MSG:INFO: Bottom Left pulled tight with offset 2.609]
[MSG:INFO: Bottom Right pulled tight with offset 0.032]
[MSG:INFO: Extending all belts]
[MSG:INFO: All belts extended to center position]
MEASUREMENT:{ tl: 1730.21,tr: 1728.63,bl: 1704.17,br: 1751.15,waypoint: 0}
MEASUREMENT:{ tl: 1730.22,tr: 1726.86,bl: 1703.79,br: 1751.17,waypoint: 0}
MEASUREMENT:{ tl: 1730.22,tr: 1726.85,bl: 1704.23,br: 1751.17,waypoint: 0}
MEASUREMENT:{ tl: 1730.21,tr: 1726.84,bl: 1704.39,br: 1751.18,waypoint: 0}
MEASUREMENT:{ tl: 1730.21,tr: 1726.84,bl: 1704.47,br: 1751.18,waypoint: 0}
MEASUREMENT:{ tl: 1730.22,tr: 1726.84,bl: 1704.53,br: 1751.18,waypoint: 0}
MEASUREMENT:{ tl: 1730.21,tr: 1726.84,bl: 1704.57,br: 1751.18,waypoint: 0}
[MSG:INFO: Measured waypoint 0]
[MSG:INFO: Center point deviation: TL: 0.281 TR: 0.184 BL: -21.067 BR: 23.284]
[MSG:ERR: Center point deviation over 15.000mmm, your coordinate system is not accurate, maybe try running calibration again?]
[MSG:INFO: Point: 0 (0, 0)]
[MSG:INFO: Point: 1 (0, -500.000)]
[MSG:INFO: Point: 2 (-500.000, -500.000)]
[MSG:INFO: Point: 3 (-500.000, 500.000)]
[MSG:INFO: Point: 4 (500.000, 500.000)]
[MSG:INFO: Point: 5 (500.000, -500.000)]
MEASUREMENT:{ tl: 1730.06,tr: 1726.77,bl: 1705.26,br: 1753.09,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.77,bl: 1705.15,br: 1753.09,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.76,bl: 1705.18,br: 1753.09,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.77,bl: 1705.22,br: 1753.09,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.76,bl: 1705.23,br: 1753.09,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.76,bl: 1705.24,br: 1753.09,waypoint: 0}
MEASUREMENT:{ tl: 1730.06,tr: 1726.76,bl: 1705.24,br: 1753.09,waypoint: 0}
[MSG:INFO: Measured waypoint 0]
MEASUREMENT:{ tl: 2112.51,tr: 2109.82,bl: 1387.05,br: 1441.59,waypoint: 1}
MEASUREMENT:{ tl: 2112.48,tr: 2109.65,bl: 1384.95,br: 1442.80,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.65,bl: 1384.99,br: 1442.85,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.66,bl: 1385.01,br: 1442.86,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.66,bl: 1385.02,br: 1442.87,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.66,bl: 1385.04,br: 1442.88,waypoint: 1}
MEASUREMENT:{ tl: 2112.47,tr: 2109.66,bl: 1385.04,br: 1442.89,waypoint: 1}
[MSG:INFO: Measured waypoint 1]
MEASUREMENT:{ tl: 1869.12,tr: 2433.08,bl: 997.59,br: 1890.70,waypoint: 2}
MEASUREMENT:{ tl: 1869.07,tr: 2433.00,bl: 998.37,br: 1888.75,waypoint: 2}
MEASUREMENT:{ tl: 1869.06,tr: 2433.00,bl: 998.58,br: 1888.74,waypoint: 2}
MEASUREMENT:{ tl: 1869.06,tr: 2433.00,bl: 998.68,br: 1888.74,waypoint: 2}
MEASUREMENT:{ tl: 1869.06,tr: 2433.00,bl: 998.77,br: 1888.74,waypoint: 2}
MEASUREMENT:{ tl: 1869.06,tr: 2433.00,bl: 998.85,br: 1888.74,waypoint: 2}
MEASUREMENT:{ tl: 1869.06,tr: 2433.00,bl: 998.93,br: 1888.74,waypoint: 2}
[MSG:INFO: Measured waypoint 2]
MEASUREMENT:{ tl: 1027.56,tr: 1866.04,bl: 1868.68,br: 2455.26,waypoint: 3}
MEASUREMENT:{ tl: 1027.97,tr: 1866.00,bl: 1868.68,br: 2454.73,waypoint: 3}
MEASUREMENT:{ tl: 1028.00,tr: 1866.00,bl: 1868.69,br: 2454.73,waypoint: 3}
MEASUREMENT:{ tl: 1028.02,tr: 1866.00,bl: 1868.70,br: 2454.73,waypoint: 3}
MEASUREMENT:{ tl: 1028.03,tr: 1866.00,bl: 1868.71,br: 2454.73,waypoint: 3}
MEASUREMENT:{ tl: 1028.04,tr: 1866.00,bl: 1868.73,br: 2454.73,waypoint: 3}
MEASUREMENT:{ tl: 1028.04,tr: 1866.00,bl: 1868.74,br: 2454.73,waypoint: 3}
[MSG:INFO: Measured waypoint 3]
MEASUREMENT:{ tl: 1868.99,tr: 1022.93,bl: 2409.82,br: 1892.00,waypoint: 4}
MEASUREMENT:{ tl: 1868.97,tr: 1022.09,bl: 2408.75,br: 1891.97,waypoint: 4}
MEASUREMENT:{ tl: 1868.97,tr: 1022.11,bl: 2408.92,br: 1891.98,waypoint: 4}
MEASUREMENT:{ tl: 1868.97,tr: 1022.12,bl: 2409.03,br: 1891.97,waypoint: 4}
MEASUREMENT:{ tl: 1868.97,tr: 1022.12,bl: 2409.10,br: 1891.97,waypoint: 4}
MEASUREMENT:{ tl: 1868.97,tr: 1022.12,bl: 2409.16,br: 1891.97,waypoint: 4}
MEASUREMENT:{ tl: 1868.97,tr: 1022.12,bl: 2409.20,br: 1891.97,waypoint: 4}
[MSG:INFO: Measured waypoint 4]
MEASUREMENT:{ tl: 2435.40,tr: 1866.18,bl: 1818.04,br: 1047.07,waypoint: 5}
MEASUREMENT:{ tl: 2435.31,tr: 1866.08,bl: 1815.70,br: 1049.70,waypoint: 5}
MEASUREMENT:{ tl: 2435.31,tr: 1866.08,bl: 1815.81,br: 1049.73,waypoint: 5}
MEASUREMENT:{ tl: 2435.33,tr: 1866.10,bl: 1815.88,br: 1049.73,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.10,bl: 1815.96,br: 1049.74,waypoint: 5}
MEASUREMENT:{ tl: 2435.32,tr: 1866.10,bl: 1816.02,br: 1049.76,waypoint: 5}
MEASUREMENT:{ tl: 2435.31,tr: 1866.07,bl: 1816.08,br: 1049.76,waypoint: 5}
[MSG:INFO: Measured waypoint 5]
[MSG:INFO: Calibration complete]
CLBM:[{bl:1705.23, br:1753.09, tr:1726.77, tl:1730.06},{bl:1385.03, br:1442.87, tr:2109.66, tl:2112.47},{bl:998.81, br:1888.74, tr:2433.00, tl:1869.06},{bl:1868.72, br:2454.73, tr:1866.00, tl:1028.03},{bl:2409.12, br:1891.97, tr:1022.12, tl:1868.97},{bl:1815.98, br:1049.75, tr:1866.09, tl:2435.32},]
Computing... This may take several minutes
Fitness: 0.026079213911913136 in 100 cycles
Fitness: 0.06721863913563039 in 200 cycles
Fitness: 0.10415763743824914 in 300 cycles
Fitness: 0.13229801640772856 in 400 cycles
Fitness: 0.14278478958702298 in 500 cycles
Fitness: 0.14541880621131983 in 600 cycles
Fitness: 0.14499497838726746 in 700 cycles
Fitness: 0.14209388035947138 in 800 cycles
Fitness: 0.1397905675728426 in 900 cycles
Fitness: 0.1374245939384849 in 1000 cycles
Fitness: 0.13588340042461466 in 1100 cycles
Fitness: 0.1345991734236244 in 1200 cycles
Fitness: 0.1331351650553753 in 1300 cycles
Fitness: 0.13121021809388267 in 1400 cycles
Fitness: 0.1283589365371215 in 1500 cycles
Fitness: 0.12564003881916333 in 1600 cycles
Fitness: 0.12262129456124941 in 1700 cycles
Fitness: 0.11975624871695555 in 1800 cycles
Fitness: 0.11706095173404397 in 1900 cycles
Fitness: 0.11446570330008546 in 2000 cycles
WARNING FITNESS TOO LOW. DO NOT USE THESE CALIBRATION VALUES!
Calibration complete
Calibration values:
Maslow_tlX: -41.4
Maslow_tlY: 2212.6
Maslow_trX: 2655.9
Maslow_trY: 2148.8
Maslow_blX: 0.0
Maslow_blY: 0.0
Maslow_brX: 2626.3
Maslow_brY: 0.0
@bar your new calculations in calibration-simulation after several clicks of the 1000x button got to .89 then back down to .88 after clicking 1000x again… (see below). I’ll try plugging these in and see if jogging around looks right… I probably won’t be able to do any test cuts for a while to verify anything… I think this is obviously better result than I’ve ever had.
Fitness: 0.0011613974853153313(5.08, 2790.71), (3589.899132552267, 2811.57)
(0, 0), (3592.7759366064274, 0)
Fitness: 0.0011864846163474898(5.08, 2790.71), (3589.899132552267, 2811.57)
(0, 0), (3533.0389292539703, 0)
Fitness: 0.0012129357665878518(5.08, 2790.71), (3532.468716302102, 2811.57)
(0, 0), (3533.0389292539703, 0)
Fitness: 0.0012387732443251728(5.08, 2790.71), (3532.468716302102, 2811.57)
(0, 0), (3476.5190304245702, 0)
Fitness: 0.0012658940716683137(5.08, 2790.71), (3477.976888060862, 2811.57)
(0, 0), (3476.5190304245702, 0)
Fitness: 0.0012924838521786918(5.08, 2790.71), (3477.976888060862, 2811.57)
(0, 0), (3423.003178139103, 0)
Fitness: 0.001320273514902819(5.08, 2790.71), (3426.2359815983027, 2811.57)
(0, 0), (3423.003178139103, 0)
Fitness: 0.0013476174505819413(5.08, 2790.71), (3426.2359815983027, 2811.57)
(0, 0), (3372.293918997576, 0)
Fitness: 0.0013760749251171202(5.08, 2790.71), (3377.0715309479506, 2811.57)
(0, 0), (3372.293918997576, 0)
Fitness: 0.0014041748108921618(5.08, 2790.71), (3377.0715309479506, 2811.57)
(0, 0), (3324.20822719863, 0)
Fitness: 0.0014332989524113039(5.08, 2790.71), (3330.3213275866665, 2811.57)
(0, 0), (3324.20822719863, 0)
Fitness: 0.0014621565741214028(5.08, 2790.71), (3330.3213275866665, 2811.57)
(0, 0), (3278.5764111889935, 0)
Fitness: 0.0014919461740669849(5.08, 2790.71), (3285.8345476305512, 2811.57)
(0, 0), (3278.5764111889935, 0)
Fitness: 0.0015215633488410898(5.08, 2790.71), (3285.8345476305512, 2811.57)
(0, 0), (3235.2410981288494, 0)
Fitness: 0.0015520171914282918(5.08, 2790.71), (3243.4709318318714, 2811.57)
(0, 0), (3235.2410981288494, 0)
Fitness: 0.001582395807755787(5.08, 2790.71), (3243.4709318318714, 2811.57)
(0, 0), (3194.0562961927085, 0)
Fitness: 0.00161351272232649(5.08, 2790.71), (3203.1000249674134, 2811.57)
(0, 0), (3194.0562961927085, 0)
Fitness: 0.0016446547739321824(5.08, 2790.71), (3203.1000249674134, 2811.57)
(0, 0), (3154.8865301446494, 0)
Fitness: 0.0016764336817183952(5.08, 2790.71), (3164.6004634640867, 2811.57)
(0, 0), (3154.8865301446494, 0)
Fitness: 0.0017083413005745437(5.08, 2790.71), (3164.6004634640867, 2811.57)
(0, 0), (3117.606036853062, 0)
Fitness: 0.0017407812623513473(5.08, 2790.71), (3127.859316354293, 2811.57)
(0, 0), (3117.606036853062, 0)
Fitness: 0.0017734567453978267(5.08, 2790.71), (3127.859316354293, 2811.57)
(0, 0), (3082.098030773157, 0)
Fitness: 0.0018065569981344342(5.08, 2790.71), (3092.771468868102, 2811.57)
(0, 0), (3082.098030773157, 0)
Fitness: 0.0018400028334343251(5.08, 2790.71), (3092.771468868102, 2811.57)
(0, 0), (3048.2540199752875, 0)
Fitness: 0.0018737628277676565(5.08, 2790.71), (3059.2390557882495, 2811.57)
(0, 0), (3048.2540199752875, 0)
Fitness: 0.0019079817118434004(5.08, 2790.71), (3059.2390557882495, 2811.57)
(0, 0), (3015.973178596736, 0)
Fitness: 0.0019424011416799348(5.08, 2790.71), (3027.1709268589743, 2811.57)
(0, 0), (3015.973178596736, 0)
Fitness: 0.001977396001914863(5.08, 2790.71), (3027.1709268589743, 2811.57)
(0, 0), (2985.161763987996, 0)
Fitness: 0.0020124748339767854(5.08, 2790.71), (2996.482160115382, 2811.57)
(0, 0), (2985.161763987996, 0)
Fitness: 0.0020482488387251(5.08, 2790.71), (2996.482160115382, 2811.57)
(0, 0), (2955.7325858806093, 0)
Fitness: 0.2618052054577531(-25.792837634709787, 2463.393962499439), (2430.4448423212953, 2421.8165901247216)
(0, 0), (2424.514972137708, 0)
Fitness: 0.6341294939581819(-45.26297212135721, 2444.7374200911527), (2427.7626595521187, 2421.8165901247216)
(0, 0), (2425.2641360780035, 0)
Fitness: 0.8681576116162322(-50.89530951953031, 2438.2810915539126), (2427.298203268704, 2421.8165901247216)
(0, 0), (2426.589495917505, 0)
Fitness: 0.8855992938930187(-52.703079186046885, 2433.9531653144086), (2426.7781530672337, 2421.8165901247216)
(0, 0), (2429.198243072363, 0)
Fitness: 0.8980001648633442(-54.540601831144365, 2432.1650929731386), (2426.6972999076474, 2421.695286105792)
(0, 0), (2429.263599834511, 0)
Fitness: 0.8924657759978002(-54.62242460557307, 2431.6900484775683), (2426.9914463784057, 2421.3201813630467)
(0, 0), (2429.653082928754, 0)
Fitness: 0.8876574153963849(-54.63065526743806, 2431.2403702998868), (2427.3599242493106, 2420.914253297072)
(0, 0), (2430.0703200189187, 0)
@bar - Well, it jogged around fine after the first movement (I sent it diagonally up/left and the bottom belts both went slack). But after I clicked “home”, it pulled everything tight as it went to the middle, and started doing all the right looking movements using the jog buttons. If I get a chance to take a cut this week I’ll post back, but I think your new calculations are a huge improvement for at least my situation.