What are the needs for the integrated assembly workbench?

Hello FreeCAD Community,

As it is currently being studied to create a default assembly workbench in FreeCAD, I take the liberty of sharing my point of view concerning the tools to be offered in such a workbench, as a user, a basic mechanic.
This point of view will inevitably have imperfections and omissions.
1- Why an assembly workbench ?
As its name suggests, such a workbench will be used
• to “assemble”, i.e. bring together, put in relative position, 3D objects (mechanical parts in general);
• but also to preserve the kinematic links (degrees of freedom) between the kinematic equivalence classes of a mechanism (subsets of kinematically linked parts).
2- What purpose ?
• Create 3D models of mechanisms, systems composed of several objects attached to each other, rigidly or not.
• Carry out simulations to study the kinematic or dynamic behavior of a mechanism.
• Test / identify collisions during the simulated operation of a mechanism.
3- Depending on the complexity of the project, we must be able to
31- group 3D objects (mechanical parts) together (called kinematic equivalence classes) in the same container. This will allow you to move / orient all of its content in a single operation. It does not need a reference system in 3D space.
This can be done in different ways:

  • one can build the necessary parts separately and import them into the corresponding container, then move/orient them to put them in correct relative positions after declaring one of the parts of the container as reference (“immobile”);
  • the parts can be built directly in position in the subassembly;
  • you can import library items…
    For this step, we don’t necessarily need a specific workbench, but at least an assembly container (the Part object could be suitable).
    32- group several kinematic equivalence classes into a general assembly.
    This general assembly will also be inside its own container.
    This container will be of the same type as the previous one. It will therefore make it possible to move / orient all of its content in a single operation. It still doesn’t need a reference system in 3D space.
    It will make it possible to link together the kinematic equivalence classes (or previous containers) by geometric constraints which will translate the desired kinematic links as well as possible.
    It can in turn become a component of a hierarchically higher container.
    Here, we need specific tools from a specialized workshop to create these geometric constraints between containers of the same level.
    Note: these constraints can therefore also be used between components of the same container with a view to placing them in relative position / orientation in this container. However, the elementary movements still possible between the components of the same container will not be visible from the upper container, unless there is a special property (case of flexible sub-assemblies, the use of which is rare, and only facilitates the multiplication of a mechanism – therefore with mobility – in a set that includes several identical sub-mechanisms).
    4- What tools to create constraints between components?
    We must be able to translate the different kinematic links (joints), therefore define which geometric constraints we must use.
    By convention, in the following:
  • a plane could be a flat surface, a reference plane (XY, XZ, YZ), or a DatumPlane;
  • an axis could be an edge (rectilinear), the axis of a cylinder, a reference axis (X, Y, Z), a DatumLine;
  • a point could be the end of an edge; the center of an arc, a DatumPoint, …
    The designer’s first reflex is to use pairs of surfaces to constrain: it would be interesting if the solver supported DOFs being deleted several times (overabundance of constraints).
    41- Situations encountered in mechanical construction
    01_pl.gif
    02_piv.gif
    03_piv_gli.gif
    liaisons1.png

next 2/3
04_gliss.gif
05_ponct.gif
06_lin_rect.gif
liaisons2.png

next 3/3
07_sph.gif
08_heli.gif
liaisons3.png
42- The necessary geometric constraints resulting from this inventory :
Coincidences :

  • Point on point
  • Point on line (straight)
  • Point on plan
  • Plan on plan (normal options in the same direction or opposite)
    Distances :
  • Point / point
  • Point / line (straight)
  • Point / plan
  • Plan / plan (normal options in the same direction or opposite)

Good resume and examples.

Thank you.

Regards

Carlo D.

Thank you for such an excellent detailed summary of assembly requirements. I would only add the following general requirement:

  • Facilitate top down assembly design including the ability to model in-context. I.e. assemble a body before any features are created.

I am not familiar with A3 or A2Plus so I ask if this is possible? Assembly and assembly design are two different basic requirements IMO.

you didn’t list tools, only some constraints. There are many more tools to build real-world assemblies (what about screws for example ?)

Indeed, I haven’t had the need to do top-down design yet (I’m only drawing for fun right now), but I intended to experiment with it.
I think it’s possible since I often create structures from master sketches and you can link sketch elements together or with existing shapes.
I’ll get to work and let you know.

As far as I’m concerned, I really like working with Asm3, because it’s very similar to the approach I knew with SolidWorks or Catia.
What scares people in Asm3 is the large number of constraints available, stemming from the solver used (solvespace).

In practice, very few of these constraints are necessary, and the choice is thus simplified, as long as one knows how to juggle with the degrees of freedom.
Perhaps it is not so complicated to mix the existence of LCS and constraints by geometric elements (with a sort of switch depending on the case)?
My programming inabilities only allow me to dream!

For assembly elements such as screws and nuts, only their axis and the support plane are useful. So we come back to the Pivot connections that I described. We can adjust the angular orientation for aesthetic reasons, but it is of no use!
In the same way as with the magic of our CAD tools, many people have fun drawing threads and tappings: totally useless, time-consuming and cumbersome files (everyone knows what a screw or nut is, right?).

Probably out of scope, as “top down” is one of the many ways of doing things.

IMHO the “Official Assembly WB” should organize things, to permit:

  • loading an Assembly made eventually by others “Third Party Assembly WB” (TPA) even if I have not the TPA installed.
  • permit to edit “Assembly elements” on some extend as example modifying some “positions” (TPA could have some automatic way to “establish relations” among parts, but should follow some rules that permit to modify “relative positions” in a manual way)
  • Leave other things like “complex assemblies” “complex animations” and usually “high level tools” to the TPA.

For short it should be an extensible infrastructure that could be expanded by TPA, with some “basic” functionaliies and requirement that could be extended maybe directly by a customer itself, if FreeCAD will be used in a “commercial environment” each users probably will have “his requirements” as example a “PCB maker” could have different requirements to a “car maker” or even by a “small sheet metal shop”.

If you see around (as example in Linkedin) there are some interesting experiment to introduce FreeCAD in “commercial environment” expecially as an “interchange format” between industry and “small shops” that could not afford to pay the “pay per use fee” or the “cloud based” CAD solutions that most “commercial CAD” have introduced, or that could not afford the risk of having their “intellectual property” (read countless of man/hours works) “taken in hostage” by such vendors, that maybe could even disappear in future leaving with “unusable and closed source formats files” that hold your “intellectual property”.

Regards

Carlo D.

+1 eventually a fixing could even be a rivet, a screw and nut or other means, if you are used to see on some shops, they use rivets to assemble parts that have threaded holes, to be an "anti "vandalism measure or to simply use a chep rivet instead of a screw, nut and washers.

The assembly itself will not change if you alter the way “pieces” are hold together, but this could be a biased “point of view”.

Regards

Carlo D.

I beg to differ. In my experience it is the only way to design an assembly. If you know of another way, please let me know.

Exactly.

For a direct comparison of Assembly4 to SW please see my latest post for that purpose here: https://devtalk.freecad.org/t/use-of-an-assembly4-time-variable-for-mechanism-design-and-assembly-final-comments-re-assembly-constraints/71819/1 This is a more of a bottom-up assembly since the design already exists. For a top-down example see here: https://devtalk.freecad.org/t/pd-v021asm4-0502-reverse-engineering-the-f16-main-landing-gear/70163/1

I’d like to add that for me parametrization parts is a very important aspect. Lots of parts in an assembly might be parametrized and a user might want to use different versions of that part in one and the same assembly. Screws are a common example. It makes sense to have only one base model for a metric hex-head screw, which ends up being used in all kinds of different sizes. This expands into BOM management too.

Great, I can’t wait for the new Assembly workbench.

In my opinion, the Assembly module (in collaboration with Techdraw) must have a tool that creates a Bill of materials. The BOM is one of the most important documents created during design.

It would be great if in the future it would be possible to link parts to geometric elements of the imported sketch and also to link parts to each other using local coordinate systems (Assembly 4).

The list is quite large and you have a lot of work ahead of you, it is useful to see what tools other 3D CAD software have: creating sub-assemblies, creating Mirror parts, duplicate parts, circular and rectangular patterns, collision detection…

:arrow_right: Assembly Workbench

:arrow_right: FreeCAD_weekly-builds-34873-2023-11-05-conda-Windows-x86_64-py310.7z

Thanks a lot for letting us know - looks really nice!
I tried to play around with what is available in the weekly-builds. So far I managed to link in some parts and to place joints. But I guess as the solver is not yet implemented the actual assembly action still doesn’t take place, right?
Would it be too early to mention what is already available in the dev. release notes?
Looking forward to see further progress and keeping fingers crossed!

Integrated assembly workbench coming to your doorstep
https://devtalk.freecad.org/t/integrated-assembly-workbench-coming-to-your-doorstep/73636/1

You can see solver in action after building this branch https://github.com/Ondsel-Development/FreeCAD/tree/OndselSolver-testing

git clone --recursive https://github.com/Ondsel-Development/FreeCAD.git
git checkout OndselSolver-testing

Bonjour
Is it possible to incorporate joints with more or less significant functional clearance. or dimensions with play (for example for a length: 100mm ±2) 2 being an adjustable variable?

https://github.com/FreeCAD/FreeCAD/issues/10752