I was in contact with Arthur and Daniel regarding four axes support
for smoothie for a hotwire cutting machine. But this group is maybe a
better place to discuss ;-)
The historical/technical background:
I'm a model (plane) builder and i try to build a cnc hotwire cutting
machine to cut polystyrene. The machine consists of two independent
portals (x/y-axes and a/b-axes). Between these portals is a hot wire
mounted. The following movie shows a machine - not mine - "in action":
http://www.youtube.com/watch?v=JR83M_k4yro&feature=related
As you can see, performance is not a issue ;-)
In my case, g-code is generated with Profili2 [1] and my first
intention was to use EMC2 [2] to control the machine (i use it with my
milling machines). But then i found grbl [3] and smoothie. Smoothie
looks really promising due to it's flexible design, but it needs to be
extended to support four axes - or to be more exact: it needs to be
extended to support two parallel cartesian spaces (each with two or
more axes), which allow independent moves in each cartesian spaces,
but are coordinated in time.
As Arthur wrote in his mail:
> That's what I was shooting for. Would work well if implemented correctly.
> That's part of why I implemented the Player module and the take()/release()
> mechanism.
> Basically we would have two MotionSystem objects, both having it's own
> robot/planner/stepper, but both sharing the same Player object.
> Every time a new gcode is received, a new Block is created, whatever
> happens, and and then the combination of that gcode and that empty block is
> passed to both motionsystems.
> If they have something to do with that block they happen their respective
> axis movements to it, adjust the speen, taking into consideration that if a
> speed has already been set by the other module they shouldn't go faster than
> that.
> And then we get to the crazy part : both must do their planner calculations
> ( compute acceleration/deceleration curves ) in a way where both end up with
> the exact same absolute ( incl. acc/dec ) duration for each move.
Any ideas, how to solve this issue are welcome :-)
A sample g-code file can be found at [4].
Kind regards,
Stefan
[1] Profili2: http://www.profili2.com
[2] EMC2: http://www.linuxcnc.org
[3] grbl: https://github.com/simen/grbl
[4] Sample g-code file: http://pastebin.com/dMwi1UWn
Kind Regards,
Daniel
That's not the problem. Smoothie can very easily handle a 4th axis ( for example the extruder on a 3d printer, or the C axis on a pick and place ), but here we are not talking about a 4th axis ( that does not infer on the movement of the machine ), but two separate 2-axis robots that must be synchronised.
Meaning that they must share the same queue of movements, and the planning calculations must take into consideration the acceleration/deceleration limits of both robots.
Fortunately Smoothie is designed in a way where this is made easier than with other firmwares, but still it's a long road to implement it, and a lot of work.
The only difficult part here is the planner and I'm beginning to see a bit better how that would work.
Cheers !
That's not the problem. Smoothie can very easily handle a 4th axis ( for example the extruder on a 3d printer, or the C axis on a pick and place ), but here we are not talking about a 4th axis ( that does not infer on the movement of the machine ), but two separate 2-axis robots that must be synchronised.
Meaning that they must share the same queue of movements, and the planning calculations must take into consideration the acceleration/deceleration limits of both robots.
Fortunately Smoothie is designed in a way where this is made easier than with other firmwares, but still it's a long road to implement it, and a lot of work.
The only difficult part here is the planner and I'm beginning to see a bit better how that would work.
Cheers !
Unfortunately here I have to disagree. I claim that this 4'th axis should be handled in CORE because it has to be part in the same interpolation algorithm.
Those events for block start can manage only the starting moment but not what's happening during composed movement.
Again I understood that GRBL has implemented 4'th axis maybe we can have a look...
Kind REgards,
Daniel
Sure I did not say otherwise, what I'm saying is that we need two cores instead of 1.
You seem to think that all we need to do is to take the current XYZ robot and integrate an additional axis to it. That makes no sense whatsoever with how the system currently works and how the math is done.
You *could* do that : simply add an additional axis for example A, in the core, but then you would have a robot XY that would work correctly, and a second robot ZA that would have no sense of acceleration/deceleration etc, and would be impaired by the movement of the other robot.
Those events for block start can manage only the starting moment but not what's happening during composed movement.
How is this a problem ?
Implementing a 4th axis is easy, the edge branch of smoothie has one ( the E axis ) ... but we don't need "just an additional axis", we need to duplicate the current Robot module, have a Planner module that takes into consideration the fact that it can be used several times by several robots for a given block, and a Stepper that can handle more than 3 axes ( that was planned anyway ).
Two cores of 2 axes synchronized are the same as one core with one with 4 axes.
Sure I did not say otherwise, what I'm saying is that we need two cores instead of 1.
One system can be multidimensional. For example I have seen cutting machines with 2 parallel x-y axes and one rotary ax. For example to cut chess shapes. Or a screw ...
You seem to think that all we need to do is to take the current XYZ robot and integrate an additional axis to it. That makes no sense whatsoever with how the system currently works and how the math is done.
I disagree here again . Could be made an interpolated movement of multiple axes taking care of acceleration supported of motors.You *could* do that : simply add an additional axis for example A, in the core, but then you would have a robot XY that would work correctly, and a second robot ZA that would have no sense of acceleration/deceleration etc, and would be impaired by the movement of the other robot.
It is a huge advantage. Not a problem - it's just that I think that are not enough for this situation.
Those events for block start can manage only the starting moment but not what's happening during composed movement.
How is this a problem ?
I don't have enough time because I would have given a try to my idea. First I have to finish the breakout board for mbed/xpresso/smoothie.
Implementing a 4th axis is easy, the edge branch of smoothie has one ( the E axis ) ... but we don't need "just an additional axis", we need to duplicate the current Robot module, have a Planner module that takes into consideration the fact that it can be used several times by several robots for a given block, and a Stepper that can handle more than 3 axes ( that was planned anyway ).
Regards,
Daniel
Smoothie Breakout board preview.
Please provide constructive criticism.
DAniel
https://picasaweb.google.com/111390975142045997947/NewBoards?authkey=Gv1sRgCLb4gpmN1PmuSA
Happy new year!
I have made a prototype for that board too. The most expansive component it is the pcb board next comes the magnetic ethernet jack
Design of board it's open source. I will publish it next few days. I just want to test it first. Regarding sales I don't know what to say... If we can get more pasionates we could order toghether. Right now it seems that we are 2 or 3.
Will you please give us more details about your port of r2c2?
Nice to have your interest on this project.
I will have a look on those links that you have listed. IT's a pity
that we are several peoples interested in this subject but each one it's
following it's own path.
Getting back to subject of thread, could you please tell us how it's
implemented your version of 4'th axis ?
It is handled in same interpolation algorithm as first 3 axes ?
Have you used this implementation to drive a machine ? Like foam cutter ?
Kind REgards,
Daniel
Regarding 4'th axis we had different point of view. If and when I'll
have time I will try to add the 4'th axis as you did.
> One question, are you planning to used mbed or xpresson? And also what
> development environment would you use?
I will test them both (since I already have them). After those tests I
will put a LPC17XX directly on board to lower more the price of board
(right now since I have already made the board it's not so complicated
just a little more to work).
Arthur did all the hard work. Compilation it's done using Core Sourcery
GCC .
http://smoothieware.org/compiling-smoothie
If I managed to compile it everyone will do !
> and you don't need acceleration, because the machine is actually quite slow.
Just for your information: with our old DOS based machine, we used
cutting rates between 50mm/min and 400mm/min. To get the best result,
the machine must move with constant speed. If it cuts to fast, the
wire is bent - if it cuts to slow, the burn-off loss ist to high. So,
i think you are right, Arthur.
> So if you throw acceleration out of the picture, then you can have our normal XY core, and a AB tool ( both without accelation, only XY having a queue ).
Is there an easy way to disable the acceleration-management?
> That would be incredibly easy to code, it's even much simpler than the current extruder module
I asume it will work the same way as the extruder does (using the
different events to synchronize)?
Kind regards,
Stefan
2012/1/9 Arthur Wolf <wolf....@gmail.com>:
--
DI (FH) Stefan Hauer
Wiesenweg 8 | 4644 Scharnstein
Mobil: +43 (0)680 2021073
Web: http://stefan.tusk.at
Hi everybody,
Just for your information: with our old DOS based machine, we used
> and you don't need acceleration, because the machine is actually quite slow.
cutting rates between 50mm/min and 400mm/min. To get the best result,
the machine must move with constant speed. If it cuts to fast, the
wire is bent - if it cuts to slow, the burn-off loss ist to high. So,
i think you are right, Arthur.
> So if you throw acceleration out of the picture, then you can have our normal XY core, and a AB tool ( both without accelation, only XY having a queue ).Is there an easy way to disable the acceleration-management?
I asume it will work the same way as the extruder does (using the
> That would be incredibly easy to code, it's even much simpler than the current extruder module
different events to synchronize)?
neat, so the "AB" as module approach should work.
Ok, cool.
How is the porting/new hardware going?
I'd like to have another look at porting to R2C2 hardware.