Neue App: BezierAirfoilDesigner

BezierAirfoilDesigner

Eine Open-Source-App zum konvertieren von Profilkoordinaten in Bézier Kurven.

Welches Problem soll die App lösen?

Wer schon einmal probiert hat ein Flugmodell im CAD umzusetzen, kennt das Problem des Importierens der Profile.
Zuerst muss man eine Methode finden, um die Koordinaten in die Software einzulesen.
Hat man das gelöst, muss man die Punkte in eine Kurve umwandeln, meist wird eine Spline durch alle Punkte gelegt.
Will man die Ober- und Unterseite der Tragfläche einzeln modellieren, muss man die einzelnen Profile in Ober- und Unterseite trennen.
Meist erzeugt das eine kleine Unstetigkeit an der Nasenleiste, je mehr Koordinaten man hat, desto kleiner wird diese Spitze.
Man muss auch darüber nachdenken, wie viele Koordinaten das Profil haben sollte.
Zu wenig, und die Abweichung vom Original wird zu groß, zu viele und das Profil wird überdefiniert, was Probleme bei weiteren Designschritten erzeugt.
Selbst wenn man einen guten Prozess gefunden hat, ist die Spline-Kurve doch nie ganz glatt, es gibt immer kleine Wellen.
Diese werden dann auch auf die späteren Oberflächen übertragen.

1690386409913.png


Will man dann auch noch eine bestimmte Endleistendicke einstellen muss man alle Koordinaten verschieben oder um die Nasenleiste aufdrehen.
Insgesamt ist der Prozess nicht sehr leicht und die Ergebnisse sind meiner Meinung nach verbesserbar.

Was macht der BezierAirfoilDesigner?

Man kann normale .dat Profilkoordinaten in das Programm importieren.
Dann kann man entweder manuell, automatisch oder durch eine Kombination der beiden, zwei Bézier Kurven dem geladenen Profil anpassen.
Eine für die Ober- und eine für die Unterseite.

1690386617858.png


1690386881746.png


Dafür verschiebt man die Kontrollpunkte entweder per Maus oder gibt Koordinaten direkt in die dazugehörige Tabelle ein.

Unter "search" kann man einen rekursiven Algorithmus andere Positionen der Kontrollpunkte ausprobieren lassen, um den Error (Unterschied zum Referenzprofil) zu verringern. Search Top und Bottom suchen so lange nach neuen Punkten, bis die Verbesserung unter 5% liegt.
Dafür werden zuerst 3 andere Positionen pro Kontrollpunkt getestet.
Ist irgendwann nichts besseres dabei, wird die Anzahl der getesteten Punkte im gleichen "Suchradius" (nur vertikal) um 1 erhöht.

Mit auto search wird nach je einem Suchvorgang für Oben und Unten der Grad der Kurven um 1 erhöht
(ein Kontrollpunkt hinzugefügt), ohne dabei die Form der Kurve zu verändern.
Das wird so lange wiederholt, bis der Error unter 0,075 fällt.

Je nach Qualität und Komplexität des Referenzprofils dauert die automatische Anpassung zwischen 10min und 3h.
Bei qualitativ sehr schlechten Profilen kann die Abschlussgrenze nie erreicht werden, dafür gibt den stop Knopf.
Damit kann die aktuelle Suche abgebrochen werden.

Wenn die Suche abgeschlossen ist ...

... kann man die Kontrollpunkte als .bez.dat exportieren.
Diese Dateien sind genauso aufgebaut wie normale .dat Dateien und dank der gleichen Dateiendung kann man sie auch genauso wie normale .dat Dateien in die CAD Software importieren. Die Kurven lassen sich dann mittels "control point spline" (in Fusion 360, oder ähnlichen Kurventypen in anderer Software) zeichnen.

Momentan ist bei der Umsetzung von Bézierkurven mittels control point spline in Fusion 360 ein Limit bei 6 Kontrollpunkten.
Bei mehr Kontrollpunkten stimmen die Kurven nicht mehr überein. Ob es ein Fehler bei Fusion 360 ist, oder an dem Kurventyp liegt, den sie verwenden, weiß ich nicht.
Ich habe dieses Problem bereits angesprochen, vielleicht ändert sich da noch was.

Ergebnis im CAD

Die aus den Kontrollpunkten gezeichneten Profile sind sind schon "von Haus aus" in Ober- und Unterseite geteilt, das muss man nicht mehr Extra machen.
Die Krümmungsverteilung zeigt keine Wellen in der Oberfläche mehr.

1690390917389.png


Die Endleistendicke kann man einfach durch hinzufügen einer weiteren Bemaßung einstellen:

1690391089152.png


Sonstiges

Zusätzlich zum .bez.dat Format kann man die Kontrollpunkte auch als .bez Datei speichern.
Das erlaubt die Darstellung von Formen, bei denen Anfang und Ende der Kurven nicht identisch sind und nicht zwischen 0 und 1 liegen.
Anwendung liegt vielleicht bei der Erstellung von Flügelgrundrissen.

Außerdem kann man die Koordinaten der Bézier Kurven auch als .dat exportieren.
Dabei sollte man darauf achten, in welchem Programm man die Profile weiterverwenden möchte.
Der Profileditor von Frank Ranis akzeptiert maximal 450 Punkte und in xflr5 hört es schon bei 300 auf.

Wem wichtig ist, dass alle Punkte auf beiden Kurven die gleichen X-Koordinaten haben, sollte darauf achten,
dass auch alle Kontrollpunkte die gleichen X-Koordinaten haben.

Das Programm kann nicht nur für die Vereinfachung und Verbesserung der Prozesse im CAD verwendet werden.
Man kann es auch dazu benutzen, um vorhandene Profile zu glätten. Unter Umständen wird dadurch die Performance des Profils verbessert.

Installation

Für Windows einfach die passende .exe Datei von GitHub unter Releases herunterladen.

Vor der Version v0.9 hatte ich bei den Veröffentlichungseinstellungen "Frameworkabhängig" ausgewählt.
Wer frühere Versionen ausprobieren möchte muss dann auch noch .NET 7 herunterladen.

Die App ist in Visual Studio mit C# als Winforms Projekt erstellt.
Ob sie unter Linux mit Wine läuft weiß ich nicht.
Bei bisherigen Tests hat es nicht geklappt.
In einer VM unter MacOS läuft es.



Auch ich würde mich über Feedback und Anregungen zu weiterer Funktionalität sehr freuen.
Fehler im Programm und kleinere Erweiterungswünsche können unter Issues gemeldet werden.
Wer diese selber beheben möchte, kann auch einen Pull request erstellen.


Grüße,
Marc
 
Sehr cool! Und gerade für Fusion wahrscheinlich eine riesige Erleichterung. Mir ist das immer abgeschmiert, wenn zu viele Profil-Splines geladen waren, oder die Performance brach bis zur Unbenutzbarkeit ein. Werde bei Gelgenheit ausprobieren, vielen Dank!
Stefan
 
Vielen Dank Marc,

das probiere ich sicher mal aus. Auf jeden Fall sind die Bézier Splines die schönste Lösung im CAD. Am Ende des Tages fährt die Fräse ja ein Programm aus x,y,z Koordinaten ab - was denkst du, helfen die Bézier Splines tatsächlich auch ein besseres Fräsergebnis zu erzielen?

Viele Grüße,
Benjamin
 
Hallo Benjamin,

könnte mir gut vorstellen, dass es einen Unterschied macht. Das hängt aber bestimmt auch von der Auflösung der Tesselierung ab.
Wenn die groß genug ist könnten die Wellen in der Oberfläche auch darin erkennbar sein.

Ich denke aber, dass es sich trotzdem lohnt diese Kurven zu benutzen, auch wenn es beim Fräsen keinen großen Unterschied machen sollte.

Nicht nur für die Performance der CAD Software, sondern auch, wenn man die Position des Profils / die Profiltiefe variabel definieren will.
Die einzelnen Kontrollpunkte kann man anhand der Profiltiefe dynamisch Bemaßen, wenn sich die Profiltiefe ändert, skaliert sich das Profil automatisch mit.
 

Viktor

User
Hallo Marc, hört sich sehr spannend an, werde ich probieren.
Ich habe bisher .dat in .dxf mit dem Tool von Martin Hepperle umgewandelt diese importiert und als Grundlage für das händische zeichnen der Splines genommen.
Ob die Bezier Splines ein besseres Fräsergebnis liefern? Jein. Es gibt ein Paar Schritte an denen "gerundet" bzw. vereinfacht wird und man sollte immer alle Schritte im Blick behalten. Der Schritt von .dat zu Spline ist einer, dann möchte ich zumindest nicht unbedingt eine Spline haben die auf 100 Punkten basiert weil es schwer händelbar ist. Also wird sie vereinfacht - mit einer vorgegebenen Tolleranz. Man hat ja in CAD eine bestimmte Profiltiefe, also werden aus dimensionslosen Ungenauigkeiten der .dat Datei, Toleranzen in hundertsten vom Millimeter. Möchte man an der Wurzel die gleiche Abweichung haben wie an der Flächenspitze kann an der Flächenspitze stärker vereinfacht werden...usw, usw. Ich für mein Teil habe am Anfang mit maximalen Genauigkeiten gearbeitet - wenn man sich aber hinsetzt und eine Überschlagsrechung macht und die Dateien vereinfacht, werden sie schlanker und man kann damit vernünftig arbeiten. Ich habe aber auch schon vergessen die Toleranz bei CAM anzupassen und mich über "eckige" Urmodelle gewundert :-) Zum Glück haben wir es vor dem schleifen bemerkt
 

Dennis Schulte Renger

Vereinsmitglied
Hallo Marc,

Ich glaube das ist by far das beste Tool, welches ich bisher für die Aufgabe gesehen habe.

Ich habe das Ganze gerade mal mit Solidworks getestet.

Leider habe ich keine Möglichkeit gefunden die Kontrollpunktkoordinaten automatisch als Datei zu importieren, sodass man, soweit ich das sehe, in Solid die Koordinaten der Kontrollpunkte manuell kopieren muss.
Wichtig ist, dass man eine obere und eine untere Kurve erstellt. Solid verbindet sie dann automatisch zu einer geschlossenen Kurve zum extrudieren.

Das löst im Konstruktionsprozess in Solid so unendlich viele Probleme. Von Performance bis zu Skalierungen.
Habe die Koordianten mal testhalber in Abhändigkeit von der Profiltiefe bemaßt. Genial!

Bisher bin ich von dat zu DXF gegangen und von da aus in CAD um dann eine Spline zu zeichnen.
Der Weg über die Bezier Splines (in Solid "Stil-Splines" bzw. "Style-Splines") wirkt auf den ersten Blick deutlich sinnvoller.

Danke für das Tool und deine Arbeit. Das wird seeeehr gut weggelegt und gesichert :)



1690446548770.png
 
Moin Dennis

Cool, dass es so gut funktioniert.
Wenn du normale .dat importieren kannst sollte es mit .bez.dat eigentlich auch funktionieren.
Aber mit nur 16 Punkten ist das manuelle Bemaßen auch kein großes Problem.

Es sieht auch so aus, als hätte Solidworks kein Problem bei Kurven mit mehr als 6 Kontrollpunkten.
So sieht es in Fusion 360 aus, eigentlich sollten die beiden Kurven identisch sein.

1690449423802.png


1690449544107.png


Hier sieht man nochmal, wie die Kurven mit 3 - 6 Kontrollpunkten direkt übereinander liegen.
Und die mit 7 - 10 weit weg von den anderen und auch alle unterschiedlich.

Ich bin mir zwar ziemlich sicher, dass mein Programm nicht die besten Kontrollpunkte findet, aber einfach anzuwenden ist es schon.
Hatte bei meiner Recherche dieses Projekt gefunden:


Die Generierung der Kontrollpunkte ist in dem Programm bestimmt viel schneller, mit kleineren Abweichungen.
Leider hab ich keine Idee, wie ich das auf meinem PC zum laufen bekommen soll.
 

Dennis Schulte Renger

Vereinsmitglied
Moin Marc,

Ich lasse dein Programm gerade mal mit dem oben gezeigten Profil weiterlaufen.
Hatte vorhin abgebrochen, um den Prozess im Solid mal auszuprobieren.

Bin mal neugierig wie lange das dauert und was für Abweichungen dabei rauskommen.

Generell bin ich aber kein Genauigkeitsfreak. Da bestimmen am fertigen Bauteil normalerweise ganz andere Dinge die Toleranzen als der Profilimport.

Solid kann nativ keine dat importieren. Zumindest weiß ich und das Internet nicht wie es geht. Ich habe allerdings ein Makro gefunden, welches Punktwolken importieren kann.
Mit ein bisschen Nacharbeit im Editor bzw. Excel kann ich die dat Datei für das Makro anpassen.
Die muss man dann ja nur noch abklicken.

Bei der Bearbeitung der dat Datei hab ich auch gleich die Skalierung gemacht.

Habe gerade drüber nachgedacht, ob man die Koordinaten in deinem Programm nicht gleich optional auf die entsprechende Profiltiefe skalieren kann.
Geht auch im CAD, ist aber zumindest im Solid deutlich unkomfortabler, da jeder Wert einzelnd multipliziert werden muss.

In deinem Programm müsste man ja nur jeden Wert mit der gewünschten Profiltiefe multiplizieren, oder?
Dann ist das Format natürlich nicht mehr "dimensionslos", aber die Koordinaten der Punkte würden beim Import gleich passen.

Gruß
Dennis

P.s.:
Wenn du magst, kannst du mir mal die Koordinaten der identischen Kurven mit unterschiedlichen Punkteanzahlen zusenden.
Laut Hilfedatei kann Solid bis zu 61 Kontrollpunkte. Ob die Kurven identisch aussehen weiß ich nicht, da ich die Mathematik hinter den Bezierkurven zu wenig verstehe um die Koordinaten von identischen Kurven selber zu erzeugen ;)
 
Zuletzt bearbeitet:
Das ist eine gute Idee, auch nicht sehr schwierig umzusetzen.
Möchtest du das mal als Issue bei GitHub eintragen?

Im Anhang sind die ganzen Dateien für identische Kurven.
Ist eine zip, musst nur noch die richtige Endung dran schreiben.
 

Anhänge

  • airfoil files.txt
    29,4 KB · Aufrufe: 50
Zuletzt bearbeitet:

Dennis Schulte Renger

Vereinsmitglied
Moin Mark,

Ich hab mir deine Kurven mal angeschaut.

Im Solid liegen alle Kurven sauber übereinander

1690455600884.png


Zumindest für Solid sollte es dann keine Probleme geben. Wie gesagt, angeblich bis 61 Kontrollpunkte möglich.

Gruß
Dennis
 
Zuletzt bearbeitet:
Super, dann hat Fusion wirklich irgendein Problem. Hatte schon gezweifelt, ob es an meinem Programm liegt.

Den Grad der Kurve kann man rechts mit den + und - Knöpfen verändern. Verringern funktioniert nicht so gut, sollte man lieber lassen, hab ich aber trotzdem mal drin gelassen.
 

Jojo26

User
Hallo Marc,

... klasse Arbeit, klasse App!

"Bezier is the way to go" 😉

Zuletzt hatte ich versucht, über Cubic-Splines ein Profil zu idealisieren / glätten, aber das Problem ist, dass man bei zu wenig Punkten keine gute Appproximation, insbesondere an der Nase hinbekommt, bei zu vielen Punkten schnell Unstetigkeiten des Originals übernommen werden. Bezier-Kurven bringen von "Haus aus" viele gute Eigenschaften für eine Profil-Parametrisierung mit und sind einfach auch super intuitiv...

Ich könnte mir vorstellen, dass für die automatisierte Approximierung ein Partikel-Schwarm-Ansatz vielversprechend sein könnte. Bei Xoptfoil-JX gibt es eine (Test-)Funktion bei der ein Profil via Hicks-Henne-Funktion basierend auf einen Ausgangsprofil möglichst gut approximiert wird. Die Laufzeit ist bei 30 Variablen bei 10-30s abhängig von der gewünschten Genauigkeit ...

Noch ein kleiner Seitenhinweis zu Profil-Approxiamtion mit Splines:

In Xflr5 schlummert ein kleines Schätzchen, das "Spline-Profil". Mit ihm kann sehr schnell ein Profil via Spline geometrisch / optisch manuell nachgebildet und dann einfach verändert werden. Die geometrische Qualität des so erzeugten Profils , hier vor allem auch ein stetiger Krümmungsverlauf, ist hervorragend. Die Ausgabe ist am Ende dann halt "nur" im .dat-Format...

Viele Grüße

Jochen
 
Moin Jochen,

dankeschön. Ja, Bezierkurven sind schon sehr cool.
Dabei gefällt mir der DeCasteljau Algorithmus besser als die Bernstein Polynome (so viele komische Namen 😅)

Partikelschwarmoptimierung klingt wirklich sehr vielversprechend. Besonders, dass damit das globale Minimum gesucht wird, nicht nur lokale.
Sowas könnte man bestimmt als alternativen Suchmodus implementieren, den sich der Benutzer dann aussuchen kann.
Muss ich mal ein bisschen weiter recherchieren. Die kurze Laufzeit ist auch verlockend.
Die Anlehnung an "Boids" ist spannend, auch das Video von Sebastian Lague dazu.

Das Spline Profil in xflr5 kannte ich auch schon. Hab mich aber gewundert, warum man davon nicht die Kontrollpunkte speichern kann.
Selbst wenn man dabei nicht ans CAD denkt wäre es doch praktisch die gleichen Kontrollpunkte auch in einem anderen Projekt als Basis benutzen zu können. Naja, so ist das halt. (Theoretisch könnte man Profile auch nur noch als Kontrollpunkte veröffentlichen, dann kann sich jedes cfd Tool die Punkte auf der Kurve selber ausrechen, mit der Anzahl an Punkten die die für optimal für ihre Methode halten.)

Grüße,
Marc
 
So, ich hab jetzt ein Workaround gefunden, mit dem man auch in Fusion 360 Bezierkurven mit mehr als 6 Kontrollpunkten als control point spline darstellen kann. Das funktioniert aber nur bis zu maximal 10 Kontrollpunkten.

1690565331501.png

Hier ein Bild aus Wikipedia. Die control point splines werden intern noch in einzelne Kurvenstücke geteilt, wenn der Grad der Kurve kleiner ist, als die Anzahl der Kontrollpunkte - 1. Das macht Fusion 360 mit Kurven, die mehr als 6 Kontrollpunkte haben.

Das wird einem auch unten angezeigt, wenn man sie anklickt.
1690565885520.png


Eine control point spline ist einer Bezierkurve nur äquivalent, wenn ihr "degree" dem einer Bezierkurve entspricht.
Also Anzahl der Kontrollpunkte - 1. Wenn das gegeben ist, hat die spline auch keine Unterabschnitte.
Fusion erhöht beim zeichnen einer control point spline den Grad der Kurve aber nur bis 5. Bei mehr als 6 Kontrollpunkte bleibt der Grad bei 5.
Deshalb war das auch das maximum, bei dem die Kurven noch übereingestimmt haben.

Hier der Workaround:
Man zeichnet zuerst eine control point spline mit nur 2 Punkten.
1690570035712.png


Dann wählt man in dem Kontextmenü den Grad der Kurve aus, den man haben will.
Um eine Bezierkurve zu erstellen ist das wieder Anzahl der Kontrollpunkte - 1.

1690570088630.png


Das fügt dann zusätzlich Kontrollpunkte in die Kurve ein.

1690570183641.png


Diese kann man dann an die gewünschten Positionen schieben.
Hier im Vergleich zu der vorher getesteten Kurve mit 10 Kontrollpunkten.

1690570248010.png

1690570261738.png


Die Kurve stimmt dann mit der Bezierkurve überein.
Das funktioniert nur bis zu 10 Kontrollpunkten, weil man in dem Menü maximal 9 auswählen kann.
Bis zu 6 Kontrollpunkten braucht man es noch nicht mit diesem Workaround zu machen, bis dahin stimmt ja der automatisch eingestellte Grad.


Ich hoffe Autodesk ändert noch etwas an ihrem Programm, damit man auch mit mehr als 10 Kontrollpunkten Bezierkurven erstellen kann.
 
Hallo Michael,
ja, die Positionen meine ich.

Bist du dir sicher, dass du die richtige Version runtergeladen hast?
Der Name von der für PCs mit Arm CPU sieht auf den ersten Blick sehr ähnlich aus, wie win-x64.
 

wersy

User
Hallo Marc,

ich habe jetzt mal 2 Stunden rechnen lassen – die Oberseite ist perfekt!
Das ist die Oberseite vom SD7080:

CP Spline .png




Da ich „auto“ gewählt habe, würde er wohl erst dann zur Unterseite wechseln, wenn der Fehler unter 0,075 fällt. Habe also abgebrochen und „bottom“ gestartet.

Ideal wäre jetzt noch, wenn man ein Script hätte, das die Positionen benutzt, um die CP Splines in Fusion zu erzeugen.
Könntest du das auch noch programmieren?

Ich finde es sehr faszinierend, die Iterationsschritte grafisch verfolgen zu können.
Nur, wie funktioniert das?
Hängt das mit den Punkten auf den roten Kurven zusammen? Wird jeweils der Punkt, der einem Splinepunkt am nächsten liegt, zur Annäherung an eben diesen Splinepunkt benutzt?

Für FreeCAD gibt es bereits jede Menge Scripte. Besonders begeistert mich die Anwendung zum Glätten von Rümpfen.
Für einen Schiffsrumpf habe ich davon schon profitieren können:

https://forum.freecad.org/viewtopic.php?t=16100&sid=b0d3d4ebd69a117e3a9e6757d819491b&start=20

Könntest du so etwas auch für Fusion programmieren?
Das wäre der Hammer. Bisher gibt es nämlich keine Möglichkeit, einen Rumpf vernünftig nach Spanten zu zeichnen.

Ein weiteres Glättung Tool für FreeCAD ist für Flugzeugrümpfe verfügbar. Ist aber eine recht langwierige Angelegenheit.
 
Ansicht hell / dunkel umschalten
Oben Unten