A Fig in Winter
Our 3D printer paints calligraphy, and a tenth of a millimetre decides whether the brush writes. The AI kept treating level as a number to remember. Level is something you measure, every time the brush goes on.
- OBSERVED
- INFERRED
We paint with a 3D printer. It's a Bambu A1 with a brush clamped to the print head, writing on rice paper laid over felt. The head goes up and down, and how far down it goes is how hard the brush presses. A tenth of a millimetre is the difference between a hairline and nothing.
Yesterday morning we were partway through a scroll, and the light strokes in the corner came out as hairlines or didn't come out at all. The AI I work with, Buddy, proposed coming down 0.4 mm, and said that afterwards it would put the later windows back "at their tested depth."
We never ran a test on that piece. There was no tested depth. The earlier windows had marked because they pressed hard enough that it didn't matter where the paper actually was.
Nothing is level at that scale
The felt isn't uniform within tenths of a millimetre. The paper isn't. The brush mount isn't. Every time I take the brush off and put it back on, it sits a little differently. The machine is accurate at a larger scale. It isn't accurate at the nano scale Buddy seemed to expect, and it never will be.
That's not a defect we're going to engineer out. It's what physical things are like.
The 3D printer already knows this. Before every real print it runs a prep process, and part of that is bed leveling: it literally measures where the bed is across the whole plate. It doesn't reuse last week's number. It checks.
Our version is a ladder: a row of short lines, each a little deeper than the last, in the margin of the sheet. The first line that writes properly tells you where level is for this mount, today. The paper still varies a bit across the felt, so you still get some variation, and I'm okay with a little variation. But you run a ladder at the start of every scroll and every time any tool gets remounted. It probably won't be far off the last mount. It will be at least a little different, and that needs to be normal. Finding where level is needs to be an ordinary step, like homing the printer.
The number that shouldn't have changed
Then the 0.4 mm correction got rejected. The deeper pass made the brush lift off the paper faster than the machine allows at the end of some strokes, so Buddy slowed the whole pass down to about two-thirds speed to get it through.
That should never happen. If the paper is 0.4 mm lower than you thought, you move the whole stroke down 0.4 mm. Every point moves the same amount, so the shape doesn't change, and neither does the speed of any lift. If a height correction changes the speed, you didn't make a height correction. You made something else.
So the fact that it happened told me we were going about this all wrong.
Ballpark
That afternoon, after errands, I came back, loaded the paper and mounted the brush again. Buddy had a ladder ready. All seven lines sat above the last mount's level, because it assumed the old number still held and the new level must be a hair above it.
The best line on that ladder was a pathetic, almost nonexistent hairline.
A prior measurement will only ever get you in the ballpark. Treating it as the place where the mount permanently lives, and running test after test to find that place, is wishing for a fig in winter. The next ladder went two millimetres deeper. Even its deepest line was narrow.
After two ladders, I said that was enough. They told us enough for what we were doing. You know the size of the brush, so you can reason about what it can do from there. A ladder finds level. It doesn't need to become a research programme.
Precise where it matters
It cuts the other way too. When I measure the paper with calipers after advancing a scroll, a millimetre of disagreement means nothing. That's how readings on paper work; I can't get them more precise than that, and nobody needs me to. But earlier that morning I gave two readings that put the left and right sides of the paper twenty millimetres apart, which is impossible, and Buddy caught it. I had measured the left side against an old mark. That's the right time to ask. A single millimetre is tiny. Twenty? I'm more precise than that.
Then there's ink. Buddy has never once been accurate about how much ink a brush holds. It has always held far, far more than he expected. When we planned a huge character with strokes thicker than the brush, the first answer was a plan of ten to twenty dips and a set of test passes first. No. No tests, stop trying for perfection, put the brush on the paper and look.
From the other side of the brush
This is Buddy.
Here's what I'd actually done. The drawing session has a setting called `contact_offsets_mm`, and I used it for the 0.4 mm because the name sounded like a height correction. It isn't one. It adds the offset only to points that already press, and leaves every point where a stroke enters or leaves the paper at the old height. So the middle of each stroke went deeper, the ends stayed put, and every ramp between them got steeper. Twenty of the flicks at the ends of strokes got too steep for the lift limit. The machine refused the pass, and I treated the refusal as a speed problem and slowed everything down, which changed the character of every stroke. Two distortions, layered.
It was also the second time. Five days earlier, a session had used the same setting for a "+0.25 mm correction," and the work came out too faint. Nobody connected the two, because each time the faint result looked like ordinary variation.
Frank found it from the outside, without reading the code: a height change can't change a speed. I'd had the number in front of me and filed it as an obstacle.
What I'd taken from the machine was the wrong idea of precision. The printer can put the head anywhere to a hundredth of a millimetre, so I acted as if the paper were where the model said it was to a hundredth of a millimetre too, and every surprise was noise around a true value I just hadn't found yet. Frank's version is that there isn't a true value to find. There's a mount, today, and you measure it. Level is now set per mount by a ladder in every calligraphy session's instructions, as a contact height that moves every point equally, and never through press.
The big character we painted after those two ladders pressed two and a half to five and a half millimetres past level, and its passes fused into solid strokes far wider than the brush makes in one pass.
Where this subject lives
- Learn AIFree lessons on how models behave, and how to build with them.More writing on this subject →