Un atelier pensé pour le laser sur CNC
L'Atelier Laser ajoute à FreeCAD 16 modes regroupés par thème : gravure à plat, gravure sur surface 3D courbe, découpe multi-passes, tests & calibration, et assemblage de jobs. Chaque mode génère un fichier G-code prêt pour LinuxCNC, avec estimation de durée, aperçu du trajet dans la vue 3D et fichier de cadrage à vérifier avant de lancer.
Pour qui ?
Pour qui pilote un module laser monté sur une fraiseuse CNC sous LinuxCNC et veut générer proprement ses parcours depuis FreeCAD, sans écrire de G-code à la main. L'atelier a été développé sur une PrintNC équipée d'un module diode LT-80W-AA-PRO, mais le profil machine se règle entièrement depuis les Préférences.
La philosophie : on mesure, on ne devine pas
Rien n'est supposé sur l'optique du laser. Le comportement du point (foyer, divergence en défocus, noircissement selon la puissance) se règle à partir de mesures réelles sur chute : bandes de calibration, grilles de test, nuancier. Le logiciel s'appuie sur ces mesures plutôt que sur un modèle théorique.
La première icône de la barre d'outils (livre ouvert) ouvre un Guide rapide qui résume le flux de travail et répond à « quel mode pour quoi ? ». Chaque panneau s'ouvre aussi sur un résumé court avec un bouton « En savoir plus » et, pour les concepts clés, un petit schéma explicatif.
Comment l'atelier parle à la machine
Le laser est piloté comme une broche LinuxCNC : la puissance passe par la commande S (PWM), il n'y a pas de sortie analogique dédiée. Le zéro Z est toujours fait sur la surface de la pièce, et la mise au point se fait en descendant le bec à la focale.
Chaîne de commande
- Laser = broche
$1(sélecteur multi-broche LinuxCNC). - Puissance par segment via
S(0 → échelle max de la machine,S1000par défaut). - Armement unique par
M3à puissance nulle + temporisation, désarmementM5. - Compensation d'outil
G43 H<n>en tête de job (offsets X/Y + Z palpé du laser).
Module laser testé — LT-80W-AA-PRO
Module diode (10 W optiques). La pièce carrée qui entoure le nez a été retirée pour pouvoir suivre les surfaces courbes sans collision : le contrôle anti-collision de l'atelier ne modélise donc que le nez conique restant (réglable en Préférences).
Nez : pointe Ø5 mm, sommet du cône Ø16 mm, hauteur 18 mm. Focale ~8 mm.
Sur LinuxCNC, il faut avoir fait T<outil laser> M6 dans la session (T100 par défaut, réglable en Préférences). Le G43 de l'en-tête applique alors les offsets X/Y et le Z palpé de l'outil laser. Ce prérequis est rappelé en commentaire dans chaque fichier généré.
Cloner dans le dossier Mod de FreeCAD
Le dépôt est le workbench : on le clone directement dans le dossier Mod de FreeCAD. Pas de build, pas de dépendance à installer — FreeCAD charge les fichiers Python au démarrage.
git clone https://github.com/atelierduverdier/LaserAtelier.git \
~/.local/share/FreeCAD/<version>/Mod/LaserAtelier
Adaptez <version> à votre version de FreeCAD (par ex. v1-1), puis redémarrez FreeCAD : l'atelier « Atelier Laser » apparaît dans le sélecteur d'ateliers. Toute évolution du dépôt est reprise après un simple redémarrage.
Aucun système de build, aucun linter, aucune CI. Les réglages (G-code perso, préréglages matériau, profil du bec, préférences) sont mémorisés entre deux lancements dans un fichier laser_atelier_config.json, dans le dossier de configuration utilisateur de FreeCAD.
Le flux de travail en six étapes
C'est le fil conducteur de tout l'atelier, résumé dans le Guide rapide : on calibre une fois, on teste sur une chute, on prépare le motif, on génère, on vérifie le cadrage, puis on grave.
Calibrer
Une fois : focale, calibration du point (bande de défocus), offsets X/Y du laser — dans les Préférences.
Tester
Sur une chute : grille de test ou rampe puissance/vitesse pour trouver les bons réglages du matériau.
Motif
Hachures, texte/forme, image ou projection sur surface courbe selon ce que vous gravez.
G-code
Marquage, gravure remplie ou découpe génèrent le fichier .ngc.
Cadrage
Chaque mode propose un fichier d'aperçu séparé (rectangle englobant, laser éteint) à lancer d'abord.
Graver
Sur LinuxCNC, faire T<laser> M6 puis lancer le fichier.
Estimation de durée tenant compte des accélérations, aperçu du trajet dans la vue 3D, aperçu de cadrage en fichier séparé, préréglages matériau, et mémorisation des derniers réglages de chaque panneau (rouvrir un mode retrouve les valeurs de la dernière fois).
16 modes, regroupés par thème
Ils apparaissent dans cet ordre dans la barre d'outils et le menu « Atelier Laser ». Voici chaque panneau, avec sa capture et le cas d'usage.
Gravure à plat
Sur une pièce plane : remplissage, texte/forme en noir, ou photo.

Hachures 2D (géométrie)
Remplit une face 2D de hachures parallèles, croisées ou en défocus — crée la géométrie des hachures, à graver ensuite avec le Marquage.

Gravure remplie (noir)
Grave un texte ou une forme 2D en noir plein : remplissage en défocus rentré du bord + contour repassé net au foyer. Styles de trait, préréglages matériau, compensation puissance/défocus.

Gravure photo (trame de points)
Convertit une image en trame de points laser : tramage par diffusion Floyd-Steinberg ou par durée de pulse variable, aperçu du tramage en direct, option négatif, largeur de point réglable.
Sur surface 3D
Suivre le relief d'une pièce bombée, sans écraser le foyer.

Projection sur surface 3D
Projette un motif 2D sur une surface courbe (sonde par tessellation, quasi instantanée). Le panneau s'ouvre d'abord, puis on sélectionne motif et surface dans la vue — l'état reconnu s'affiche en direct.

Marquage de motif (plat ou courbe)
Grave un motif filaire, à plat ou en suivant le relief d'un modèle 3D, avec 5 styles de trait (plein, tirets, pointillé, vague défocus, défocus point élargi) et le nuancier matériau.

Découpe multi-passes (courbe)
Combine le suivi de relief du marquage courbe avec la logique multi-passes / kerf / imbrication de la découpe à plat.
Découpe
Traverser le matériau en plusieurs passes.

Découpe multi-passes (matériau plat)
Passes progressives, compensation de kerf, ordre trous-avant-contour, attaches (ponts de matière), amorce (lead-in hors du bord fini) et copies en matrice pour découper une série en un seul job.
Tests & calibration
Trouver les bons réglages et caler l'optique — tous avec préréglages d'usine (★).

Calibration kerf
Génère un carré test pour mesurer le kerf réel du laser (largeur du trait de coupe), à réinjecter dans la découpe.

Grille de test puissance/vitesse
Matrice de cellules à puissance/vitesse variables, étiquetées, avec cadre net autour de chaque cellule. Champ Hauteur (Z) de test pour rejouer la même matrice à une autre hauteur de bec.

Rampe puissance/vitesse (lignes)
Longues lignes, une par vitesse, chacune à puissance croissante de gauche à droite (rampe Z optionnelle). Règle graduée en chiffres verticaux pour lire la puissance sous n'importe quel point.

Bande de calibration défocus
Rangée de courts traits à hauteurs de bec croissantes, étiquetés en hauteur et en puissance — pour mesurer le foyer (trait le plus fin) et la divergence du point, puis renseigner la calibration.

Test des offsets X/Y du laser
Job mixte fraise + laser : fraise une croix sur X0 Y0, puis grave une croix laser au même point programmé. L'écart mesuré entre les deux croix corrige les offsets X/Y dans tool.tbl.

Nuancier matériau
La palette de gris mesurée d'un matériau : chaque ton = un réglage (puissance, vitesse, défocus) + son résultat constaté (noirceur 0-100 %, largeur). Les modes Marquage et Gravure remplie proposent « Appliquer ce ton ».
Assemblage & réglages
Empiler des opérations et centraliser la configuration.

Job combiné
Empile plusieurs opérations (marquage, découpe, grille) dans un seul fichier G-code, avec un seul armement du laser et une transition anti-collision entre opérations.

Préférences
Tous les réglages machine centralisés : calibration du point, Z de travail, marge de survol, profil du bec, numéro d'outil laser, échelle de puissance, sécurité… appliqués immédiatement, sans redémarrer.
Caler l'optique et le matériau, une fois
Le cœur de l'atelier : deux mesures du point calibrent le modèle de défocus, la fluence relie puissance et largeur de trait, le test d'offsets aligne le laser, et le nuancier capitalise les gris qui marchent.
Le point & le modèle de défocus
Pour noircir une surface en un seul passage, le remplissage éloigne le bec du foyer : le point s'élargit et des hachures espacées se recouvrent. Le modèle est un cône de divergence linéaire calibré à partir de deux mesures réelles — le point au foyer, puis le point à un défocus connu — jamais deviné. La Bande de calibration défocus fournit ces mesures ; on les saisit une seule fois dans les Préférences (« point au foyer », « défocus de test », « point au défocus de test ») et tous les modes concernés les réutilisent. Le remplissage est automatiquement rentré du rayon de point pour rester à l'intérieur du contour.
Puissance vs défocus (la fluence)
Défocaliser étale la même puissance sur un point plus large : l'énergie déposée par unité de surface — la fluence — baisse, et sous un seuil le trait ne marque plus. Pour un trait balayé à la vitesse v, avec un point de diamètre d et une puissance P, la fluence vaut :
Les modes Gravure remplie et Marquage (style Défocus) exposent une section « Puissance vs défocus » : on renseigne un réglage de référence connu bon sur le matériau (puissance, vitesse, largeur de point d'une gravure réussie), et l'atelier soit indique la fluence obtenue par rapport à cette référence, soit compense la puissance automatiquement pour retrouver la même fluence à la largeur et la vitesse courantes. Dans le Marquage, on saisit directement la largeur de point voulue (l'atelier en déduit la hauteur de défocus), plus intuitif qu'une remontée de bec.
Offsets X/Y — aligner le laser sur la broche
Le laser n'est pas monté exactement sur l'axe de la broche : il faut mesurer son décalage. Le Test des offsets fraise une croix, puis grave une croix laser au même point programmé. L'écart signé entre les deux (au pied à coulisse) est l'erreur d'offset :
| Mesure | Correction dans tool.tbl (outil laser) |
|---|---|
| dX = X croix laser − X croix fraisée | X_nouveau = X_actuel − dX |
| dY = Y croix laser − Y croix fraisée | Y_nouveau = Y_actuel − dY |
tool.tbl.Si un signe d'offset est faux, la croix laser peut partir loin. Faites le test sur une chute large, lunettes laser obligatoires. C'est le seul mode qui fait ses propres changements d'outil (T<fraise> M6 puis T<laser> M6).
Le nuancier — capitaliser les gris
La noirceur n'étant pas linéaire avec la puissance, l'atelier ne se fie pas à un modèle mais à des mesures. Après une grille ou une rampe de test, on note dans le Nuancier chaque ton utile : le réglage (puissance, vitesse, défocus) et son résultat constaté (noirceur à l'œil en %, largeur de trait). Les modes Marquage et Gravure remplie proposent alors « Appliquer ce ton » — puissance, vitesse et style Défocus réglés d'un clic sur un rendu déjà validé (le logiciel choisit le ton mesuré le plus proche). C'est la fondation des futurs dégradés et photos calibrés.
Tous les réglages machine, au même endroit
La commande Préférences (icône engrenage) centralise la configuration. Tout est enregistré dans laser_atelier_config.json et appliqué immédiatement. Une valeur invalide est ignorée avec un avertissement, et la valeur par défaut conservée.
| Réglage | Défaut | Rôle |
|---|---|---|
| Dossier G-code | — | Dossier proposé par défaut à la sauvegarde (repli sur /tmp s'il n'est pas accessible). |
| Vitesse rapide (estimation) | 6000 | Vitesse G0 supposée pour l'estimation de durée. N'affecte que l'estimation. |
| Marge de survol (transits) | 10,0 | Marge ajoutée au Z de travail pour les déplacements à vide. 0 = transits au Z de travail. |
| Puissance de cadrage (S) | 0 | Puissance du faisceau pendant l'aperçu cadrage. 0 = laser éteint ; sinon très faible. |
| Point au foyer | 0,15 | Calibration du point : diamètre au foyer (mesuré à la bande de défocus). |
| Défocus de test | 3,0 | Calibration du point : hauteur de la 2ᵉ mesure au-dessus du foyer. |
| Point au défocus de test | 1,0 | Calibration du point : diamètre mesuré à ce défocus. |
| Z de travail (foyer) | 8,5 | Z de travail proposé par défaut dans tous les panneaux. Chaque panneau reste modifiable. |
| Marge de survol (marquage) | 0,5 | Marge de transit proposée dans les modes de marquage (0 recommandé sur pièce plate). |
| Sélecteur broche | $1 | Sélecteur multi-broche ajouté aux commandes S/M3/M5 (LinuxCNC : laser = spindle 1). |
| Numéro d'outil laser | 100 | Numéro (tool.tbl) de l'outil laser : compensation G43 H<n> et Test des offsets. |
| Échelle de puissance max (S) | 1000 | Valeur S = pleine puissance. Fixe le maximum des champs de puissance et le plafond de la fluence. |
| Temporisation d'armement | 2,0 | Pause G4 après l'armement, le temps que l'électronique du module soit prête. |
| Hauteur bec minimale | 1,5 | Butée de sécurité anti-collision : le bec ne descend jamais plus près de la surface. |
| Bec : diamètres et hauteur | 5 / 16 / 18 | Profil du bec pour le contrôle anti-collision sur surface courbe. |
Extrait des réglages les plus utiles — la liste complète (vitesses de cadrage, accélération d'estimation, seuils d'avertissement d'épaisseur/pas Z…) figure dans le README du dépôt.
Ce que génère l'atelier
Chaque générateur renvoie un G-code assaini pour LinuxCNC (dialecte RS274). Le format est pensé pour un laser piloté en broche PWM.
Structure d'un job
- En-tête :
G21/G90/G94/G43 H<laser>, puisM5 $1. - Armement unique :
M3 $1à puissance nulle + temporisation. - Puissance par segment via
S…,S0sur les rapides. - Désarmement
M5 $1, arrêt propre auM2.
Assainissement obligatoire
LinuxCNC rejette les parenthèses imbriquées dans les commentaires et les octets non-ASCII (accents français). Le générateur remplace les parenthèses internes et translittère les accents à chaque sortie — l'opération est idempotente (sûre pour les jobs combinés).
Le numéro d'outil laser (défaut 100) et l'échelle de puissance S (défaut 1000) sont dans les Préférences : une machine dont le laser est un autre outil de la table, ou dont la broche est configurée S0-255, s'adapte entièrement depuis l'interface, sans toucher au code. Le sélecteur de broche $1 est lui aussi réglable.
Le sélecteur multi-broche $1 et la compensation G43 sont propres à LinuxCNC. Pour un contrôleur qui ne les supporte pas, il faut adapter la fonction cmd_tool_comp() dans laser_core.py — non couvert par les Préférences.
Suivi de surface : de la minute à la milliseconde
La sonde de hauteur Z (pour le marquage/découpe courbe et la projection) reposait au départ sur une intersection géométrique OpenCascade par point (~5 ms chacune) — des minutes sur un remplissage dense. Elle utilise maintenant une tessellation unique de la surface suivie d'une interpolation barycentrique par point (quelques microsecondes).
| Calcul (plaque ondulée 100×60 mm, ~48 000 points) | Avant | Après | Gain |
|---|---|---|---|
| Projection du motif sur la surface 3D | 66,2 s | 0,06 s | ×1200 |
| G-code marquage courbe (1ᵉʳ calcul) | 107,0 s | 0,18 s | ×600 |
| Hachures 0,2 mm sur 24 faces à trou | 2,6 s | 0,08 s | ×33 |
Précision préservée : l'écart Z entre le maillage et la vraie surface est borné à 0,05 mm (erreur max mesurée 0,046 mm sur 300 points) — négligeable face à la tolérance de focus du laser (~0,1 mm).
Questions fréquentes
Les points qui reviennent le plus souvent à l'usage.
En photo, si je mets un pas de trame de 1 mm avec un point de 2 mm, ça se chevauche ?›
Oui, beaucoup. Le pas de trame est la distance entre les centres des points ; avec un point de 2 mm (rayon 1 mm) et un pas de 1 mm, le bord de chaque point atteint le centre du voisin — les points fusionnent en X, en Y et en diagonale. Le rendu s'écrase en noir plein et le dégradé disparaît.
La règle (rappelée dans l'infobulle du champ « largeur du point ») : la largeur de point doit être proche du pas de trame. Pour un pas de 1 mm, visez un point d'environ 0,8 à 1 mm ; pour un point de 2 mm, un pas d'environ 2 mm. Attention : l'aperçu à l'écran affiche un pixel par point et ne montre pas le chevauchement — faites toujours un essai sur chute.
Mes traits sont en pointillé à haute vitesse, c'est un bug ?›
Non. Le laser est piloté en S/PWM : à chaque changement de puissance, la machine marque une micro-pause aux frontières de paliers, ce qui hache le trait à grande vitesse. Les rampes utilisent le lissage de trajectoire G64 et une commande S insérée sur les lignes G1 pour rester fluides. Réduire le nombre de paliers aide aussi.
Ma photo est verticale mais elle apparaît à l'horizontale dans le tramage ?›
L'orientation EXIF des photos de téléphone est appliquée automatiquement au chargement. Si l'orientation ne convient toujours pas, le champ Rotation du panneau (0°/90°/180°/270°, sens horaire) permet d'orienter la gravure sur la pièce.
Pourquoi mon G-code exige T<laser> M6 avant de tourner ?›
Le laser n'est pas sur l'axe de la broche. Le G43 de l'en-tête applique les offsets X/Y et le Z palpé de l'outil laser — mais seulement si celui-ci est l'outil courant. Sans T<laser> M6 préalable, les coordonnées seraient interprétées en position broche (foyer faux, X/Y décalés). Le numéro d'outil laser se règle dans les Préférences.
Je n'ai pas la même machine ni le même laser. Ça marche ?›
Oui, pour l'essentiel via les Préférences : profil du bec (anti-collision), Z de travail, calibration du point, numéro d'outil laser, échelle de puissance S, sélecteur de broche. Deux points restent dans le code : la fonction cmd_tool_comp() (pour un contrôleur sans G43) et le tableau FOCUS_TABLE (hauteur de bec par épaisseur pour la découpe à plat, propre au LT-80W-AA-PRO). Le mode Test des offsets suppose une machine mixte fraise + laser sous LinuxCNC.
GRBL est-il supporté ?›
Pas directement. Le format cible LinuxCNC (broche $1, compensation G43). Adapter à GRBL demande de retoucher l'en-tête et l'armement dans laser_core.py — c'est un choix de conception, pas une limite de principe.