approximation par arc de cercle

  • Auteur de la discussion DEN
  • Date de début
D

DEN

Compagnon
Bonjour à tous,

je me pose une question de géométrie :

Si on veut approcher une courbe par des arcs de cercle de manière optimale comment fait-on ?
De manière optimale j'entends : en minimisant le nombre d'arcs pour reconstruire la courbe et en restant en dessous d'une certaine borne d'erreur (distance entre la vraie courbe et son approximation).
Toutes les méthodes que j'ai trouvé jusqu'ici, supposaient de découper la courbe en morceaux, puis d'optimiser les paramètres (du cercle) sur chaque morceau et ou l'ensemble afin de minimiser l'erreur. Et donc ça ne minimise pas le nombre d'arcs, car les points sur la courbe sont prédéfinis (c'est l'input du problème)
Je voudrais faire l'inverse ou le découpage en morceaux sera le résultat de l'optimisation.

J'ai trouvé une technique pour approximer avec des droites : on trace deux courbes parallèles à celle de référence en prenant cette dernière en sandwich, l'épaisseur du sandwich étant l'erreur permise, on fait passer la droite à l'intérieur du chemin de manière à augmenter sa longueur. Ça revient à être tangent à l'un des deux côtés en fonction du signe du rayon de courbure, et se balader sur la courbe jusqu'à avoir la longueur maxi de la droite à l'intérieur, écrire un tel algorithme est parfaitement faisable. Après faut voir si ça donne vraiment la solution optimale si la première droite est la plus longue, OK, mais ça donne quoi pour les autres ... ?

Par contre pour les arc de cercle, là j'ai du mal à imaginer un algorithme qui tienne la route, je pense qu'utiliser des courbes parallèles pour limiter c'est aussi valable.

Le pourquoi de ma question : les CNC peuvent faire de l'interpolation rectiligne et circulaire , donc pour augmenter la vitesse et diminuer la taille du g-code il y a intérêt à minimiser le nombre de morceaux interconnectés, sans perdre de vue la précision (la distance par rapport à la courbe de référence doit rester bornée). Le top ça serait de pouvoir combiner arcs et droites, avec les mêmes critères d'approximation.
Peut-être que ça existe déjà en CAM, si on donne la courbe sous forme de coordonnées de points, peut-être qu'il peut la réinterpréter sous forme d'arc et de droites ?

P.S. : c'est une question ouverte, je demande pas spécialement la solution, même un ouvrage de référence me ferait avancer, ça sert à rien de réinventer la roue comme on dit ...
 
G

gaston48

Compagnon
Bonsoir,
Cambam fait cela en tout cas, dans les 2 sens : arcs de cercle sur polyline et polyline sur arcs de cercle.

cambam.jpg
 
S

stanloc

Compagnon
Il y a des fonctions "Spline" ; n'est ce pas mieux ?
Stan
 
G

gaston48

Compagnon
Oui mais ta Spline en g-code, tu l’écris avec quelle syntaxe ?
 
D

DEN

Compagnon
Merci beaucoup pour les infos !

Je vais creuser tout ça, jusqu'ici je générais un fichier avec une flopée de points équidistants (résolution 1/100) (20000 à 30000 pts au total) , que je faisais passer en interpolation linéaire ... ça ralenti très fort évidement , même si le résultat final est très correct ... Néanmoins pour dégrossir ça sert à rien et on peut simplifier .

Peut-être que je ferais une première approximation à moitié à la main, vu que j'ai l'expression analytique de la courbe, je vais essayer de passer par le calcul de rayon de courbure, et le centre de l'arc devrait se trouver sur la normale à la courbe ...

Plus tard j'essayerai CamBam, faudra de toute manière que je m'y mette un jour ou l'autre !
 
S

stanloc

Compagnon
gaston48 a dit:
Oui mais ta Spline en g-code, tu l’écris avec quelle syntaxe ?

Parce que votre G-code ne peut pas lire un tableau de coordonnées ? ou un fichier ? je ne sais quoi ?
Stan
 
J

JeanYves

Compagnon
Bsr
jusqu'ici je générais un fichier avec une flopée de points équidistants (résolution 1/100) (20000 à 30000 pts au total) , que je faisais passer en interpolation linéaire

Ta tolerance est elle si étroite pour necessiter tant de points ?
 
D

DEN

Compagnon
Justement, jusqu'ici c'est ce que je faisait, je générai un fichier avec le listing de points , beaucoup de points ... mais le problème c'est que avec une faible distance entre points on atteint pas la vitesse de croisière et c'est très long. Alors qu'avec un arc de cercle plus long on arrive à aller plus vite, la machine à le temps d’accélérer ...

Le but étant d'aller plus vite en phase d'ébauche, à première vue ma courbe est telle que, avec 2 arcs de cercle et une droite on arrive à approcher la courbe au dixième, j'aimerai descendre au 5/100 ce qui sera impeccable comme ébauche, puis 5 passes de finition de avec mon fichier de points équidistants au centième calculés de manière exacte. ça me permettrait de passer de 15h à 4h d'usinage (à vu de nez). Bref ça vaut la peine de réfléchir un peu plus, pour après aller plus vite.

Mais tout ça c'est écrit dans le document envoyé par Gaston48, je pense que ça vaut la peine que j'essaye sur CamBam aussi, merci Gaston! comme très souvent la réponse est en plein dans le mille ! :-D
 
D

DEN

Compagnon
@ Jean-Yves :

C'est une surface de came, donc ça doit-être lisse (il y a un rouleau qui roule dessus). Et effectivement autant de points, ce n'est pas nécessaire, en tout cas pas partout ... J'ai utilisé des points équidistants sur la trajectoire de l'outil pour garder des conditions de coupe identiques sur tout le parcours lors de l'ébauche dans la masse...

Et là pour la phase ébauche, je vais approximer, mais pour rester dans l'enveloppe de la courbe à +/- 2/100 ...

Puis quand j'avais fait la finition dernièrement, usinage en avalant, avec les listels (points équidistants cette fois-ci sur la courbe et pas sur le centre de la fraise), ça donnait très bien , donc l'ébauche peut-être plus grossière et plus rapide, et puis les 4-5 passes de finition en contournant , se rapprochant centième par centième de la courbe avec une fraise bien neuve.

De toute manière faudra essayer, peut-être que l'ébauche, influencera trop le résultat final, et je devrais m'en tenir à ce que j'ai faisais avant ...
 
D

DEN

Compagnon
Je viens de me calculer le rayon de courbure, c'est intéressant ... :shock: néanmoins, ça fonctionne, j'ai exploité aussi la propriété que pour une courbe parallèle à une autre, il suffit de soustraire la distance pour avoir le rayon de courbure de celle parallèle ... sinon ça devenait très lourd , il y aurait le morceau lié au vecteur normal à dériver (première et seconde) ... et là j'aurais peut-être laissé tombé la solution analytique ...
 
J

JeanYves

Compagnon
Bjr ,

Oui , c'est surtout l'etat de surface qui t'impose de prendre autant de point .
la forme pouvait etre suivie avec bien moins de point , plus rapidement , en restant dans l ' IT que tu as defini .

Mais Camban à l'air bien ? .

En poinçonnage c'etait moins exigeant ! :-D
 
D

DEN

Compagnon
Niveau quantité de point, j'ai préparé un fichier pour commander la même pièce en électro-érosion avec la distance entre points de 3 microns, c'est un script auto-cad que je génère.
Je suis arrivé au maximum de points permis pour une poly-ligne ! (100.000 pts) avec 3µ j'en ai environ 70.000 avec 2µ je suis au-delà des 100.000 ... Le hic est que l'entreprise à qui je veux commander ça, n'arrive pas à passer en CAM le fichier *.dxf. Je pense avoir trouvé le problème, je n'ai pas "fusionné" les segments de droite avec la commande "JOIN" ... , après ça, j'arrive à faire l'extrusion du solide à partir de la courbe, mais si je sauve le fichier en *.dxf il devient monstrueux (80Mo), je n'arrive même pas à le ré-ouvrir moi-même ... en *.dwg ça se ré-ouvre, mais ça prend au moins 10min ... si je laisse que le contour(2D), c'est plus léger mais j'imagine que leur logiciel de CAM a besoin de l'épaisseur pour calculer les vitesses d'avance ... Bref quelques aspects techniques à résoudre ... :roll:
Je leur aurait bien donné mon G-code directement, mais ils savent pas comment faire avec, j'imagine qu'ils ne connaissent pas à l'avance le diamètre du fil, et qu'ils le compensent après mesure sur la machine, puis peut-être qu'ils ont un G-code spécifique niveau mise à zéro ou autre ...
L'avantage chez-moi, je suis assez tranquille pour faire des essais , je peux même bidouiller une correction sur le g-code en X-Y si je vois que la pièce sort déformée (si j'arrive à comprendre le type de déformation), d'ailleurs j'ajuste la trajectoire en fonction de ce qui reste à enlever en fonction de ce qui a été réellement enlevé à la passe précédente pour les passes de finition... Un peu comme sur le tour où les dernières passes de finitions se font égales et on vérifie en mesurant s'il faut enlever un peu plus ou un peu moins à la passe suivante ...

P.S. : CamBam, j'ai pas encore essayé, je préfère pas trop m'éparpiller pour l'instant ... mais dès que j'ai un peu de temps je m'y mettrai , peut-être je vais essayer de récupérer le *.dxf et le traîter avec pour simplifier la courbe, mais j'ai peur de passer trop de temps à apprivoiser le nouveau logiciel ...
 
D

DEN

Compagnon
Merci aux modérateurs d'avoir déplacé le post, je savais pas trop où le caser ... C'est des maths et du g-code ... du CAD et du CAM ...
 
D

DEN

Compagnon
Ayant obtenu hier le rayon de courbure en chaque point de ma courbe, j'ai donc aussi trouvé le rayon de courbure mini à savoir 4.65mm ...

En prenant ce rayon mini comme le pire des cas pour une approximation par segments de droite, et ayant des segments de longueur de 5/100 , j'obtiens comme écart par rapport au cercle de référence : 6.7204*10-^5 mm

Le calcul c'est :

(4.65)^2 = (0.025)^2 + x^2 ; (pythagore : on trouve x)
err = 4.65 - x

Bref ça reste très honnête , donc comme Jean-Yves disait, ce n'est qu'une question d'état de surface ... et encore à voir ... A mon avis CamBam ne fera qu'une bouchée de ma courbe ...
 
D

DEN

Compagnon
Merci David !

Je sens que dès que j'aurai fini la mise en plan complète, je vais me mettre a faire des essais avec CamBam et ces explications détaillées me seront très utiles !
 
D

dh42

Compagnon
Re

Si tu a besoin d'aide, n'hésite pas.

Entre autre chose, CB permet de passer une liste de coordonnées de points depuis un tableur directement dans une "liste de points" Cambam. Liste de point qui peut ensuite être convertie en polylignes, puis cette polyligne peut alors être optimisée par insertion d'arcs.

http://www.screencast.com/users/dh42/folders/CamBam%20Video/media/98c4e48c-db6a-4b19-afe1-c3bbf24b20f2

PS: ctrl + V pour coller dans la liste de points Cambam

une fois la liste de points créée et sélectionnée (fin de la vidéo), ctrl + P pour la convertir en polyligne.

Utiliser le paramètre Fermée de la polyligne pour en faire un contour ouvert (faux) ou fermé (vrai)

++
David
 
Dernière édition par un modérateur:
D

DEN

Compagnon
Merci :smileJap: !

Je viens de terminer de modéliser et d'assembler toutes les pièces, je vais peut-être avoir un peu de temps pour installer et essayer CamBam.

En tout cas la technique décrite semble correspondre à 100% à ce que je veux faire ... donc il y a plus qu'à retrousser les manches !

Quant à l'erreur sur mes fichiers précédents c'était sans doute la commande "join" qui manquait (pour obtenir une poly-ligne unique), depuis j'arrive à récupérer et exploiter ma figure dans d'autres programmes qui ouvrent du *.dxf.
 

Sujets similaires

A
Réponses
37
Affichages
1 284
Jeandominiquelaure61
Jeandominiquelaure61
D
Réponses
9
Affichages
452
pascalp
P
M
Réponses
39
Affichages
1 706
kiki86
kiki86
U
Réponses
38
Affichages
2 293
Dodore
Dodore
g0b
Réponses
26
Affichages
1 667
Dodore
Dodore
M
Réponses
4
Affichages
881
martin claude
M
S
Réponses
30
Affichages
1 274
strahm
S
hozut
Réponses
19
Affichages
535
ramo56
R
Haut