Request for new table "Type"

I am designing an oval sand table and was wondering if one of the choices for Type could be ellipse. Before I start building anything I want to be sure I can actually fill in the area. Thanks

Pete

What kind of mechanism are thinking? What size?

With a little extra border, a SCARA could work. Those have trouble being rigid at large sizes. You would have to be careful with the inputs because the firmware won’t limit the mechanism and it can collide with the small size.

Sandify can’t make an ellipse mask. It can do a circular mask and then scale the whole pattern. So you’ll have some more work to do to make patterns.

Thanks for you quick reply Jeff. The size of the drawing oval will be 24" by 15". I am using a theta-rho mechanism that can extend beyond the 15 inches when its in the long end of the ellipse. I figured that if Sandify can’t mask the ellipse, I will have to generate my own patterns to get into those regions outside the central circle within the ellipse. I’m a software engineer, so I have no problem writing a post-processor for the .thr file. But I have no idea how I would remap things in the ellipse ends if generated by Sandify.

If your extension amount was based in firmware on the theta and not on coordinates, then circular patterns would automatically be stretched to fill the ellipse.

Another possibility is to have a mode or feature where the pattern would be clipped to the ellipse, either in firmware or by postprocessing.

I’m pretty good at math, but figuring out where and how to clip is probably beyond me. And it’s not just a simple clip. I think I would have to then plot a line connecting the clipped one to the clipped line that would have returned from the edge of the circle (or maybe it wouldn’t have). I haven’t thought about this enough to understand the implications of clipping (would it make the drawing look bad?).

The clipping code is deceptively complex. Most of the issue is deciding where to add a vertex that clips the line.

Theta rho is already a bit weird though. If you asked it to go from X,Y: 10,10 to X,Y 10,200, and just converted those coordinates to thr, it would draw an arc. It is also a bit tricky because theta can roll over (in fact, it has to).

So sandify computes everything in X,Y. Then it clips to the machine shape (which is a bit of an estimate for a circle and would definitely be more complex for an ellipse). Then it subsamples all of the XY lines to be fine resolution, then converts those 70,000 point to thr, keeping the angles consistent as it rolls over.

That would all still work for you, but there wouldn’t be an ellipse clipping. But I do have a work around. If you make whatever pattern you want and then add these three effects, it should work:

  • Effect to stretch the pattern up vertically, by 24/15. This is the move and resize effect
  • Add a circular mask of a circle
  • Add an effect to stretch it by 15/24. The original pattern should go back its correct aspect ratio, but the mask is squashed

I’m sure there will be weird quirks. For example, there isn’t really a good way to add these effects for every layer, and the resize may have to be computed every time. You could probably have a process where you use someone’s pattern, or save you own, then import it into a layer that just has these effects set up first.

I’m confident you would be able to make some patterns that were 98%+ right. But there are just a few things that would be hard or impossible to actually perfectly fix.

However, I have a lot of confidence that you could get it to work. I am happy to help you, but probably unwilling to change sandify for this edge case until there are more elliptical tables in existance. The SCARA tables were the same way. I started with a post processing script, and eventually got it into sandify when there were a half dozen users or so.

If you’re not making your own firmware, I don’t think the machine will have any ability to protect itself from bogus inputs. So you need to make sure you don’t add any gcode/thr files that will make it crash. If you do write your own firmware, it would be easiest to just break up every move into a ton of small moves and it if ever crosses over the polar equation for your ellipse, clip the max radius on that tiny segment and it will be good enough.

1 Like

I’m kind of looking forward to figuring out how to do it. I totally understand you don’t want to modify Sandify unless there is more of a need.

I’m not writing my own firmware. I’m using a Raspberry Pi to input and post-process the files and then send them to a Grbl board after converting to the appropriate GCode.

For the rho limit checking, I think I will avoid trying to do it in software and instead wrap a conductive strip around the inside of the limiting ellipse and attach a sensor to the end of the magnet arm. Feed the sensor output into the Grbl board and it just might work.

Ok. You should be able to just convert the theta and rho directly, since you still have a polar machine.

Make sure you have a way to clear the offset and home the machine. Both angle and radius. You don’t want it to unwind 100 rotations to get to the 0 angle in the next pattern.

Homing on polar machines is a little tricky, since optical endstops have a significant width. You might be able to trick it with a sequence like:

  • Home to min
  • Move positive by 20 degrees
  • Home to min again.

That should keep the homing position on one edge of the optical endstop.

A regular microswitch will feel the edge, without having to use metal tape or trusting the connection from the wire to the tape.

I think you can easily detect when the thr exceeds the limits in your post processor. Even if you just stopped when that happened, that would save your butt at least once. If you just put in the smaller vertex, some lines would be weird, but that would still be better than crashing.

Keep me posted. It sounds interesting.

I appreciate your observations and recommendations. I hope to have the basic theta-rho mechanics ready next week and will hook up the electronics and we’ll see what happens.

1 Like