Atelier Assembly
Introduction
L' atelier Assembly est le nouvel atelier d'assemblage intégré de FreeCAD. Il utilise le solveur open-source d'Ondsel.
Outils
Assemblage
Assemblage : crée un assemblage de base dans le document en cours ou un sous-assemblage dans un assemblage actif préexistant.
Insérer un composant : insère un composant dans l'assemblage actif.
Résoudre un assemblage : résout l'assemblage actif.
Vue éclatée : crée un conteneur de vues éclatées dans l'assemblage actif qui contient une ou plusieurs vues éclatées.
Nomenclature : crée une nomenclature à partir d'un sous-ensemble sélectionné ou du document.
Exporter un fichier ASMT : exporte l'assemblage actif vers un fichier ASMT.
Liaisons
Bascule du blocage : fixe la position et l'orientation d'une forme par rapport au système de coordonnées de l'assemblage auquel elle appartient.
Liaison fixe : crée une liaison bloquant deux pièces d'assemblage l'une contre l'autre, empêchant tout mouvement ou rotation, mais peut également être utilisé pour définir d'autres types de liaisons.
Liaison pivot : crée une liaison articulée, permettant la rotation autour d'un seul axe entre deux parties sélectionnées.
Liaison pivot glissant : crée une liaison pivot glissant entre deux pièces sélectionnées, permettant une rotation autour d'un seul axe et un mouvement le long du même axe.
Liaison glissière : crée une liaison glissière entre deux pièces sélectionnées, permettant un mouvement linéaire le long d'un seul axe tout en limitant la rotation.
Liaison bille : crée une liaison bille entre deux pièces sélectionnées en un seul point, permettant une rotation libre autour du point tout en gardant les deux pièces connectées en ce point.
Liaison distance : crée une liaison distance entre deux pièces sélectionnées, fixant la distance entre les deux pièces.
Liaison parallèle : crée une liaison parallèle entre deux pièces sélectionnées, en mettant en parallèle les axes Z des systèmes de coordonnées sélectionnés.
Liaison perpendiculaire : crée une liaison perpendiculaire entre deux pièces sélectionnées, en mettant perpendiculaire les axes Z des systèmes de coordonnées sélectionnés.
Liaison d'angle : crée une liaison d'angle entre deux pièces sélectionnées, fixant l'angle entre les axes Z des systèmes de coordonnées sélectionnés.
Liaison crémaillère : crée une liaison à crémaillère qui couple la translation d'une partie d'une liaison glissière et la rotation d'une partie d'une liaison pivot.
Liaison hélicoïdale : crée une liaison hélicoïdale qui couple la translation d'une partie d'une liaison glissière et la rotation d'une partie d'une liaison pivot.
Liaison engrenage : crée une liaison par engrenage qui couple la rotation de deux parties de deux liaisons pivots différentes.
Liaison courroie : crée une liaison par courroie qui couple la rotation de deux parties de deux liaisons pivots différentes.
Préférences
Préférences : préférences pour l'atelier Assembly.
Exemple d'une manivelle et une tige coulissante
Cet exemple est temporaire et pourra être supprimé lorsque des descriptions/tutoriels appropriés seront disponibles.
Assemblage d'une manivelle et d'une tige coulissante
L'assemblage à créer se compose de quatre parties : une base, une tige coulissante, une manivelle et une bielle. Elles sont reliées par quatre articulations.
Pièces assemblées : la base (ambre), la tige coulissante (bleu clair), la manivelle (rouge), la bielle (vert)
Préparer des pièces
Dans cet exemple, toutes les pièces et l'assemblage sont créés dans un seul document.
Les géométries cylindriques des objets sont soit parallèles, soit perpendiculaires. Le reste des formes n'est pas pertinent pour cet exemple, à moins qu'il n'y ait des collisions. En gardant cela à l'esprit, vous pouvez modéliser vos propres objets ou les créer à l'aide du code Python ci-dessous. Le code créera un nouveau document avec les quatre objets (plus simples que dans les images). Il suffit de copier-coller les lignes suivantes dans la console Python :
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
box1 = Part.makeBox(140, 40, 7, App.Vector(0, -20, 0))
cyl1 = Part.makeCylinder(4, 8, App.Vector(120, 0, 7))
box2 = Part.makeBox(20, 12, 10, App.Vector(5, -6, 7))
cyl2 = Part.makeCylinder(6, 20, App.Vector(25, 0, 17), App.Vector(-1, 0, 0))
cyl3 = Part.makeCylinder(4, 20, App.Vector(25, 0, 17), App.Vector(-1, 0, 0))
shape = box1.fuse([cyl1, box2, cyl2]).removeSplitter().cut(cyl3)
base = doc.addObject("Part::Feature", "Base")
base.Shape = shape
box1 = Part.makeBox(4, 12, 12, App.Vector(-12, -6, 0))
box2 = Part.makeBox(14, 12, 4, App.Vector(-8, -6, 0))
cyl1 = Part.makeCylinder(4, 8, App.Vector(0, 0, 4))
cyl2 = Part.makeCylinder(4, 88, App.Vector(-12, 0, 6),App.Vector(-1, 0, 0))
shape = box1.fuse([box2, cyl1, cyl2]).removeSplitter()
slider_rod = doc.addObject("Part::Feature", "SliderRod")
slider_rod.Shape = shape
slider_rod.Placement.Base = App.Vector(100, -40, 0)
cyl1 = Part.makeCylinder(7.5, 4)
box1 = Part.makeBox(15, 30, 4, App.Vector(-7.5, 0, 0))
cyl2 = Part.makeCylinder(7.5, 4, App.Vector(0, 30, 0))
cyl3 = Part.makeCylinder(4, 6, App.Vector(0, 30, 4))
cyl4 = Part.makeCylinder(4, 4)
shape = cyl1.fuse([box1, cyl2]).removeSplitter().fuse(cyl3).cut(cyl4)
crank = doc.addObject("Part::Feature", "Crank")
crank.Shape = shape
crank.Placement.Base = App.Vector(125, -70, 0)
cyl1 = Part.makeCylinder(6, 4)
box1 = Part.makeBox(50, 12, 4, App.Vector(0, -6, 0))
cyl2 = Part.makeCylinder(6, 4, App.Vector(50, 0, 0))
cyl3 = Part.makeCylinder(4, 4)
cyl4 = Part.makeCylinder(4, 4, App.Vector(50, 0, 0))
shape = cyl1.fuse([box1, cyl2]).removeSplitter().cut(cyl3.fuse(cyl4))
connecting_rod = doc.addObject("Part::Feature", "ConnectingRod")
connecting_rod.Shape = shape
connecting_rod.Placement.Base = App.Vector(25, -70, 0)
mat = base.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
base.ViewObject.ShapeAppearance = (mat,)
mat = slider_rod.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
slider_rod.ViewObject.ShapeAppearance = (mat,)
mat = crank.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.70, 0.30, 0.20, 0.0)
crank.ViewObject.ShapeAppearance = (mat,)
mat = connecting_rod.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.0, 0.0)
connecting_rod.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Ajouter un assemblage
La commande Assemblage permet d'ajouter un assemblage au document.
Arborescence des pièces et des assemblages
Déplacer les pièces dans l'assemblage
Dans la vue en arborescence, glissez et déposez les pièces sur l'objet Assemblage. Elles peuvent maintenant être traitées par le solveur de l'assemblage.
Les pièces sont maintenant dans le conteneur d'assemblage
Fixer une pièce
Pour maintenir l'assemblage dans la position souhaitée, la base doit être verrouillée ou fixée (en anglais grounded). Sélectionnez la base dans la vue en arborescence ou dans la vue 3D et utilisez la commande Activer/désactiver le blocage. Cette commande fixe la position de la base par rapport au système de coordonnées local (LCS) du conteneur Assembly. Un objet GroundedJoint est ajouté au conteneur Joints.
Développez le conteneur Joints pour trouver l'objet GroundedJoint
Alternative : insérer un lien
Au lieu des deux étapes mentionnées ci-dessus, il est également possible d'utiliser la commande Insérer un composant pour placer des objets à l'intérieur d'un assemblage. Le premier objet devient automatiquement la partie fixée. Il faut donc commencer par l'objet Base. La commande crée des liens et les objets d'origine reste en dehors de l'assemblage. Pour éviter toute confusion, il est conseillé de les rendre invisibles.
Appliquer des liaisons
Une liaison relie exactement deux éléments de pièces différentes. Ils peuvent être sélectionnés avant que la commande de la liaison souhaitée ne soit lancée (tout nombre d'éléments sélectionnés autre que deux entraîne une sélection vide).
Les éléments définissent la position et l'orientation d'un LCS représenté par un cercle rempli sur le plan local XY et trois lignes le long des axes locaux X (rouge), Y (vert) et Z (bleu).
- Une liaison pivot entre la base et la manivelle
Éléments sélectionnés + Créer une liaison pivot → manivelle réarrangée
Déplacez la manivelle à l'aide du bouton gauche de la souris. Seule une rotation autour du pivot doit être possible.
- Une liaison glissière glissant entre la base et la tige coulissante
Éléments sélectionnés + Créer une liaison glissière → tige coulissante réarrangée
Déplacez la tige coulissante à l'aide du bouton gauche de la souris. Seul un déplacement le long de sa ligne centrale devrait être possible.
- Une liaison pivot entre la manivelle et la bielle
Éléments sélectionnés + Créer une liaison pivot → bielle réarrangée
Déplacez la bielle à l'aide du bouton gauche de la souris. Seule une rotation autour du pivot doit être possible.
S'il y a plusieurs joints dans une ligne, nous devons aider le solveur à trouver une solution raisonnable.
Si nécessaire, cliquez et faites glisser les pièces vers une position plus facile à calculer.
- Une liaison pivot glissant entre la bielle et la tige coulissante
Éléments sélectionnés + Créer une liaison pivot glissant → assemblage terminé
Dans l'assemblage terminé, utilisez le pointeur de la souris pour faire glisser les pièces en fonction des liaisons utilisées.
Remarque
L'axe de la tige coulissante est orienté de manière redondante. Son axe central est parallèle à l'axe de la base par l'intermédiaire de la chaîne cinématique allant de la base à la manivelle et à la bielle, c'est-à-dire que son axe Z local ne peut pivoter autour d'aucun axe X ou Y. L'articulation du coulisseau empêche également la rotation de son axe Z autour de deux axes locaux. L'articulation coulissante empêche également la rotation de son axe Z autour de deux axes locaux, ce qui se traduit par deux degrés de liberté contraints de manière redondante. Une articulation cylindrique à la place de l'articulation coulissante ne bloquerait qu'une rotation, ce qui se traduirait par un seul degré de liberté contraint de manière redondante.
Contrôler la manivelle
Pour contrôler la disposition de l'assemblage par l'angle entre la base et la manivelle, nous devons remplacer l'articulation à rotule entre les deux par une articulation fixe. Pour contrôler la position de l'assemblage par l'angle entre la base et la manivelle, nous devons transformer la liaison pivot en liaison fixe. Pour ce faire, double-cliquez sur l'objet Pivot dans l'arborescence. Dans la fenêtre de dialogue, changez la valeur Pivot en Fixe et modifiez la valeur de la rotation comme vous le souhaitez (le mouvement doit suivre l'action de la molette de la souris).
Remarquez qu'un changement de type de liaison modifie l'étiquette de la liaison mais pas son nom. Dans ce cas, l'étiquette est remplacée par "Fixed".
Pour animer l'assemblage, nous pouvons modifier la rotation (Offset1.Angle) de la liaison fixe avec du code Python. Il suffit de copier-coller les lignes suivantes dans la console Python :
import math
import FreeCAD as App
import FreeCADGui as Gui
actuator = App.ActiveDocument.getObjectsByLabel("Fixed")[0]
for angle in range(0, 361, 10):
# A full rotation of the Crank in steps of 10°
actuator.Offset1.Rotation.Angle = math.radians(angle)
App.ActiveDocument.recompute()
Gui.updateGui()
La fin de l'intervalle doit être supérieure à 360 pour que cet angle soit également considéré comme un résultat valide.
Exemple d'un joint de Cardan
Cet exemple est temporaire et pourra être supprimé lorsque des descriptions/tutoriels appropriés seront disponibles.
Assemblage d'un joint de Cardan
Dans cet exemple, un joint de Cardan est créé.
L'assemblage se compose de trois éléments solides : deux fourches identiques et une croix. Deux éléments non solides supplémentaires, Axle1 et Axle2, représentant les arbres coudés, sont également nécessaires. Les arbres et les éléments solides sont reliés par plusieurs liaisons.
Préparer des pièces
Dans cet exemple, toutes les pièces et l'assemblage sont créés dans un seul document.
Le code Python ci-dessous créera un nouveau document avec quatre objets (seulement 1 fourche). Il suffit de copier-coller les lignes suivantes dans la console Python :
import math
import FreeCAD as App
import FreeCADGui as Gui
import Part
doc = App.newDocument()
axle1 = doc.addObject("Part::Line", "Axle1")
axle1.X2 = -80
axle1.Y2 = 0
axle1.Z2 = 0
axle2 = doc.addObject("Part::Line", "Axle2")
axle2.X2 = 80
axle2.Y2 = 0
axle2.Z2 = 0
axle2.Placement.Rotation.Angle = math.radians(20)
sph1 = Part.makeSphere(50, App.Vector(0, 0, 0), App.Vector(-1, 0, 0), 0, 90, 360)
box1 = Part.makeBox(50, 40, 80, App.Vector(-50, -20, -40))
cyl1 = Part.makeCylinder(20, 80, App.Vector(0, 0, -40))
cyl2 = Part.makeCylinder(20, 80, App.Vector(0, 0, 0), App.Vector(-1, 0, 0))
cyl3 = Part.makeCylinder(30, 60, App.Vector(0, -30, 0), App.Vector(0, 1, 0))
box2 = Part.makeBox(30, 60, 60, App.Vector(0, -30, -30))
cyl4 = Part.makeCylinder(15, 80, App.Vector(0, 0, -40))
cyl5 = Part.makeCylinder(15, 80, App.Vector(0, 0, 0), App.Vector(-1, 0, 0))
shape = sph1.common(box1).fuse([cyl1, cyl2]).cut(cyl3.fuse([box2, cyl4, cyl5]))
fork = doc.addObject("Part::Feature", "Fork")
fork.Shape = shape.removeSplitter()
fork.Placement.Base = App.Vector(0, 100, 0)
cyl1 = Part.makeCylinder(15, 80, App.Vector(0, 0, -40))
cyl2 = Part.makeCylinder(15, 80, App.Vector(0, -40, 0), App.Vector(0, 1, 0))
shape = cyl1.fuse([cyl2])
cross = doc.addObject("Part::Feature", "Cross")
cross.Shape = shape.removeSplitter()
cross.Placement.Base = App.Vector(70, 100, 0)
mat = fork.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.80, 0.60, 0.15, 0.0)
fork.ViewObject.ShapeAppearance = (mat,)
mat = cross.ViewObject.ShapeAppearance[0]
mat.DiffuseColor = (0.55, 0.70, 0.70, 0.0)
cross.ViewObject.ShapeAppearance = (mat,)
doc.recompute()
view = Gui.ActiveDocument.ActiveView
view.viewIsometric()
view.fitAll()
Changer l'angle des arbres
L'angle entre les arbres est fixé à 20°. Si l'angle doit être modifié, Axle2 est sélectionné et sa propriété Placement.Angle est ajustée. Cette propriété doit être modifiée avant que Axle2 ne soit déplacé dans l'assemblage.
Attention : les pièces peuvent entrer en collision si l'angle est trop grand.
Ajouter un assemblage
La commande Assemblage permet d'ajouter un assemblage au document.
Déplacer les arbres dans l'assemblage
Dans la vue en arborescence, glisser-déposer les arbres sur l'objet Assembly.
Bloquer les arbres
Sélectionnez les deux arbres dans l'arborescence et utilisez l'outil Bascule du blocage.
Déplacer les pièces dans l'assemblage
Pour les autres objets, nous utiliserons l'outil Insérer un composant :
- Lancez l'outil.
- Dans la fenêtre de dialogue qui s'ouvre, cliquez une fois sur l'objet Cross et deux fois sur l'objet Fork.
- Appuyez sur le bouton OK.
- Rendre invisible les objets extérieurs à l'assemblage.
- Si les objets à l'intérieur de l'assemblage se chevauchent trop, vous pouvez les faire glisser vers une nouvelle position.
Appliquer des liaisons
- Une liaison pivot entre Axle1 et Fork001
Éléments sélectionnés + Créer une liaison pivot → + Décalage de +40mm ou -40mm → Fork001 réarrangé
Si vous lancez d'abord l'outil, puis sélectionnez les éléments, vous pouvez cliquer à proximité du bonne extrémité d'Axle1 pour éviter d'avoir à saisir un décalage.
- Une liaison pivot glissant entre Fork001 et Cross001
Éléments sélectionnés + Créer une liaison pivot glissant → Cross001 réarrangé
- Une liaison pivot glissant entre Axle2 et Fork002
Éléments sélectionnés + Créer une liaison pivot glissant → Fork002 réarrangé
Si nécessaire, inversez la direction de la liaison en utilisant le bouton dans le panneau des tâches.
- Une liaison pivot glissant entre Cross001 et Fork002
Éléments sélectionnés + Créer une liaison pivot glissant → Cross001 et Fork002 réarrangés
Actionner le joint de Cardan
Le joint de Cardan peut être actionné en déplaçant Fork001 avec la souris gauche.
Si vous voulez vérifier la situation à des angles de rotation distincts, procédez comme suit :
- Changez la liaison pivot glissant entre Axle1 et Fork001 en une liaison fixe.
- Sélectionnez la propriété Offset1.Angle de la liaison fixe et faites tourner la molette de la souris.
- Le joint de Cardan peut être positionné à n'importe quel angle.
- Joints: Toggle Grounded, Create a Fixed Joint, Create Revolute Joint, Create Cylindrical Joint, Create Slider Joint, Create Ball Joint, Create Distance Joint, Create Parallel Joint, Create Perpendicular Joint, Create Angle Joint, Create Rack and Pinion Joint, Create Screw Joint, Create Gears Joint, Create Belt Joint
- Preferences: Preferences

- Démarrer avec FreeCAD
- Installation : Téléchargements, Windows, Linux, Mac, Logiciels supplémentaires, Docker, AppImage, Ubuntu Snap
- Bases : À propos de FreeCAD, Interface, Navigation par la souris, Méthodes de sélection, Objet name, Préférences, Ateliers, Structure du document, Propriétés, Contribuer à FreeCAD, Faire un don
- Aide : Tutoriels, Tutoriels vidéo
- Ateliers : Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test