Ok, you want to use brass nozzle and some metal foil on the glass bed as a switch. I do not have idea how it would work. I think some way to suck air from below the foil (so that it precisely sticks to the glass) would be required. The problem is that if your measurements of z-heights at the bed level are inacurate then it will be hard to compute delta system parameters from the measured data. I have some experience with this:
* microswitch was used for z-probe (not so sofisticated one as Johann's automatic bed leveling has; ours was just a temporarily attached just bellow nozzle - it is not on the platform at all during normal printing)
* firmware was extended to alow modification of top endstops using an M command and store this in EEPROM
* Johann's z_probe routine (not the rest of his bed leveling code) was called separately from a new G command
* a script was used to call the G command (z_probe) and M114 (get pos)
* the collected data about firmware reported z-height at the time of bed touch were fed to a maxima notebook
* the notebook computed the correct positions for the towers, diagonal rod length, and endstop adjustements
* the bed was leveled with error of about 0.05 mm across whole surface (though I'm not positive about this part since our rostock 3dprinter movement does not seem to be 100% repeatable ... which is strange, but definitely no issues with bed leveling noticed during prints)
* modified Marlin firmware was used
Encountered problems:
* a few cycles of (measure z-heights, compute new parameters in maxima, load firmware with new paramters) were done since the approach did not converge immediately at once
* not all parameters (i.e. tower positions, endstop adjustements, rod length) were computed at once (i.e. within one cycle we first computed endstop adjustements, then tower positions, then rod length) since it looked like it did compute crap for diagonal rod length when everything was computed at once; this might be dute to measurement error and equation instability around solution
* the system must not have slack, otherwise the equation will not be able to give usable results at all; (with slack of about 1 mm in platform movement, about 8 cycles of measure/compute/adjust were needed to achieve leveling with error of 0.18 mm accross full bed
* with system which does not have any noticable slack, we needed 3 cycles of measure/compute/adjust to get bed leveling error to 0.05 mm
* the printer behaved strangely (even when the cariage/rod/platform with no noticable slack was used): when first moved to bed level from top endstop position, it had inidialy some error in z positions (the size was around 0.1mm) which disapeared after few horizontal movements to the sides at the bed level
What was learned:
* it can be done but it may not be as effective as we hoped (we hoped for only one cycle of measure/compute/adjust)
* it should be possible to create software support which would allow user to enter aproximate system parameters (tower positons, diagonal rod length, printer height) and compute the precise parameters using purely z-probe measurements at the heatbed level; for this to work the only reuired condition is that the towers are equidistant (easily achieved by drilling top and bottom plate at once) and all 12 diagonal rods are the same length (should be easy to achieve with a jig)
* maybe math/method needs to be improved
* 3d-printed u-joints are a piece of shit (they wear out too quickly); they definitely can be improved so that they can withstand more but ... just go for some ball joints from an RC-Model shop
* it is nice to have diagonal rod ball joints screwed from both sides (one with left and the other with right handed thread) - then it is easy to make them precise without woriing about tension when glue hardenes
And since you were asking about the centre of coodinate system. You do not need to bother where to put it at all. Let a,b,c be the tower names and xa, xb, xc, ya, yb, yb their coordinates. Then put the coordinate center so that: xb = -xa, yb = ya, yc = -2*ya. This way you need only 3 nubmers to specify tower coordinates and if the system is precise the center will be the same as in the traditional firmware.
* microswitch was used for z-probe (not so sofisticated one as Johann's automatic bed leveling has; ours was just a temporarily attached just bellow nozzle - it is not on the platform at all during normal printing)
* firmware was extended to alow modification of top endstops using an M command and store this in EEPROM
* Johann's z_probe routine (not the rest of his bed leveling code) was called separately from a new G command
* a script was used to call the G command (z_probe) and M114 (get pos)
* the collected data about firmware reported z-height at the time of bed touch were fed to a maxima notebook
* the notebook computed the correct positions for the towers, diagonal rod length, and endstop adjustements
* the bed was leveled with error of about 0.05 mm across whole surface (though I'm not positive about this part since our rostock 3dprinter movement does not seem to be 100% repeatable ... which is strange, but definitely no issues with bed leveling noticed during prints)
* modified Marlin firmware was used
Encountered problems:
* a few cycles of (measure z-heights, compute new parameters in maxima, load firmware with new paramters) were done since the approach did not converge immediately at once
* not all parameters (i.e. tower positions, endstop adjustements, rod length) were computed at once (i.e. within one cycle we first computed endstop adjustements, then tower positions, then rod length) since it looked like it did compute crap for diagonal rod length when everything was computed at once; this might be dute to measurement error and equation instability around solution
* the system must not have slack, otherwise the equation will not be able to give usable results at all; (with slack of about 1 mm in platform movement, about 8 cycles of measure/compute/adjust were needed to achieve leveling with error of 0.18 mm accross full bed
* with system which does not have any noticable slack, we needed 3 cycles of measure/compute/adjust to get bed leveling error to 0.05 mm
* the printer behaved strangely (even when the cariage/rod/platform with no noticable slack was used): when first moved to bed level from top endstop position, it had inidialy some error in z positions (the size was around 0.1mm) which disapeared after few horizontal movements to the sides at the bed level
What was learned:
* it can be done but it may not be as effective as we hoped (we hoped for only one cycle of measure/compute/adjust)
* it should be possible to create software support which would allow user to enter aproximate system parameters (tower positons, diagonal rod length, printer height) and compute the precise parameters using purely z-probe measurements at the heatbed level; for this to work the only reuired condition is that the towers are equidistant (easily achieved by drilling top and bottom plate at once) and all 12 diagonal rods are the same length (should be easy to achieve with a jig)
* maybe math/method needs to be improved
* 3d-printed u-joints are a piece of shit (they wear out too quickly); they definitely can be improved so that they can withstand more but ... just go for some ball joints from an RC-Model shop
* it is nice to have diagonal rod ball joints screwed from both sides (one with left and the other with right handed thread) - then it is easy to make them precise without woriing about tension when glue hardenes
And since you were asking about the centre of coodinate system. You do not need to bother where to put it at all. Let a,b,c be the tower names and xa, xb, xc, ya, yb, yb their coordinates. Then put the coordinate center so that: xb = -xa, yb = ya, yc = -2*ya. This way you need only 3 nubmers to specify tower coordinates and if the system is precise the center will be the same as in the traditional firmware.