Neue App: PlanformCreator2

Jojo26

User
PlanformCreator „2“. Gibt’s es denn auch eine Version „1“? Ja, die gibt es! Matthias Boese entwickelte im Rahmen des „Strak Machine Projekts" den PlanformCreator für die Definition eines Tragflächen-Grundrisses. Da ich für das Flächendesign von VJX.glide endlich einmal eine komplette „Tool-Chain“ einzusetzen und nicht mehr von „Hand“ rumfriemeln wollte, freute ich mich auf den Einsatz des PlanformCreator. Leider stellte Matthias gerade zu diesem Zeitpunkt die Weiterentwicklung ein, so dass ich dann selbst die für mich notwendigen Änderungen im Programm vornahm. Irgendwann wurden diese so viel und immer schwieriger im bestehenden Code zu implementieren, dass der Gedanke reifte, den Planform Creator nochmal neu aufzusetzen, mit den gemachten Erfahrungen und zukünftigen Erweiterungen im Hinterkopf. Der „PlanformCreator2“ war geboren und soll nun hier vorgestellt werden:

PlanformCreator2

Eine Open-Source-App zum Tragflächendesign


Was macht der PlaneformCreator2?

Der Planform Creator 2 – kurz PC2 – ist ein Tool, um den Tragflächengrundriss eines Modells zu entwerfen. Mit ihm können Ideen für eine neue Fläche recht einfach – auch grafisch - umgesetzt werden, um dann das Ergebnis mit FLZ_vortex oder Xflr5 aerodynamisch zu überprüfen. Daraus resultierende, eventuelle Änderungen können schnell durchgeführt werden, um dann erneut eine aerodynamische Analyse zu starten.

PC2_usecase.png

Ist man mit dem Ergebnis zufrieden, kann der Entwurf einschließlich der verwendeten Profile als dxf-Datei an ein CAD-System übergeben werden.

Ganz im Sinne von „Separation of Concern“ kennt PC2 keine aerodynamischen Eigenschaften der Tragfläche und der verwendeten Profile. Er kümmert sich ausschließlich um die Geometrie und überlässt die Aerodynamik den Spezialprogrammen.


Parametrisches Modell

Im Unterschied zu einem “Malprogramm“ wird der Tragflächengrundriss durch Parameter, wie beispielwese „Spannweite“, „Wurzeltiefe“ oder „Pfeilung der Scharnierlinie“, definiert. Die Tiefenverteilung entlang der Spannweite wird durch eine mathematische Funktion ebenfalls über Parameter gesteuert.

Der große Vorteil liegt darin, dass sich die Parameter unabhängig voneinander ändern lassen und so ein schnelles, spielerisches Herantasten an den gewünschten Tragflächengrundriss möglich ist.


Form follows Function

Dies gilt beim PlanformCreator2 im wahrsten Sinne des Wortes: Der Grundriss der Fläche ergibt sich aus einer Verknüpfung von Funktionen und Parametern.

Tiefenverteilung

Zunächst wird die Tiefenverteilung entlang der Spannweite festgelegt.
Die geometrische Tiefenverteilung bestimmt direkt und maßgeblich die Auftriebsverteilung einer Tragfläche entlang der Spannweite. Der lokale Auftriebskoeffizient ist abhängig vom lokalen effektiven Anstellwinkel (beeinflusst über die Flächenform) und von der lokalen Re-Zahl, die sich proportional zu Flächentiefe ändert.

Für die Definition der Tiefenverteilung stehen unterschiedliche „Planform Typen“ zur Verfügung:
  • Bezier-Kurve: Mit der Starttangente an der Wurzel und der Endtagente an der Flächenspitze wird der Kurvenverlauf (grafisch) festgelegt
  • Bezier mit gerader Hinterkante: Eine Unter-Variante von „Bezier“ beim der spätere Tragflächengrundriss eine gerade Hinterkante hat
  • Trapezoid: Zur Definition eines (Mehrfach-) Trapezflügels. Die Flächentiefe wird hier über die Tiefe der einzelnen Segmente festgelegt.
Im PlanformCreator2 wird die Tiefenverteilung immer normiert dargestellt. Sowohl Spannweite als auch Flächentiefe bewegen sich zwischen 0 und 1. Das hat den großen Vorteil, dass Tiefenverteilungen – auch unterschiedlicher Tragflächenentwürfe – unverzerrt miteinander verglichen werden können.

Normalized_chord_distribution.png
Definition der normalisierten Tiefenverteilung mit Hilfe eine Bezier-Kurve

Scharnierline – Hinge Line

Die Scharnierlinie ist die wichtigste „Konstruktionsline“ des PC2. Durch die Festlegung der Klappentiefe an Wurzel und Flächenspitze wird, bildlich gesprochen, die Tiefenverteilung an der Scharnierline aufgefädelt, wodurch man bereits einen finalen Flächengrundriss erhält.

Flap_depth_controlling_planform.png
Die Klappentiefe an Wurzel und Flächenspitze beeinflusst stark den Flächengrundriss

Verändert man schließlich noch den Winkel der Scharnierlinie entstehen mit wenigen Mouse-Klicks die unterschiedlichsten Flächenformen

Hinge_angle_controlling_planform.png


Alles Banane

Eine kleine Spezialität ist die „Banana-Funktion“. Mit ihr lässt sich die Tragfläche in Spannweitenrichtung wie eine Banane verbiegen, ohne dabei die festgelegte Tiefenverteilung zu ändern. Die Funktion dient eigentlich nicht der optischen Verschönerung der Tragfläche, sondern sie erlaubt die normalerweise lineare Klappentiefenverteilung entlang der Spannweite sehr flexibel zu modifizieren.

Banana_function.png
Die "Banana-Funktion" zur Modifikation der Klappentiefe entlang der Spannweite


Wing Sections – Tragflächenabschnitte

Die Profile der Tragfläche werden an „wing sections“ definiert. Eine Tragfläche hat immer mindestens 2 „wing sections“: Wurzel und Flächenspitze. Dazwischen können beliebig viele weitere angelegt werden. Es gibt zwei Typen von „wing sections“, die definiert sind durch ihre …

… Spannweitenposition: Die Wing Section bleibt immer an dieser Stelle, auch wenn beispielsweise die Spannweite oder Tiefenverteilung geändert wird

… Flächentiefe: Die Wing Section wandert bei Veränderung des Grundrisses mit, um immer die gleiche Flächentiefe zu haben. Diese Eigenschaft ist besonders hilfreich, um ein Profil an einer bestimmten Flächentiefe (=Re-Zahl) zu haben.

Wing_sections_and_Flaps.png
Bei dieser Tragfläche wurde neben Wurzel und Flächenspitze, 4 weitere „wing sections“ definiert: 2 mit fixer Position und 2 mit fixer Flächentiefe. Die wing sections wurden einer Flap-Gruppe zugeordnet wodurch dann auch die einzelnen Flaps dargestellt werden können.

Schließlich kann eine Wing Section noch einer „Flap-Gruppe“ zugeordnet werden. Die so definierten Flaps haben im PC2 keine weitere Funktion und dienen nur der Anzeige. Beim Export zu FLZ_vortex wird die Flap-Definition allerdings mitgegeben und kann dort zur Simulation von Klappenausschlägen verwendet werden.


Profile

Einer Wing Section kann entweder ein festes Profil zugeordnet werden oder man lässt das Profil offen. In dem Fall wird für diese Wing Section ein „Strak-Profil“ erzeugt, das aus Mischen des linken und rechten Nachbar-Profils entsteht. Das „Mischungsverhältnis“ wird aus dem Verhältnis der jeweiligen Flächentiefen der Wing Sections abgeleitet.

Wing_sections_and_Airfoils.png
Die Wing Sections einer Fläche mit den zugehörigen Profilen. Das Profil an „Section 3“ entsteht durch Mischen von JX-GP-100 und JX-GP-055. Den Profilen wurde eine „nick name“ – hier „GP“ – vergeben.

Airfoils_in_wing_sections.png
Die Profile in den Wing Sections in einer maßstabsgerechten Darstellung.

Optional kann den Profilen einer Tragfläche ein kurzer „nick name“ vergeben werden. Die Profile an den Wing Sections bekommen dann einen Nummern-Zusatz zum „nick name“, der aus einer Re-Zahl-Angabe für die Wurzel entsteht (Basis ist die prozentuale Flächentiefe einer Wing Section zur Wurzeltiefe).

Alle Profile, einschließlich der erzeugten Strak-Profile, können am Ende als .dat-Datei exportiert werden. Sehr praktisch ist dabei das optionale Einstellen einer durchgängig Hinterkanten-Dicke („Te gap“) in mm, was eine häufig notwendige manuelle Nacharbeit der Profile erübrigt.

Im Rahmen des Projekts ist auch der „AirfoilEditor“ entstanden, mit dem typische Profilmodifikationen direkt im PlanformCreator2 durchgeführt werden können.

AirfoilEditor_App.png

Der AirfoilEditor kann auch als eigenständiges Programm aufgerufen. Verknüpft mit der Dateiendung „.dat“ fungiert er dann auch als smartes Anzeigeprogramm für Profile. Der AirfoilEditor wird an anderer Stelle noch etwas ausführlicher vorgestellt werden.


Übergabe an FLZ_vortex und Xflr5

Einer der wichtigsten Funktion des PlanformCreator2 ist der Export der definierten Tragfläche an FLZ_vortex oder Xflr5 zur aerodynamischen Berechnung in diesen Programmen. Die Tragflächen-Definition wird dabei jeweils „mundgerecht“ für das jeweilige Programm aufbereitet.

Beide Programme idealisieren eine Tragfläche durch Trapez-Segmente. Im Fall einer stark gekrümmten Vorder- oder Hinterkante kann das zu beträchtlichen geometrischen Abweichungen und damit Ungenauigkeiten der Berechnung führen. PC2 versucht eine solche, zu hohe Abweichung zu erkennen…

Xflr5_export_warning.png
Export einer Tragfläche nach Xflr5. Gelb markiert sind die Panel-Segmente, die durch die Idealisierung als Trapeze eine zu hohe Abweichung von der originalen Flächenform haben

… woraufhin man mit wenigen Klicks zusätzliche Wing Sections anlegen sollte, um eine deutlich bessere Idealisierung zu bekommen …

Xflr5_export_ok.png
Mit zusätzlichen Wing Sections wird die Idealisierung des Tragflächengrundrisses deutlich verbessert.

Die Generierung der Panels in x- und y-Richtung kann durch die üblichen Verteilungsfunktion „sinus“, „cosinus“ und „gleichförmig“ weiter gesteuert werden.

Eine Besonderheit beim Export findet noch an der Flächenspitze statt: Ist diese zu spitz, wird die Flächenspitze kurzerhand abgeschnitten, um an der Flächenspitze eine noch für die Programme handhabbare Flächentiefe zu bekommen (Problem u.a. zu geringe Re-Zahl für eine aerodynamische Berechnung).

Bei Xflr5 müssen die Profile getrennt importiert und eine Polaren-Berechnung durchgeführt werden.

FLZ_vortex kann wahlweise direkt aus PC2 gestartet und eine Berechnung darin angestoßen werden (Vorausaussetzung ist die Verknüpfung der Dateiendung „.flz“ mit dem Programm FLZ_vortex.


Export als dxf-Datei

Hat man das Tragflächendesign abgeschlossen, kann die neue Tragfläche als dxf-Datei an ein CAD-Programm übergeben werden. Die verwendeten Profile werden dabei optional in die Zeichnung eingefügt und / oder als .dat-Datei zusätzlich exportiert.

DXF_export.png
Der erzeugte Flächengrundriss sollte im CAD-Programm nicht direkt für eine 3D-Konstrution verwendet werden, da die Konturlinie durch viele kleine Geradenstückstücke approximiert wird. Besser ist es, im jeweiligen CAD-Programm einen sanften Spline über Vorder- und Hinterkante zu legen.


Die App

Noch ein kurzer Blick auf die Anwendung:

PlanformCreator2_App.png

Es wurde versucht eine möglichst einfache, intuitive Bedienung umzusetzen, um das Programm und den Entwurf einer neuen Tragfläche „spielerisch“ erforschen zu können.

Mit den oberen Tabs wird zwischen den unterschiedlichen Darstellungsansichten gewechselt. Links (im „View“-Bereich) befinden sich die Auswahl-Schalter, was in der jeweiligen Ansicht dargestellt werden soll. Mit der Zoom- und Pan-Funktion kann die Darstellung vergrößert oder verschoben werden.

Links unten befinden sich die üblichen Datei-Funktionen („File“). Hier wird beispielsweise auch der Export zu Xflr5 aufgerufen.

Im unteren Hauptbereich erfolgt die Eingabe bzw. Modifikation der Tragflächen-Parameter. Die wichtigsten Parameter können alternativ auch direkt im Diagramm mit der Maus geändert werden (Schalter „Mouse helper“ im „View“-Bereich)

In der Installation enthalten sind zwei Beispielprojekte …
  • F3F-Fläche „VJX.glide“
  • Nurflügel-Fläche „Amokka-JX“ mit gerader Hinterkante
… mit denen man sich schnell einen Überblick über die Möglichkeiten des PC2 verschaffen kann.


Der aktuelle Entwicklungsstatus

Der PlanformCreator2 ist noch ein recht junges Programm, das in den vergangenen 6 Monaten entstanden ist. Der Funktionsumfang erlaubt mir inzwischen ein Großteil der bisherigen „Friemelarbeit“ beim Tragflächendesign zu automatisieren bzw. deutlich zu beschleunigen.

Nur schwer einschätzen kann ich allerdings, wie hoch der grundsätzliche Nutzen des PC2 für Andere ist.

Daher würde ich mich über Feedback und auch Anregungen zu weiterer Funktionalität sehr freuen – und natürlich auch über Fehler (von denen es sicherlich noch Einige gibt). Eine große Unterstützung wäre, wenn Fehler und kleinere Erweiterungswünsche direkt auf Github und Issues erfasst werden würden, um den „Überblick“ zu behalten.

Eine grundsätzliche Diskussion über den Nutzen des PC2 sollte gerne hier auf RCN geführt werden.


Installation

Der PlanformCreator2 ist in Python geschrieben und benötigt normalerweise eine aktuelle Python-Installation

Für Windows kann allerdings eine fertig gebaute Exe-Version inklusive aller benötigten Python-Dateien von https://github.com/jxjo/PlanformCreator2/releases als zip-Datei geladen werden. Diese zip-Datei wird dann einfach in ein Unterverzeichnis „entzippt“. Anschließend kann „PlanformCreator2.exe“ (oder auch „AirfoilEditor.exe“) angeklickt werden.

Möchte man die vorhandene Python-Installation nutzen, lädt man sich nur den Source code von https://github.com/jxjo/PlanformCreator2/releases in ein Verzeichnis. Wenn noch nicht bereits installiert, sind noch folgende Python-Module zu installieren:
pip3 install numpy
pip3 install matplotlib
pip3 install customtkinter
pip3 install termcolor
pip3 install colorama
pip3 install ezdxf


So weit dieser erste kurze Überblick zum PlanformCreator2.

Have fun! 😉

Jochen
 
Moin Jochen

Vielen Dank, das sind super Programme.
Der Planform Creator vereinfacht die Erstellung von Flügelgrundrissen doch enorm.
Die GUI ist visuell auch sehr ansprechend!

Ich hatte mal eine einfache Excel Tabelle zum erstellen von überelliptischen Profiltiefen geschrieben.
Vielleicht kann man das als einen weiteren Planform Typen hinzufügen.
Aber eigentlich kann man Ellipsen auch ganz gut mit Bézier Kurven nachbilden.

Hab auch schon von anderen gehört, die den Airfoil Editor fleißig zum repaneln und modifizieren von Profilen benutzen.

Grüße,
Marc
 

Anhänge

  • Überelliptische Profiltiefen.xlsx
    34,4 KB · Aufrufe: 130
Zuletzt bearbeitet:

Jojo26

User
@Marc Frank

Hallo Marc,

... danke für die Blumen! 😉 Dein Programm ist aber auch nicht von schlechtern Eltern...🚀
Klasse ist ja, dass gerade neue Ansätze / Anwendungen entstehen. Eine App jagt die andere...

(ich werd Dich die Tage noch direkt anschreiben. Vielleicht können wir ja etwas gemeinsam machen?)

Eine Planform mit einer Ellipse als mathematische Grundfunktion ist im Planformcreator2 zur Zeit schlafen gelegt.
Es hat sich herausgestellt, dass der Ansatz zu unflexibel und unübersichtlich wird, wenn man versucht, eine Ellipse durch Zusatzfunktionen zu deformieren, um beispielsweise gezielt den Tip- oder Wurzelbereich-Bereich einer Tragfläche zu modifizieren. Das geht mit einer Bezierkurve viel einfacher und intuitiver (mit der Maus) ...

Viele Grüße

Jochen
 
Hallo Jochen,

genial, vielen Dank für das Entwickeln und Teilen dieser tollen Software. Ich freue mich besonders über die Umsetzung des Open-Source-Gedankens und darüber, dass die Software plattformunbhängig designt ist und damit auch auf meiner Linux-Umgebung läuft. ("Isch 'abe gar keine Windows ....")

Für alle, die das Programm auch auf Linux nutzen möchten, hier ein paar Hinweise, denn bei mir lief es nicht auf Anhieb und es gab nach dem Start Fehlermeldungen bzw. funktionerte danach im zweiten Schritt das Laden von Dateien nicht. Letztlich war es ein Versionsproblem bei den Python-Bibliotheken, was leider öfter mal auftritt.

Meine Software-Umgebung ist relativ neu:
Linux Mint 21.2 Victoria base: Ubuntu 22.04 jammy

Trotzdem, wer so wie ich, die Meldung bekommt

Traceback (most recent call last):
File "/home/thomas/Dokumente/Modellbau/PlanformCreator2-0.9.4/PlanformCreator2.py", line 48, in <module>
from common_utils import *
File "/home/thomas/Dokumente/Modellbau/PlanformCreator2-0.9.4/modules/common_utils.py", line 9, in <module>
from colorama import just_fix_windows_console

ImportError: cannot import name 'just_fix_windows_console' from 'colorama' (/home/thomas/.local/lib/python3.10/site-packages/colorama/__init__.py)

... muss eine neuere Version von colorama installieren, bei mir ging es erst > 0.4.6:
> pip3 install colorama==0.4.6

Danach, juhuuu, startete das Programm, aber es gab noch Probleme beim Öffnen der "Examples"
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
return self.func(*args)
File "/home/thomas/.local/lib/python3.10/site-packages/customtkinter/windows/widgets/ctk_button.py", line 554, in _clicked
self._command()

File "/home/thomas/.local/lib/python3.10/site-packages/ezdxf/colors.py", line 5, in <module>
from typing_extensions import Self

ImportError: cannot import name 'Self' from 'typing_extensions' (/usr/lib/python3/dist-packages/typing_extensions.py)

Hier half ein Update der "typing_extensions":

> pip3 install typing_extensions==4.0.0

Jetzt läuft es bei mit bisher einandfrei.
Ich hoffe, ich konnte dem einen oder anderen Anwender weiterhelfen.

Viele Grüße
Thomas
 

Jojo26

User
Hallo Thomas,

... klasse, dass Du den 'Planform Creator 2' (und den 'Airfoil Editor'?) unter Linux zum Springen gebracht hast!
(Leider habe ich keine Linux-Installation, um es selbst testen zu können.)

Eigentlich bin ich davon ausgegangen, dass es ausreichend ist, die notwendigen Module (Packages) in der neuesten Version zu installieren bzw. upzugraden - also mit pip install --upgrade <package-name>. War es bei Dir notwendig, auf eine bestimmte Version zu gehen?

Viel Erfolg beim Entwerfen der neuen "Super-Flächen" mit den dazugehörigen "Edel-Profilen"!
😉
 
Hallo Jochen,

vielen Dank für die Antwort! Diesen Winter möchte ich tatsächlich das erste Mal wirklich einen Eigenentwurf bauen - natürlich mit Superflächen ;-). Simuliert und gegrübelt habe ich schon letzten Winter - und mich mit der Theorie beschäftigt schon seit Jahrzehnten. Inzwischen laufen bei mir FLZ-Vortex und XFLR5, Winghelper und ein Mr. Beam Laser-Cutter - und mit allen herumzutüfteln und Dinge zu Probieren macht riesigen Spaß.

Den Upgrade mit pip(3) install --upgrade <package-name>. habe ich nicht probiert. Danke für den Tipp! Ich habe ienfach so lange die aktuellen Versionen meiner INstallation erhöht, bis es lief. Ich schätze, ein Upgrade hätte nur soweit inkrementiert, wie es die Linux-Distribution vorgibt. Die war allerdings aktuell.

Einen hab ich noch:

Der 'Airfoil Editor' lief bei mir auch nicht ganz ohne eine Modifikation. Und zwar wurde imer ein leeres Fenster erzeugt (und Python warf eine Fehlermeldung beim Aufruf von tkinter-Funktionen), wenn ein "Tochterfenster" erzeugt werden sollte, also z.B. bei "Modify Geometry)
Abhilfe schaffte das Einfügen der Funktion

wait_visibility()

vor Zeile 75 in der Datei ui_base.py. Offenbar lief das Programm schon weiter, bevor das Fenster fertig aufgebaut war. Fehlermeldung siehe unten.

Der Code sieht dann, nach Korrektur, so aus
(...)
# make dialog modal
# self.resizable(False, False) # width, height
# self.deiconify()
# self.wait_visibility()
self.wait_visibility()
self.grab_set()
self.focus_set()
self.protocol("WM_DELETE_WINDOW", self.destroy)


Viele Grüße
Thomas

Die Fehlermeldung zur Info:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
return self.func(*args)
File "/home/thomas/.local/lib/python3.10/site-packages/customtkinter/windows/widgets/ctk_button.py", line 554, in _clicked
self._command()

File "/home/thomas/.local/lib/python3.10/site-packages/ezdxf/colors.py", line 5, in <module>
from typing_extensions import Self
ImportError: cannot import name 'Self' from 'typing_extensions' (/usr/lib/python3/dist-packages/typing_extensions.py)
 

mipme_kampfkoloss

Vereinsmitglied
Teammitglied
Danke für das exzellente Tool! Der Airfoil Editor gefällt mir sehr gut.

Was mir aufgefallen ist: beim Beziererstellen ist die Meldung nach der Optimierung irgendwie komisch. Wenn ich optisch einige Abweichungen vom Originalprofil habe, dann meldet er optimale Anpassung und wenn ich es optisch recht gut hingebogen sehe, dann meint das Programm dass die Optimierung nicht gelungen ist!?

Hinweis noch für Mac-User: bei mir wollte es erst laufen, nachdem ich mit brew tcl-tk und python-tk installiert hatte.
 

Jojo26

User
Hallo Kjell,

... schön, dass Dir der Airfoil Editor gefällt! (der Planform Creator 2 ist allerdings au ned schlecht 😉)

... mmh, ja - die Usermeldung beim Matchen von Bezier ist ein wenig "interpretationswürdig". Je mehr Bezier-Kontrollpunkte verwendet werden, desto höher liegt die "Messlatte", damit ein Ergebnis als gut erachtet wird. Vielleicht sollte ich diese Unterscheidung wieder ausbauen ...

Hinweis noch für Mac-User: bei mir wollte es erst laufen, nachdem ich mit brew tcl-tk und python-tk installiert hatte.
... wenn ich die Erläuterungen auf https://www.python.org/download/mac/tcltk/ richtig interpretiere, sollte bei einem Mac Python von python.org (neu) installiert werden und nicht das von Apple vorinstallierte verwendet werden. Dann sollte auch keine Nachinstallation der tk Module erforderlich sein. Hattest Du es so gemacht?
 
Ansicht hell / dunkel umschalten
Oben Unten