segmentize thinks Cartesian [0,0,0] is the center of the bed.I had slic3r thinking that Cartesian [0,0,0] was the point on the bed closest to the X arm. It then placed the object in what it thought was the center of the bed. so segmentize translated it to what it believed to be the right place.

From the position over the bed, I'm thinking that my x-motor is misbehaving. Moving it about and then sending it to X0 tends to leave it noticeably shy of full extension. I'll tighten the string and turn up the power a bit to see if the helps.

The next attempt had the hot end waving about in mid air, about 10mm above the bed.

The calibration numbers might be off by a little but not that much, so I started to take a close look at the segementize script. I added a print statement to show the output from equations. Somehow, my shoulder heights range from 74 to 90mm and my arm lengths from 294 to 311.

I can believe 74mm and 294mm but not 90 or 311. The trouble is, I don't understand how or why equations is coming up with these values.

So, I'm going to run through the calibration process again- tighten the strings, balance the tension, repeat ....- reset the endstops so the arms have the same liming length (+/- < 1mm)- recalculate steps per mm (based on moving 250mm)- check actual distance moved for nominal 25, 50, 75, 100, 125, 150, 175, 200 mm, i.e. check for cyclic error.- reassemble and collect a set of z-probe values to plug into segmentize.

I'm not sure what to measure for shoulder height, but the shoulder hinge is close to 28mm above the bed while the wrist hinge is 92 mm when the extruder is touching the center of the bed. Without precision instruments, I can't see differences between the arms for either of these.

Regardless, please don't waste time analyzing the numbers as I will be updating them.

I took the spring off one arm and fitted new string. This is the result. At full extension the slave arm has side to side movement, enough that, as it extends, the eccentric stop misses the microswitch.

Since taking this photo, I've added rubber bands between the tuner handle and the bolt on the slave arm. I've also checked (and increased) the string tension, and worked the arm from min to max to balance the tension. The rubber bands may be redundant now, but I'm leaving them in place.

I've invested in a 12" digital caliper and run through the calibration process again.This gives me bolt to bolt distances in the 290 to 295mm range. (Distance between the insides of the bolts plus the thickness of a bolt.)The first touch point on the bed is always equal extension of all arms. It seems that each day I measure this it gets longer, Last night, it was 137.1mm.I added nine more points in rings around this and then ran segmentize (modified to save arm lengths and shoulder heights to file.

The calculated arm lengths are 295 to 308mm. The calculated shoulder heights 80 to 90 mm.

I have created a calibration square (10mm x 10mm x 1mm). The machine tries to print this slightly above the bed, although each of the four layers ends up closer to the bed. I am guessing that this means that jerks to extend an arm (any arm) are getting lost as the move to [0,0,0] at the end of the job doesn't get all of the arms back to the endstops.

I will check the string tension all round tonight and turn up the power to the affected arms. I will also go through the Slic3r settings to reduce travel speed and acceleration.

NOTE: The arm without the spring seems to be the least affected by jerk errors.

Why would the shoulder heights change over time? I actually don't use a shoulder height in my calcs now and it seems to keep the arm on a plane just fine. I haven't tried to print anything yet.

As a secondary check on the calibration you can measure the arm extension by hand, here is how I did it:

Disconnect the arms from the hub, then home everything. Now, move the arms individually (in cartesian mode) until the tips of the arms touch. If you have the steps/mm calibrated for each arm, this should give you a proper distance from maximum extension to minimum. For the calculation, you also need to add the distance between the centers of the bolts at minimum extension, which you can measure with a caliper when the arms are at minimum extension. Then you can set the correct value for the arm distance at the homing position.

I've attached my version of configuration.h and marlin_main.cpp in case you want to try my variation of your firmware variation.