An emergent spiral

Most conventional CAM algorithms are geometry-based. They create toolpaths that are usually parallel to either the coordinate axes ('zigzag'-paths) or to the part contour (contour-parallel, or spiral paths). One problem with this geometry-based stuff is that you don't take into account the cutting forces. The algorithm has no idea about how much material is removed while the tool is moving. A quick patch is to run a cutting simulation after the path is created and adapt the feedrate for constant material removal rate (MRR).

Another option is to base the toolpath algorithm on a stock model. Then you know the shape of the stock at all times and you can control the MRR or cutter engagement angle. To quickly test how this could work I made a small test in matlab.

The cutter (green circle) is moved around by some rules, and cut's the red pixels as it travels over them. Cut pixels are drawn in blue. The cutter is moved around in discrete steps in some direction, and you're only allowed to cut a certain number of pixels per move. The tricky part is coming up with the rules for our 'lawn-mower' robot. Now I'm using a simple idea: If the past move was made at an angle alfa, try to take the next step in the same direction, but if that's not possible increase alfa until the MRR goes down to some preset value.

This idea will need refinement so that the robot can cope with walls, can do cutting in only one direction (climb vs. conventional) etc. etc., but this seems like a promising and fun start!

5 thoughts on “An emergent spiral”

  1. This is precisely the idea behind the Adaptive Clearing algorithm.

    As you can see, due to the curvature of the stock when it's towards the centre, and the way that the side of the stock becomes much flatter relative to the size of the cutter when the radius is large, the pitch of the spiral should be different.

    The naive implementation of a spiral cut is to write (f*t*sin(t), f*t*cos(t)) for t > 0, which gives a constant pitch of 2*pi*f. But when you do it properly, you get a pitch that's smaller when t is small, and you should have a function like f(t) which starts at 0 and asymptotes to the original value of f.

    I haven't calculated the equation for this (too lazy and I don't have MatLab). Maybe you could, and publish it.

  2. Thanks for your comment Julian. That means I've learned at least something from your website!

    I'll think about your spiral idea - but can't promise anything...

    For machining more complex shapes than circular pockets the cutter movement algorithm need to be much smarter.

    I wonder if you generate some sort of 'guide curves' or similar based on the pocket geometry which the cutter moving algorithm then tries to work with? In other words, you don't simply cut 'blindly' wherever you can find the right engagement angle, but there is some overall plan to the cutter movement.

  3. I am still a complete newbie to all of this, but when thinking about this exact problem I came to suspect that a sensor reading the exact RPM of the spindle (maybe salvagable from a three-contact PC fan) would be quite telling about how much resistance the drill bit is 'feeling'. You could specify an upper and lower RPM and then dynamically change the feedrate accordingly.

  4. Hi Nosforit,

    Yes, the spindle load (and through that the spindle rpm) is certainly a measure or an approximation of the material removal rate (or cutter contact angle).

    Your idea would be to use standard ('stupid') geometry-based toolpaths and then have a 'smart' cnc-control that adapts the feedbrate depending on spindle load. I think that would work and it's certainly doable/testable using EMC.

    The adaptive-clearing CAM approach is the other way around. You have the 'smartness' in the generation of the toolpaths, and use a 'dumb' controller. If your toolpaths are generated for constant material removal rate then you can run them on a 'dumb' controller that doesn't measure spindle load and compensate for it.


Leave a Reply

Your email address will not be published. Required fields are marked *