Let's talk about fixtures.

Here's the place for discussion related to CAM/CNC and the development of the Path module.
Forum rules
Be nice to others! Respect the FreeCAD code of conduct!
User avatar
sliptonic
Veteran
Posts: 3457
Joined: Tue Oct 25, 2011 10:46 pm
Location: Columbia, Missouri
Contact:

Let's talk about fixtures.

Post by sliptonic »

Looking for real-world expertise. Anyone using fixtures (ie Work Coordinate Systems) beyond G54?

phpBB [video]
Konstantin
Posts: 261
Joined: Wed Jul 23, 2014 10:10 am

Re: Let's talk about fixtures.

Post by Konstantin »

Nice review and a huge area for discussion.

It's nice to have automated fixture managing, that thinks for you, but I'm affraid, that it almost useless in this manner in real life. It is to rigid, uncontrollable and not easy to see what is happening.
  1. How can I control order of what operation must be done in which fixture? (it the way you propose I just can't see the way to do that)
  2. How can I see the fixture in which I am working right now? (In the way you propose I can't see or change anything, I prefer it would be in the list, as a regular operation, not hidden somewhere from my eyes)
  3. How can I change the fixture? (if they would be showed as a regular operation in the list I want to drag and drop them higher or lower in the list. That's a feature request)
  4. How can I point fixture's coordinate and orientation in 3d view? (take that as a feature request to :lol: )
  5. Something else I've forgot
I show you my real life workflow. I have working tables with different sets of fixtures.
  • Example one:
    Four equal parts in four fixtures. I need only to drill them, repeat the same operation in each fixture. First two operations must be done in offsets that lays on left lower corner of the part, second two in regular way. So I must have some ways to set easily these offsets and control their sequence in the way I need, not just G54,G55,G56,G57. And if I need to do something else on them? I almost could use your automatic fixture managing system but how can I controll where each fixtures offset is?
  • Example two:
    Opposite milling. I have two parts that lays on table in opposite directions, so I need somehow to show the starting point and direction of that offset and rotate coordinate system. (My machine has coordinate system rotation operation, but I prefer not using it, because operators get confused by it, so I prefer if FreeCAD had ability to rotate fixture at least around Z xis)
  • Example three:
    Different parts on one table. If they are totally different, then I might produce two FreeCAD projects, postprocess them and merge files, but...
    • Most difficult part - Sometimes I need to do similar operations with the same tools but on different parts. For example, Drill holes in both parts, then drill with different bits and tap one, then mill both with the same mill again. Now I can have only one part per job, I can boolean unite two parts with offset by X axis, for example, and make all operations as usual, but for that I (again) need very flexible fixture managing and pointing system in FreeCAD.
For my workflow your system would be to rigid. And for anyone who will need to make something different, then you imagined.

These are first thoughts that came to my mind. Maybe I didn't understand you, maybe FreeCAD now already has all of I posted here, please, correct me. And if I said something wrong, then please, don't take it on your count, it's might be my English and my head, that doesn't let me to concentrate.
Konstantin
Posts: 261
Joined: Wed Jul 23, 2014 10:10 am

Re: Let's talk about fixtures.

Post by Konstantin »

Oh... That's what I wanted to add. (returning to a machine setup in FreeCAD)

Different controllers has different working offsets and even different manufacturers models can have different sets. Compare LinuxCNC and Fanuc and Siemens controllers, Mazak, etc. There are so many different G5* commands... I, for example, can't use G59.1's, but I have a range of G54P1-G54P64 which I use a lot.

It would be nice to have a separate machine setup, in which I can set my set of offsets and other default values. (No, templates are insufficient, because I can't change G commands)
User avatar
jmr
Posts: 35
Joined: Fri Feb 09, 2018 3:32 pm

Re: Let's talk about fixtures.

Post by jmr »

Hey,
To me that looks very useful. I see I can use it already. Before that I had to chop the file into segments, put them in the subroutines and call them in correct order from another file - this worked but it is not practical for short runs. There are other ways but are also bad. I have manual tool change so minimizing tool changes is more important than being able to change material when machine operates on another fixture.
I see that now this code will require the fixture offsets (and rotation if needed) set on the machine in some way. Maybe another "layer" can be used - that would probably be a model of the table according to G53 on which we could put 0-points of fixtures. Maybe even a model for the fixture itself and we can use that to generate mounting holes pattern? That could solve some other problems, of course in case when the fixtures are bolted to the table in permanent place and they will not move. Maybe it will be even easier to generate a fixture around the part, and use another job for that and also use the same G54+ offsets to machine them from piece/pieces of material mounted on the table - like this it will be correct until dismantled. This is what I need now. Some visualisation could help to choose collision-free spot for bolts.
Anyway, with FreeCAD aware of fixture offsets, it will be easy to generate a Gcode file to initialize those offsets. Assuming that machine home position is stable, we could then remount the fixture later (if using some kind of positioning system like pin holes), run the setup file and then use freshly exported part code and it should just work. With that future feature in mind I can just write down this file with number of G10 L2 Px lines and use it.
I see that when one uses movable fixtures it will be up to them to have each one correctly set/probed on the machine. Having that integrated with different machines may be complicated, but with probe on machine we could generate some kind of file with probed points and import that, but then it would just help in visualization, or maybe the 0 points too if there is a known relation between 0s and probed edges.

I now run V0.17 13086 that is from January. Will an upgrade to current add this code or is it somewhere else? I see there is some nice support for rotary axis added too so it is time for recompile...
User avatar
onekk
Veteran
Posts: 6144
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Let's talk about fixtures.

Post by onekk »

If for Fixture you speak of G54 - G59.x.

Only to repport my "user case"

They are useful even if I'm only an hobbyst using a GRBL controller i could use only G54 to G59 no G59.x, and cutting only plywood with an hobbyst machine.

I have different places where i fix my stocks so having to set the x0,y0,z0 quickly and maybe far from the "drawing" computer is very easy to edit the produced GCODE file with a text editor and change the G54 to maybe G56 to change the "working 0" of the code.

As an example I have my G54 set to the lower left corner of the table, when i use a piece of plywood as big as the machine plane, and several other point with proper fixture when I use smaller pieces or other type of materials, for which I have done some "specialized" holding blocks.

Regards

Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.

Blog: https://okkmkblog.wordpress.com/
User avatar
sliptonic
Veteran
Posts: 3457
Joined: Tue Oct 25, 2011 10:46 pm
Location: Columbia, Missouri
Contact:

Re: Let's talk about fixtures.

Post by sliptonic »

Konstantin wrote: Fri Nov 02, 2018 8:09 am
It's nice to have automated fixture managing, that thinks for you, but I'm affraid, that it almost useless in this manner in real life. It is to rigid, uncontrollable and not easy to see what is happening.
  1. How can I control order of what operation must be done in which fixture? (it the way you propose I just can't see the way to do that)
  2. How can I see the fixture in which I am working right now? (In the way you propose I can't see or change anything, I prefer it would be in the list, as a regular operation, not hidden somewhere from my eyes)
  3. How can I change the fixture? (if they would be showed as a regular operation in the list I want to drag and drop them higher or lower in the list. That's a feature request)
  4. How can I point fixture's coordinate and orientation in 3d view? (take that as a feature request to :lol: )
  5. Something else I've forgot
The goal, so far, is to support gcode fixtures as they work now - at least in LinuxCNC. Fixtures can be useful for some things but have some serious limitations that are outside the scope of Path to fix. The most important limitation is that the relationship between fixtures and the machine coordinate system is entirely in the machine controller. Path has no way to get this information so visualizing a job using multiple fixtures is impossible.

As I noted in the video, I see three basic use-cases where a user might want/need gcode fixtures:
1) multiple identical copies of the same job
2) Multiple jobs for the same part post-processed into one gcode output file
3) Multiple independent parts post-processed into one gocde output file.

The first one is the ONLY one I'm thinking about right now. The second one MIGHT be possible with some additional work and the third is entirely outside our scope right now.

For all these use-cases, fixtures should be seen for what they are; one of several tools available in the toolbox. We also have Path Arrays, Multiple base jobs, etc.
I show you my real life workflow. I have working tables with different sets of fixtures.
  • Example one:
    Four equal parts in four fixtures. I need only to drill them, repeat the same operation in each fixture. First two operations must be done in offsets that lays on left lower corner of the part, second two in regular way. So I must have some ways to set easily these offsets and control their sequence in the way I need, not just G54,G55,G56,G57. And if I need to do something else on them? I almost could use your automatic fixture managing system but how can I controll where each fixtures offset is?
Are you saying you need to be able to control the sequence between fixtures? Like First G54, then G57, then G55? Can you explain this more?
[*]Example two:
Opposite milling. I have two parts that lays on table in opposite directions, so I need somehow to show the starting point and direction of that offset and rotate coordinate system. (My machine has coordinate system rotation operation, but I prefer not using it, because operators get confused by it, so I prefer if FreeCAD had ability to rotate fixture at least around Z xis)
This is like my #2 use-case above. I see it as a good thing to do but not possible yet. I would suggest that the workflow would be to set up two jobs. The first job would be in one (or more) fixtures and the second job in different fixtures. Then there would be some mechanism to select BOTH jobs and post-process to a single output file.
[*]Example three:
Different parts on one table. If they are totally different, then I might produce two FreeCAD projects, postprocess them and merge files, but...
  • Most difficult part - Sometimes I need to do similar operations with the same tools but on different parts. For example, Drill holes in both parts, then drill with different bits and tap one, then mill both with the same mill again. Now I can have only one part per job, I can boolean unite two parts with offset by X axis, for example, and make all operations as usual, but for that I (again) need very flexible fixture managing and pointing system in FreeCAD.
[/list]
For my workflow your system would be to rigid. And for anyone who will need to make something different, then you imagined.
This is the #3 use case and I agree we aren't even close to it. The easiest thing I an imagine now is a special command line post-processing script. The user would set up each project and job seperately and then use a command line tool to post-process them into a single gcode output file like:

>>batch_post.py --file=proj1.fcstd --file=proj2.fcstd --orderby=tool --output=myoutput.ngc

Thanks for the feedback!
User avatar
sliptonic
Veteran
Posts: 3457
Joined: Tue Oct 25, 2011 10:46 pm
Location: Columbia, Missouri
Contact:

Re: Let's talk about fixtures.

Post by sliptonic »

Konstantin wrote: Fri Nov 02, 2018 8:35 am Oh... That's what I wanted to add. (returning to a machine setup in FreeCAD)

Different controllers has different working offsets and even different manufacturers models can have different sets. Compare LinuxCNC and Fanuc and Siemens controllers, Mazak, etc. There are so many different G5* commands... I, for example, can't use G59.1's, but I have a range of G54P1-G54P64 which I use a lot.

It would be nice to have a separate machine setup, in which I can set my set of offsets and other default values. (No, templates are insufficient, because I can't change G commands)
Interesting point. This might be a future improvement to setupsheets.
User avatar
sliptonic
Veteran
Posts: 3457
Joined: Tue Oct 25, 2011 10:46 pm
Location: Columbia, Missouri
Contact:

Re: Let's talk about fixtures.

Post by sliptonic »

jmr wrote: Mon Nov 05, 2018 2:10 pm
Anyway, with FreeCAD aware of fixture offsets, it will be easy to generate a Gcode file to initialize those offsets. Assuming that machine home position is stable, we could then remount the fixture later (if using some kind of positioning system like pin holes), run the setup file and then use freshly exported part code and it should just work. With that future feature in mind I can just write down this file with number of G10 L2 Px lines and use it.
I see that when one uses movable fixtures it will be up to them to have each one correctly set/probed on the machine. Having that integrated with different machines may be complicated, but with probe on machine we could generate some kind of file with probed points and import that, but then it would just help in visualization, or maybe the 0 points too if there is a known relation between 0s and probed edges.

I now run V0.17 13086 that is from January. Will an upgrade to current add this code or is it somewhere else? I see there is some nice support for rotary axis added too so it is time for recompile...
I can't see how to make FreeCAD/Path aware of the fixture offsets in a reliable way. Even if querying linuxcnc is possible, it won't be possible for every controller. So fixture offsets are always going to be controlled at the machine controller.

Last week I was playing with a small fixture plate I made that has 4 fixtures in it. I made a short gcode script so I can probe one point on the fixture plate and it sets the offset for all four fixtures. So if I have to move the fixture elsewhere on the machine, I just reprobe once and re-run the script.

The code only exists in my repo and the pending pull request now. After the 0.18 release, I'll merge to master.
User avatar
onekk
Veteran
Posts: 6144
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Let's talk about fixtures.

Post by onekk »

From your discussion about fixtures, you have mentioned a way to machine two objects placed on two different position on the machine workplane and machine them as an exact copy one of another.

Similar operation is called in some other CAM Nesting, and the solution is to define a nesting grid with proper data that are used as an offset to add at the starting point of the machining operation(s)

Other CAM have also the capability to calculate a grid of such objects calculating the proper starting points, (taking in account even a minimal allowance for the tool diameter).

Maybe a simple "nesting property" associated with a Nesting points (a list of points) will cover most of these user cases.

eventually some menu buttons could select the type of grids and do calculations and maybe some settings properly placed by hand could achieve the effect of machining order.

If I have a bunch of machining operation defined to have an origin at 0,0,0 and if i specify in the nesting points two vectors (0,0,0) and maybe (0,50,0).

Path read the "nesting property" and then offset the machining operation using the two starting point specified in the "nesting points" property (maybe even 10 or twenty ofvectors with different starting point).

Hoping not to be off topic or too late.

Regards

Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.

Blog: https://okkmkblog.wordpress.com/
User avatar
JoshM
Posts: 456
Joined: Thu Oct 05, 2017 5:34 pm
Location: New Hampshire

Re: Let's talk about fixtures.

Post by JoshM »

Hey Brad,
I use offsets--less now that I added a vacuum table. However, for CNC Lathe, they are pretty useful. Give each tool it's own work-offset, then whatever the XYZ offsets, all tools can work with same relative coordinates. I know lathe has been on your wanna do list, and assume there the Tool-Controller would reference the work offset.

I put threaded inserts in my vacuum table and have a couple vises that I can mount relatively consistently. I do have the coordinates saved in my G58, G59.x, From what I'm aware, how much CAM is leaned on depends on setup. In my setup, I generate models at origin, then map G54 to the stock. With vise work-offsets, I'm mostly using to find a close zero, then tightening up as needed in G54. PathWB I only use for lathe.
Best,
-j
Post Reply