I've attached a video of my process, maybe this will be helpful.
I've added bottom lighting now but the calibration is still failing 6 out of 6 positions, and yet when going into the pipeline editor it seems to work just fine.
The debug images from the calibration don't contain any of the detected circles while the debug images from the editor do, otherwise the images seem identical. (e.g. good lighting, focus)
Any more ideas? It doesn't seem to be an issue with the CV pipeline as even if it isn't perfect it seems unlikely it would fail 6/6 during calibration and then work nearly 100% of the time inside the editor itself?
2020-08-07 14:12:04.140 Scripting TRACE: Scripting.on NozzleCalibration.Starting
2020-08-07 14:12:04.141 ReferenceHead DEBUG: H1.moveToSafeZ(1.0)
2020-08-07 14:12:04.141 ReferenceNozzle DEBUG: N1.moveToSafeZ(1.0)
2020-08-07 14:12:04.142 ReferenceCamera DEBUG: DownLookCam.moveToSafeZ(1.0)
2020-08-07 14:12:04.142 ReferenceActuator DEBUG: vacAct.moveToSafeZ(1.0)
2020-08-07 14:12:04.143 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -540.000000 mm), 1.0)
2020-08-07 14:12:04.143 GcodeDriver DEBUG: sendCommand(G0 E-540.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:04.144 GcodeDriver TRACE: [serial://COM18] >> G0 E-540.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:04.145 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:04.145 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-540.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:04.146 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:04.146 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:06.145 GcodeDriver TRACE: [serial://COM18] << echo:busy: processing
2020-08-07 14:12:06.428 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:06.428 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [echo:busy: processing, ok]
2020-08-07 14:12:06.429 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -540.000000 mm), 1.0)
2020-08-07 14:12:06.429 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]starting measurement; angleStart: -180.0, angleStop: 180.0, angleIncrement: 60.0, angleSubdivisions: 5
2020-08-07 14:12:06.429 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]i: 0, measureAngle: -180.0
2020-08-07 14:12:06.430 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -540.000000 mm), 1.0)
2020-08-07 14:12:06.431 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:06.681 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:06.727 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:06.727 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:06.798 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]i: 1, measureAngle: -120.0
2020-08-07 14:12:06.798 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -480.000000 mm), 1.0)
2020-08-07 14:12:06.798 GcodeDriver DEBUG: sendCommand(G0 E-480.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:06.798 GcodeDriver TRACE: [serial://COM18] >> G0 E-480.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:06.799 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:06.799 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-480.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:06.799 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:06.799 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:07.642 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:07.643 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:07.643 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:07.894 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:07.944 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:07.945 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:08.031 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]i: 2, measureAngle: -60.0
2020-08-07 14:12:08.031 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -420.000000 mm), 1.0)
2020-08-07 14:12:08.031 GcodeDriver DEBUG: sendCommand(G0 E-420.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:08.032 GcodeDriver TRACE: [serial://COM18] >> G0 E-420.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:08.033 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:08.033 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-420.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:08.033 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:08.033 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:08.874 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:08.874 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:08.875 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:09.126 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:09.149 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:09.150 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:09.208 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]i: 3, measureAngle: 0.0
2020-08-07 14:12:09.208 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -360.000000 mm), 1.0)
2020-08-07 14:12:09.208 GcodeDriver DEBUG: sendCommand(G0 E-360.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:09.208 GcodeDriver TRACE: [serial://COM18] >> G0 E-360.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:09.209 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:09.210 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-360.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:09.210 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:09.211 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:10.053 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:10.053 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:10.053 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:10.305 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:10.331 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:10.332 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:10.389 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]i: 4, measureAngle: 60.0
2020-08-07 14:12:10.389 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -300.000000 mm), 1.0)
2020-08-07 14:12:10.389 GcodeDriver DEBUG: sendCommand(G0 E-300.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:10.389 GcodeDriver TRACE: [serial://COM18] >> G0 E-300.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:10.390 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:10.390 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-300.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:10.390 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:10.390 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:11.232 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:11.233 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:11.233 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:11.483 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:11.541 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:11.542 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:11.595 ReferenceNozzleTipCalibration DEBUG: [nozzleTipCalibration]i: 5, measureAngle: 120.0
2020-08-07 14:12:11.595 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -240.000000 mm), 1.0)
2020-08-07 14:12:11.595 GcodeDriver DEBUG: sendCommand(G0 E-240.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:11.595 GcodeDriver TRACE: [serial://COM18] >> G0 E-240.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:11.596 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:11.596 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-240.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:11.596 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:11.597 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:12.437 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:12.438 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:12.438 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:12.689 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:12.738 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:12.739 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:12.808 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -180.000000 mm), 1.0)
2020-08-07 14:12:12.808 GcodeDriver DEBUG: sendCommand(G0 E-180.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:12.808 GcodeDriver TRACE: [serial://COM18] >> G0 E-180.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:12.809 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:12.809 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-180.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:12.809 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:12.809 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:13.652 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:13.652 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:13.653 ReferenceNozzle DEBUG: N1.moveToSafeZ(1.0)
2020-08-07 14:12:13.659 MessageBoxes DEBUG: Error: java.lang.Exception: Too many vision misdetects. Check pipeline and threshold.
2020-08-07 14:12:42.004 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:42.255 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:42.282 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:42.283 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:48.411 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:48.661 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:48.687 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:48.688 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:49.171 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:49.421 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:49.456 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:49.457 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:49.915 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:50.166 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:50.209 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:50.210 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:52.915 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -280.000000 mm), 1.0)
2020-08-07 14:12:52.915 GcodeDriver DEBUG: sendCommand(G0 E-280.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:12:52.915 GcodeDriver TRACE: [serial://COM18] >> G0 E-280.0000 F5000 ; Send standard Gcode move
2020-08-07 14:12:52.916 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:52.916 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-280.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:12:52.916 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:12:52.916 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:12:54.238 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:12:54.239 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:12:55.986 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:56.237 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:56.262 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:56.263 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:56.802 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:57.053 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:57.069 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:57.070 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:57.787 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:58.038 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:58.080 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:58.081 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:12:58.603 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:12:58.853 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:12:58.868 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:12:58.868 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:13:00.418 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -380.000000 mm), 1.0)
2020-08-07 14:13:00.419 GcodeDriver DEBUG: sendCommand(G0 E-380.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:13:00.419 GcodeDriver TRACE: [serial://COM18] >> G0 E-380.0000 F5000 ; Send standard Gcode move
2020-08-07 14:13:00.420 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:13:00.420 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-380.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:13:00.420 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:13:00.420 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:13:01.742 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:13:01.743 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:13:02.914 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:13:03.165 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:13:03.205 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:13:03.206 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:13:03.778 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:13:04.029 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:13:04.049 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:13:04.049 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:13:04.595 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:13:04.846 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:13:04.866 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:13:04.867 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:13:06.282 ReferenceNozzle DEBUG: N1.moveTo((-14.534000, 15.610000, 5.600000, -480.000000 mm), 1.0)
2020-08-07 14:13:06.283 GcodeDriver DEBUG: sendCommand(G0 E-480.0000 F5000 ; Send standard Gcode move, 5000)...
2020-08-07 14:13:06.283 GcodeDriver TRACE: [serial://COM18] >> G0 E-480.0000 F5000 ; Send standard Gcode move
2020-08-07 14:13:06.283 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:13:06.284 GcodeDriver DEBUG: sendCommand(serial://COM18 G0 E-480.0000 F5000 ; Send standard Gcode move, 5000) => [ok]
2020-08-07 14:13:06.284 GcodeDriver DEBUG: sendCommand(M400 ; Wait for moves to complete before returning, 5000)...
2020-08-07 14:13:06.284 GcodeDriver TRACE: [serial://COM18] >> M400 ; Wait for moves to complete before returning
2020-08-07 14:13:07.605 GcodeDriver TRACE: [serial://COM18] << ok
2020-08-07 14:13:07.606 GcodeDriver DEBUG: sendCommand(serial://COM18 M400 ; Wait for moves to complete before returning, 5000) => [ok]
2020-08-07 14:13:08.275 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:13:08.526 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:13:08.572 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:13:08.572 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:13:09.151 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:13:09.402 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:13:09.422 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:13:09.423 Scripting TRACE: Scripting.on Camera.AfterSettle
2020-08-07 14:13:09.891 Scripting TRACE: Scripting.on Camera.BeforeSettle
2020-08-07 14:13:10.142 Scripting TRACE: Scripting.on Camera.BeforeCapture
2020-08-07 14:13:10.167 Scripting TRACE: Scripting.on Camera.AfterCapture
2020-08-07 14:13:10.167 Scripting TRACE: Scripting.on Camera.AfterSettle