On 4/20/2012 4:52 AM, Erik Christiansen wrote: > On 20.04.12 09:53, Viesturs Lācis wrote: >> I was thinking about Kenneth's idea: >> >> 2012/4/19 Kenneth Lerman<kenneth.ler...@se-ltd.com>: >>> Is anyone here interested in writing a filter that takes as input a >>> tolerance (error band) and a sequence of motions (arcs and line >>> segments) and generates a new sequence of motions that duplicates the >>> original within the error band? It sounds like that would be one way to >>> address the problem. >> Is there a way to create a filter that would convert those small, tiny >> G1s into a 3D Nurbs lines? > ... > >> It does not seem to be problem finding formulas on the web to >> calculate a coordinates of a point on a described line. But reversing >> that seems difficult. > Curve fitting to an arbitrary bunch of points is an approximate art, > AIUI, with tolerance calculation at all points probably taking a bit of > time. Admittedly, I don't know whether nurbs make that faster/slower or > easier/harder to achieve algorithmically. But it does look "non-trivial". > > But isn't the LinuxCNC dictum "Must be able to come to a dead stop > within the current line segment" unnecessary and unhelpful when > following a piecewise linear approximation of a smooth curve? If a curve > of ten thousand linear segments were instead one continuous nurb (or > whatever), then LinuxCNC would not be expected to stop in a thousandth > of an inch at any irrelevant point along the single-segment curve, IIUC. > (That's in fact where the much-desired speed improvement would come from.) The job of the system is to follow a path *exactly* or within specified limits. In the usual case, the limits are zero. That means if there are two non-colinear line segments, a machine with finite acceleration machine *must* stop at the end of the first. This causes two types of problems: 1 -- The system is slower than it could be 2 -- Uneven speed causes undesirable artifacts
Let's consider the alternatives: 1 -- Change the CAM system so that it generates better code. Since there are multiple CAM systems over which we have little control, this us not feasible. 2 -- Modify LinuxCNC so that it can follow a gcode path within a specified tolerance at a higher, more consistent rate. 3 -- Provide a filter (whether integrated with LinuxCNC or completely separate) that convert bad paths to good paths using a specified tolerance. Given a standalone LinuxCNC compatible parser, I suggest that #3, would provide a basis for experimentation and development that could later be more closely integrated into Linux CNC. Regards, Ken > > If it is impossible to increase LinuxCNC's look-ahead, to allow it to > see that it need not radically decelerate, then why not put the > look-ahead in the gcode? Gcode allows Feedrate setting amongst the > "axes" terms in a G1. Would it not be possible to add a Gwhiz gcode to > turn off the stopping-within-a-segment hesitancy, and set a nice fast > initial Feedrate along with the G1. A lower Feedrate setting would then > be inserted prior to any sharp corner or the end of the curve. > > Manual insertion of Feedrate tweaks is immediately available¹. Holding > one's breath waiting for this facility in CAM software is probably > inadvisable. But it is not a difficult task for a gcode filter to do > nothing but look for a G1 with a Gwhiz, then calculate the deceleration > needed to negotiate corners or stop at the end, and bang in a Feedrate > adjustment. (For the end, just add up micro-segment lengths until > there's enough decelerating distance, then insert the lower feedrate. > The gcode filter can look ahead to the end of the longest G1 list of > points, if system RAM permits, but a few hundred segments might do.) > > This is engineering, and we're here to make swarf, with reasonable > accuracy, and optimal speed. I don't think that there's any extra merit > in a complex mathematical solution. So would something akin to the above > let us scoot faster over irregularly curvaceous workpieces? > > Erik > > ¹ OK, inserting far enough before the corner to allow deceleration > distance would entail totting up roughly the length of the trailing > path segments, or allowing plenty. A gcode filter would be a boon. > ------------------------------------------------------------------------------ For Developers, A Lot Can Happen In A Second. Boundary is the first to Know...and Tell You. Monitor Your Applications in Ultra-Fine Resolution. Try it FREE! http://p.sf.net/sfu/Boundary-d2dvs2 _______________________________________________ Emc-users mailing list Emc-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/emc-users