I don’t have any experience, but I think I know how to solve it. A long time ago there were some people (including Leo) working on CNCing on a rotary axis. Not 4 axis, but X, Z, and A, being the rotational axis. Basically, if your gcode is right, it’s just a units problem. They just connected the Y axis to the rotation stepper and adjusted their steps/mm.
You’re really dealing with an X,Y machine, but X is radius and Y is angle. So don’t bother with any delta/corexy configuration, you’re using Marlin as a regular cartesian machine.
Let’s start with X, because that’s easier. In the thr machines, it’s normalized, so that if you have a 150mm radius table or a 1500mm radius table, they use the same gcode. I think that’s good, but it’s overly complicated and with sandify, I don’t think it will matter. So I would suggest making it just a regular linear axis. 0.0 is at the center, and 250 is 250mm away from that, and I think you can figure out those details. Marlin only reads out to 3 decimal places when parsing gcode (at least that used to be true), so that’s another good reason to make it mm and not (0,1).
The Y axis is a little trickier, because it is completely unbounded, and you’ll have to carefully consider the right units. Since Marlin only reads out to three decimal places, it probably doesn’t make sense to use radians, because 0.001 radians is about 1/6000th of a rotation, which I don’t think is fine enough resolution. If we used degrees, then it would be a resolution of 360,000/rotation, which is very rediculous, and I think that’s OK.
If you had a regular 200 steps/rotation motor, 1/16th microstepping, and a 4:1 reduction for a belt or something, your steps/degree would be:
200 steps/in rotation * 16 microsteps / steps * 4/1 out rotations/in rotations * 1/360 rotation/degrees = 35.55 microsteps/out degrees.
That’s the right order of magnitude. I feel pretty good about that. Other options would make the units something like 0.1radians so it takes 62.8 to make a circle, or even something like 100/rotation. We can make it whatever we want, really. Degrees make it easier to use across multiple machines.
There is a lot that could go wrong with this, mostly because I don’t know if marlin ever has code somewhere with some max size of an axis, because no one ever makes a 3km long printer. Or a -3km long printer.
If you finish that, then wiping the whole thing in a big spiral with 100 loops would be something like this:
G92 X0 Y0
G1 X250 Y36000 F2000
You’ll need to set Y max speeds in max degrees per second and accelerations in degrees per second per second. Feedrates are going to be a little goofy. because a mostly radius move will be in mm/s and a mostly angle move will be in degrees/s. Not ideal, but I think it’s manageable.
If you want to try that out, you can do that with just two motors and a controller.
I can modify sandify to output it’s designs in this format. It will literally take me less than an hour to do that. It would be possible then to convert thr files to this format. The thing that’s missing is converting your alpacas toolchain to this format, which will work when I finally get to making a gcode importer to sandify.
Let me know if that works, and I’ll make some gcode for you to try.