Klassen in der TMD – Teil 1: Dynamics


Alle Objekte, wie beispielsweise der Rumpf, werden mit jeweils verschiedenen Eigenschaften versehen in den entsprechenden Abschnitten aufgelistet. Sie lassen sich in verschiedene Klassen zuordnen, wie man es evtl. von Objekt-Orientierter-Programmierung (OOP) gewöhnt ist. Hier folgt nun eine Auflistung der bekannten Objektklassen im Aerofly5 (+ Aerofly FS) mit jeweils einer kurzen Erläuterung der Parameter.
Wenn sie mal nicht wissen sollten, wozu ein Parameter da ist, werden sie hier vielleicht fündig.

Wie geht es weiter?
Objekte aus dem eigenen 3D Modell im Aerofly 5 anzeigen lassen


Dies ist Teil 1, Abschnitt Dynamics.
Eine vollständige Liste aller Parameter aller bekannten Objektklassen erhalten sie mit dem von mir programmierten Templatefinder, den es zum kostenlosen Download hier gibt.


Telemetrie und Instrumente

Objekte dieser Klasse haben in der Regel die Aufgabe an den Piloten ein Feedback zu geben, sei es nun das akustische Variometer oder eine Anzeige der Motordrehzahl in dem Fluginformationsfenster.
CompensatedVariometer gibt an, ob das Variometer Energiekompensiert sein soll oder nicht. Wenn es nicht kompensiert ist, zeigt es stehts nur das absolute Steigen oder Sinken des Modells an. Für Segler ist es sinnvoll die Kompensation einzuschalten, weil man dann gut sieht, ob man grade wirklich Energie gewinnt, oder vielleicht doch sogar Energie verliert.

        <[string8][object][telemetry]
            <[string8][Name][Telemetry]>
            <[string8][Body][Fuselage]>
            <[string8][Rotor][]>
            <[string8][Rotor1][]>
            <[string8][Rotor2][]>
            <[string8][Rotor3][]>
            <[string8][Value0][DriveShaft.GetRotationSpeed]>
            <[string8][Name0][DriveShaft RPM]>
            <[string8][Name1][]>
            <[string8][Name2][]>
            <[string8][Name3][]>
            <[string8][Name4][]>
            <[string8][Name5][]>
            <[string8][Name6][]>
            <[string8][Name7][]>
            <[string8][RotationSpeed0][DriveShaft.GetRotationSpeed]>
            <[string8][RotationSpeed1][]>
            <[string8][RotationSpeed2][]>
            <[string8][RotationSpeed3][]>
            <[bool][CompensatedVariometer][true]>
            <[tmvector3d][LookAtPosition][0.000000 0.000000 0.000000]>
            <[tmvector2dtmarraywithsize][FlapPositions][]>
        >

Kameras einstellen

Es gibt die Möglichkeit bis zu vier Kamerapositionen zu definieren, die man dann im Simulator mit F8 durchschalten kann. Die ID ist dabei hochzählend von 0 und darf nur einmal vorkommen. Beim AeroflyFS darf die ID0 nicht die Pilotenkamera sein sondern die Follow-Camera.
Mit Body lässt sich die Kamera an rigidbodys anknüpfen, sie vollführt dann alle Bewegungen und Rotationen des Objekts mit.
R0 gibt die Kameraposition an, wie man die Koordinaten aus dem 3D Modell übernehmen kann zeige ich hier.
X0 und Z0 beschreiben die Blickrichtung der Kamera, auch hier kann man die Sichtachse errechnen wie hier gezeigt.
InCockpit gibt darüber Auskunft, ob sich die Kamera im Cockpit befindet. Das hat den Vorteil, dass die Kamera dichter an dem 3D-Modell positionert werden kann, ohne dass die unsichtbare Kugel, die Kamera umgibt, zu viel vom Modell abschneitet.

Sehr interessant ist der Parameter Description dort kann man eine Beschreibung für die Kamera angeben, die dann im Simulator beim Durchwechseln der Kameras angezeigt wird.

        <[string8][object][camera]
            <[string8][Name][Camera0]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][R0][0.500000 0.000000 0.250000]>
            <[tmvector3d][X0][1.000000 0.000000 -0.100000]>
            <[tmvector3d][Z0][1.000000 0.000000 -0.100000]>
            <[uint32][ID][0]>
            <[bool][InCockpit][true]>
            <[string8][Description][ Pilot's View ]>
        >

Rigidbody

Ein Rigidbody ist ein starrer Körper, d.h. ein Körper, der sich nicht verformen kann. Jedes Teil des Modells, dass abbrechen kann und auf die Umgebung reagieren soll, muss als eigenes Rigidobjekt definiert sein (z.B. Fahrwerk und Flügel). Durch Einbenden der Physikinfo (Strg+F12) sind diese als dunkelblaue Gitternetz-Quader im Aerofly5 sichtbar.
Die Ausmaße dieses Quader zeigen gleichzeitig auch die Länge in m (Meter) der Trägheit (InertiaLenth) der 3 Raumrichtungen an. Je größer eine Angabe für die InertiaLenth, desto träger reagiert das Objekt auf Rotation um die entsprechende Achse.
Je größer die Masse, das Gewicht, (Mass) desto größer ist die Trägheit des Objektes auf Bewegungsänderung (und desto größer die Erdanziehungskraft).

Der Name eines Rigidbodys darf nur einmal vergeben werden.

R0 ist die Position des Mittelpunktes des Quaders und ist gleichzeitig das Massenzentrum, der Schwerpunkt (CG) des Objekts.
B0 kann man benutzen um den Quader frei im Raum zu drehen.
C0 verschiebt den Objektbezugspunkt, der vor allem für den 3D-Sound wichtig ist.

        <[string8][object][rigidbody]
            <[string8][Name][Fuselage]>
            <[float64][Mass][20]>
            <[tmvector3d][InertiaLength][1.500000 0.150000 0.150000]>
            <[tmmatrix3d][Inertia][10.000000 0.000000 0.000000 0.000000 100.000000 0.000000 0.000000 0.000000 100.000000 ]>
            <[tmvector3d][R0][0.150000 0.000000 0.000000]>
            <[tmmatrix3d][B0][1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000]>
            <[tmvector3d][C0][0.000000 0.000000 0.000000]>
        >

Joint linear

Joints, zu Deutsch Verbindungen, haben die Aufgabe die Rigidbodys zusammenzuhalten. Man kann ihnen eine gewisse Stärke zuordnen oder sie zu einer starren Verbindung machen, indem man für Rigid den Wert auf 1 setzt.
Wenn Rigid auf 1 steht, können sich die Bauteile aber auch nicht biegen oder drehen (d.h. das Fahrwerk kann z.B. nicht eingefahren werden und federt auch nicht ein).

Wenn man möchte, dass sich die Bauteile bewegen aber nicht abbrechen können, kann man bei ForceMax und TorqueMax jeweils eine 0 eintragen.

Die Objekte werden durch eine simulierte Federkraft zusammengezogen oder zurückgedreht, je weiter voneinander entfernt bzw. je stärker verdreht sie sind, desto größer auch die Rückstellkraft (proportional – linear, daher der Name jointlinear)

Der Name eines Joints darf nur einmal vergeben werden und sollte die Namen der zu verbindenen Bauteile beinhalten.

Body0 und Body1 sind die Objekte, die zusammen gehalten werden sollen. Bei Body0 gibt man üblicherweise das jeweils größere Objekt an.
R0 gibt die Position der Verbindung zwischen den Bauteilen im Raum an, ausgehend vom Koordinaten-Ursprung des 3D Modells.
K steht immer für Kraft,
D für Dämpfung (ändert die Schwingungsdauer),
f für Federstärke,
t für Torsionsfeder-Stärke,
x, y und z stehen für die jeweiligen Richtungen bzw. bei Torsion für die Achsen.
Force- und TorqueMax stellen die Bruchlast der Verbindung dar.
Mit Rotation0Control kann man die Verbindung um die unter Rotation0Axis gegebene Achse verdrehen.
Rotation1Control wiederholt ermöglicht die Drehung des Objekts um eine zweite Achse, wie bei manchen Fahrwerken, die nach hinten einfahren.

PreLoad kann man als Vorschwächung des Joints verstehen, Versuche stehen noch aus.
PreTension bedeutet so viel wie Vorspannung. Dadurch kann man z.B. eine Flächenbiegung am Boden realisieren oder einem Objekt eine gewisse Vordrehung verpassen.
FreeDirection

Wenn man die Flächenbiegung verringern möchte, kann man den Parameter Ktx erhöhen,
wenn z.B. das Fahrwerk nach oben einfedern soll verringert man den Wert für Ktz, soll es besser Dämpfen setzt man Dfz höher.

        <[string8][object][jointlinear]
            <[string8][Name][JointFuselageLeftWing]>
            <[string8][Body0][Fuselage]>
            <[string8][Body1][LeftWing]>
            <[tmvector3d][R0][0.000000 0.100000 0.100000]>
            <[tmvector3d][X0][1.000000 0.000000 0.000000]>
            <[tmvector3d][Y0][0.000000 1.000000 0.000000]>
            <[tmvector3d][Z0][0.000000 0.000000 1.000000]>
            <[float64][Kfx][10000]>
            <[float64][Kfy][10000]>
            <[float64][Kfz][10000]>
            <[float64][Dfx][5]>
            <[float64][Dfy][5]>
            <[float64][Dfz][5]>
            <[float64][Ktx][3000]>
            <[float64][Kty][3000]>
            <[float64][Ktz][3000]>
            <[float64][Dtx][1]>
            <[float64][Dty][1]>
            <[float64][Dtz][1]>
            <[float64][ForceMax][500]>
            <[float64][TorqueMax][500]>
            <[string8][Rotation0Control][]>
            <[tmvector3d][Rotation0Axis][0.000000 0.000000 0.000000]>
            <[float64][Rotation0Angle][0]>
            <[string8][Rotation1Control][]>
            <[tmvector3d][Rotation1Axis][0.000000 0.000000 0.000000]>
            <[float64][Rotation1Angle][0]>
            <[tmvector3d][PreLoad][0.000000 0.000000 0.000000]>
            <[tmvector3d][PreTension][0.000000 0.000000 0.000000]>
            <[tmvector3d][FreeDirection][0.000000 0.000000 0.000000]>
            <[int32][Rigid][0]>
        >

Collisionhull und Collisionblade

Collisionhulls – Kollisionshüllen dienen dazu ein Objekt vom Erdboden abprallen zu lassen. Momentan wird im Aerofly5 keine Kollision zwischen einzelnen Objekten simuliert, was zugegben auch keinen Sinn machen würde.

Body gibt das Rigidobjekt an, auf dass die Kollisionshülle Einfluss nehmen soll.
Geometry ist das verwendete 3D Modell, um die Kollsion zu erkennen.
K gibt die Federkraft an, die wirkt, wenn das Modell in den Boden eintaucht.
D definiert die dabei wirkende Dämfpung
StaticFrictionCoefficient ist die Stärke der Haftreibung
KineticFrictionCoefficient ist für die Rutschreibungskraft zuständig

        <[string8][object][collisionhull]
            <[string8][Name][FuselageCollisionHull]>
            <[string8][Body][Fuselage]>
            <[string8][Geometry][Fuselage]>
            <[float64][K][50000]>
            <[float64][D][20]>
            <[float64][StaticFrictionCoefficient][1.00]>
            <[float64][KineticFrictionCoefficient][0.65]>
            <[bool][Blade][false]>
        >
        <[string8][object][collisionblade]
            <[string8][Name][]>
            <[string8][Body][Fuselage]>
            <[string8][Geometry][PropellerDisk]>
            <[string8][DamageOnCrash][Propeller.Damage]>
        >

Wheelhull

Die Wheelhull ist im Aerofly5 in der Physikinfo (Strg+F12) durch einen hellblauen Kreis dargestellt.
Man kann sich die Wheelhull als Kreisscheibe vorstellen, die sich dann bei Bodenkontakt dreht.

Wie schon bei der Collisionhull hat auch die Wheelhull Parameter für die Federkraft und die Dämpfung. Ist die Kraft zu gering sinkt das Rad weit in den Boden ein, es sieht aus wie ein platter Reifen. Ist die Dämpfung zu groß neigt das Modell zum Springen.

Radius gibt den Radius des Kreises an,
Body ist das Rigidobjekt, auf das die Kraft ausgeübt wird,
R0 ist die Position des Drehpunktes,
BrakeControl kann angegeben werden, wenn eine Radbremse vorhanden ist,
BrakeCoefficient gibt dabei die Bremsstärke an
RollingFrictionCoefficient ist die Stärke der Rollreibung, des Rollwiderstands
LateralFrictionCoefficient gibt den seitlichen Drift des Rades an. Bei höhern Werten erzeugt das Rad einen guten seitlichen Widerstand in der Kurve, bei kleinen Werten bietet es kaum halt.

        <[string8][object][wheelhull]
            <[string8][Name][MainWheelHull]>
            <[float64][K][10000]>
            <[float64][D][200]>
            <[float64][Radius][0.05]>
            <[float64][CorneringFactor][0.1]>
            <[string8][Body][MainGear]>
            <[tmvector3d][R0][0.200000 0.000000 -0.050000]>
            <[tmvector3d][X0][1.000000 0.000000 0.000000]>
            <[tmvector3d][Y0][0.000000 1.000000 0.000000]>
            <[tmvector3d][Z0][0.000000 0.000000 1.000000]>
            <[string8][BrakeControl][BrakeInput.GetOutput]>
            <[float64][RollingFrictionCoefficient][0.08]>
            <[float64][LateralFrictionCoefficient][0.95]>
            <[float64][BrakeCoefficient][0.3]>
        >

Swimmer

        <[string8][object][swimmer]
            <[string8][Name][SwimmerHull]>
            <[float64][K][0]>
            <[float64][D][0]>
            <[tmvector3d][R][0.000000 0.000000 0.000000]>
            <[string8][Body][Fuselage]>
            <[string8][Geometry][]>
            <[float64][DynamicFriction][0.03]>
        >

Airfoil (Flügelprofil)

Erklärung der einzelnen Parameter

        <[string8][object][airfoil]
            <[string8][Name][AirfoilTip]>
            <[float64][Cl0][0.000000]>
            <[float64][Cd0][0.010000]>
            <[float64][Cm0][0.000000]>
            <[float64][ClAlpha][6.280000]>
            <[float64][CdAlpha][0.400000]>
            <[float64][CmAlpha][0.000000]>
            <[float64][ClFlap][1.500000]>
            <[float64][CdFlap][0.000000]>
            <[float64][CmFlap][-0.200000]>
            <[float64][Cd0Base][0.005000]>
            <[float64][ClAlphaBase][2.400000]>
            <[float64][CdAlphaBase][1.800000]>
            <[float64][CmAlphaBase][-0.450000]>
            <[float64][ClFlapBase][0.000000]>
            <[float64][AttachedCenter][-0.000000]>
            <[float64][AttachedRange][0.120000]>
            <[float64][StallRange][0.250000]>
            <[float64][AttachedCenterFlap][-0.120000]>
        >

Aerowing

Aerowings sind simulierte Tragflächen. Ihnen können bis zu zwei Flügelprofile zugewiesen werden. Sie werden von vielen anderen Objekten beeinflusst, hauptsächlich vom Propeller und von den Rudern.

Body gibt wieder an, auf welches Rigidobjekt alle Kräfte wirken sollen.
Die Angaben zu Span, Area und AreaFlap kann man getrost ignorieren, der Aerofly5 rechnet diese selber aus und trägt sie sogar für uns ein.
Incidence beschreibt den Einstellwinkel (im Bogenmaß) des gesamten Fügels,
Propeller lässt eine Zuordnung eines Propellers für den Propellerwind zu,
PropwashPercentrage bedeutet nichts anderes als Propeller-Wind, d.h. der Einfluss des Propellerluftstroms auf den Flügel. Nach langem Rumprobieren sind Danny und ich zu dem Schluss gekommen, dass der Luftstrom dabei auf der gesamten Flügelfläche wirksam ist. Er beeinflusst auch das Langsamflugverhalten massiv, so kann man viele der Maschinen zumindest im Aerofly stabilisieren indem man einfach Vollgas gibt, in echt geht das nicht immer so gut.
PropwashOmega und -Rotation muss mir Danny nochmal erklären xD hat was mit der Wirkung des Propellerwindes zu tun.

DownWashInput nimmt den Abwind eines vorausfliegenden Flügels auf, z.B. LeftWingAero.DownWashMean
DownWashPercentrage ist die Stärke des wirkenden Abwindes

AirfoilRoot und AirfoilTip sind die verwendeten Flügelprofile an der Wurzelrippe und der Flügelspitze, dazwischen wird vom Aerofly gestraakt.

Stations sind Flügelschnitte längs der Flugrichtung, die in der Physikinfo (Strg+F12) als gelbe Linien zu sehen sind.
Überall, wo Station mit im Parametername auftaucht, müssen immer die gleiche Anzahl an Werten angegeben werden für jeden Schnitt einen.
StationY, StationLE, StationTE, StationZ geben die Flügelgeometrie an
Station Incidence definiert den Einstellwinkel (wieder im Bogenmaß)
StationFlap weist jedem Flügelschnitt entweder keine Ruderklappe (0) oder eine Klappe mit einer ID (1-2) zu.
StationFlapFraction gibt für die Flügelsektion bis zum nächsten Abschnitt die relative Rudertiefe an. D.h. das Ruder hat z.B. 0.3 = 30% der lokalen Flügeltiefe.

AspectRatioMultiplier beeinflusst den inudzierten Widerstand der Flügelsektionen. Bei einem Flächenpaar (linker und rechter Flügel) sollte der AspectRatioMultiplier etwa 2.0 betragen, was dazu führt, dass die Randwirbelstärke halbiert wird. Würde der AspectRatioMultiplier auf 1.0 stehen würde bei einem Flächenpaar der Randwirbel an vier Stellen in voller Stärke simuliert (jeweils an den Außenkanten der Flügelsektionen). Kurzfassung: Wenn mehrere Aerowings zum selben Tragflügel gehören, entspricht der AspectRatioMultiplayer der Anzahl der Aerowings von diesem Flügel. Selbstverständlich kann man auch Werte wählen, die abweichen von dieser Vorgabe, jenachdem wie viel Einfluss der Rumpf in echt auf die Flächen haben würde. So kann auch ein Wert der höher oder tiefer ist der Realität am dichtesten sein.

Flap0Control ist die Angabe für das Steuerservo der Klappe mit der ID 1
Flap0Area muss man nicht angeben, man kann damit noch zusätzlich die Ruderwirkung erhöhen.

RotationalChordFraction lässt man am besten auf diesem Wert, alles andere fühlt sich komisch an.
NoSplash sagt aus, ob das Flügelprofil bei Kontakt mit einer Wasseroberfläche einen Splash auslöst oder nicht. Wenn ein Splash erfolgt ist, wird das Modell automatisch zurückgesetzt.

GroundEffectFactor und GroundEffectScale definieren die Stärke und den Einflussbereichdes Bodeneffekts.
Teilweise führt dieser Effekt zum Abbrechen von Flächenteilen, wenn diese auf den Boden prallen, weil plötzlich ein recht großer Auftrieb generiert wird.

        <[string8][object][aerowing]
            <[string8][Name][LeftWingAero]>
            <[string8][Body][LeftWing]>
            <[float64][Span][1.5]>
            <[float64][Area][1.0]>
            <[float64][AreaFlap][0]>
            <[float64][Incidence][0.0]>
            <[string8][Propeller][Propeller]>
            <[float64][PropwashPercentage][0.22]>
            <[float64][PropwashOmega][8]>
            <[float64][PropwashRotation][10]>
            <[string8][DownWashInput][]>
            <[float64][DownWashPercentage][0.0]>
            <[string8][AirfoilRoot][AirfoilRoot]>
            <[string8][AirfoilTip][AirfoilTip]>
            <[tmvector3d][DownWashMean][0.000000 0.000000 0.000000]>
            <[float64tmarray][StationY][  0.000000  0.750000  1.500000 ]>
            <[float64tmarray][StationLE][ 0.200000  0.200000  0.100000 ]>
            <[float64tmarray][StationTE][-0.400000 -0.400000 -0.200000 ]>
            <[float64tmarray][StationZ][  0.000000  0.100000  0.200000 ]>
            <[float64tmarray][StationIncidence][0.0 0.0 0.0]>
            <[uint32tmarray][StationFlap][1 1 2 ]>
            <[float64tmarray][StationFlapFraction][0.25 0.25 0.25 ]>
            <[float64][AspectRatioMultiplier][2.0]>
            <[string8][Flap0Control][ServoLeftFlap.GetOutput]>
            <[string8][Flap1Control][ServoLeftAileron.GetOutput]>
            <[string8][BrakeControl][]>
            <[float64][Flap0Area][0]>
            <[float64][Flap1Area][0]>
            <[float64][BrakeArea][0]>
            <[float64][RotationalChordFraction][0.1]>
            <[bool][NoSplash][false]>
            <[float64][GroundEffectFactor][0.0]>
            <[float64][GroundEffectScale][0.0]>
        >

AeroFuselage

Mit der Aerofuselage wird im Aerofly5 die Aerodynamik von Körpern simuliert wie z.B. Rümpfe, Radschuhe etc, die keine Tragflügel sind. Sie sind in der Physikinfo (Strg+F12) als margentafarbene Gitterstrukturen sichtbar.

Body gibt das Rigidobjekt an, auf das die Rumpfaerodynamik wirken soll

Station sind auch hier wieder Schnitte, diesmal allerdings quer zur Flugrichtung.
Das Aussehen der Rumpfaerodynamik kann durch StationX, StationY, StationZ, StationWidth und StationHeight beeinflusst werden.
StationShape gibt an ob es sich um einen runden Rumpf (0) oder einen Kastenförmigen (1) handelt.

Cd steht für Widerstand (Drag)
Cl für Auftrieb (Lift)
x, y und z für die drei Raumrichtungen
Cm kann man benutzen, wenn der Rumpf selbst ein Moment erzeugt, wie z.B. bei F3A Maschinen, die einen sehr langen hohen Rumpfrücken haben.
Offset verschiebt die gesamte Rumpfaerodynamik nach vorne oder hinten
HasSwimmer sagt aus, ob das Objekt im Wasser Auftrieb erzeugen soll, wie es z.B. bei Wasserflugzeugen der Fall sein soll. In dem Fall dient dann die Rumpfaerodynamik auch zur Berechnung der Hydrodynamik.

       <[string8][object][aerofuselage]
            <[string8][Name][FuselageAero]>
            <[tmvector3d][R0][0.000000 0.000000 0.000000]>
            <[tmvector3d][X0][1.000000 0.000000 0.000000]>
            <[tmvector3d][Y0][0.000000 1.000000 0.000000]>
            <[tmvector3d][Z0][0.000000 0.000000 1.000000]>
            <[string8][Body][Fuselage]>
            <[float64tmarray][StationX][     1.000000  0.500000 -0.500000 -2.000000 ]>
            <[float64tmarray][StationY][     0.000000  0.000000  0.000000  0.000000 ]>
            <[float64tmarray][StationZ][     0.000000  0.000000  0.000000  0.000000 ]>
            <[float64tmarray][StationWidth][ 0.000000  0.200000  0.100000  0.050000 ]>
            <[float64tmarray][StationHeight][0.000000  0.250000  0.125000  0.050000 ]>
            <[uint32tmarray][StationShape][  0         1         1         0        ]>
            <[float64][Cdx][0.15]>
            <[float64][Cdy][1.50]>
            <[float64][Cdz][1.50]>
            <[float64][Cly][1.50]>
            <[float64][Clz][1.50]>
            <[float64][Cm][-0.00]>
            <[float64][Offset][0.000000]>
            <[bool][HasSwimmer][false]>
        >

AeroDrag

Zusätzlicher Luftwiderstand, ähnlich einer Bremsklappe (airbrake) mit fester Position und festem Luftwiederstand.

        <[string8][object][aerodrag]
            <[string8][Name][FuselageDrag]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][R0][0.000000 0.000000 0.000000]>
            <[float64][Kd][0.04]>
        >

Aeropropeller

Unter einem Aeropropeller versteht man das physikalische Objekt, das Schub in eine Richtung erzeugt. In der Physik-Info (Strg+F12) wird der Propeller bei höherer Drehzahl als hellblaue Kreisscheibe dargestellt, die bei den meisten Modellen senkrecht zur Flugrichtung steht.

Die Kraft des Propellers wird an der Stelle R0 erzeugt,
durch diesen Punkt führt die Rotationsachse, die mit X0, Y0 und Z0 eingestellt werden kann.
Radius ist der Propellerradius in m, also die Länge eines Propellerblattes,
Pitch ist die Propellersteigung in m,
Twist gibt an, ob das Profil des Propellers einen konstanten Anstellwinkel über die gesamte Spannweite des Blattes hat (wie bei symmetrischen Rotorblättern oder 4D-Props), oder ob der Propeller in sich verwunden ist.
CutOut bestimmt den Gasanteil, ab dem der Propeller in der Pysikinfo eingeblendet wird.
Inertia gibt die Roationsträgheit an, je höher die Zahl desto langsamer ist die Gasannahme und um so länger ist das Nachlaufen ohne Gas.
Body definiert auf welches Rigidobjekt die Kraft übertragen werden soll,
Airfoil bietet die Möglichkeit dem Propeller ein definiertes Profil zuzuweisen (AirfoilPropeller)
Die Drehzahl des Propellers wird durch den Eintrag in EngineRotationSpeed und
das Drehmoment durch AddTorque mit der Welle synchronisiert.
Mit PitchControl und PitchChange kann man einen Verstellpropeller simulieren, z.B. für 4D-Kunstflugzeuge
Die Anzahl der Propellerblätter mit denen der Simulator das Drehmoment und den Vortrieb berechnet lässt sich durch NumberBlades angeben.
Bei einem Klapppropeller kann man durch Folding “true” verhindern, das der Propeller durch den Fahrtwind anläuft.
TorqueReduction verringert das Drehmoment (Torquemoment) des Propellers.
Side- und Downthrust stellen den Motorsturz und -Zug ein (Winkel im Bogenmaß).
RotationSpeedStall ist eine Angabe über die Drehzahl, bei der das Propellerblatt in den Abriss übergeht.

        <[string8][object][aeropropeller]
            <[string8][Name][Propeller]>
            <[tmvector3d][R0][1.000000 0.000000 0.050000]>
            <[tmvector3d][X0][0.000000 0.000000 0.000000]>
            <[tmvector3d][Y0][0.000000 1.000000 0.000000]>
            <[tmvector3d][Z0][0.000000 0.000000 1.000000]>
            <[float64][Radius][0.250000]>
            <[float64][Pitch][0.200000]>
            <[float64][Twist][-0.050000]>
            <[float64][CutOut][0.200000]>
            <[float64][Inertia][0.005000]>
            <[float64][LateralDragCoefficient][0.05]>
            <[string8][Body][Fuselage]>
            <[string8][Airfoil][AirfoilPropeller]>
            <[string8][EngineRotationSpeed][DriveShaft.GetRotationSpeed]>
            <[string8][AddTorque][DriveShaft.AddTorque]>
            <[string8][PitchControl][]>
            <[float64][PitchChange][0]>
            <[uint32][NumberBlades][2]>
            <[float64][AspectRatio][9]>
            <[float64][LateralForceCoefficient][0.95]>
            <[bool][Folding][false]>
            <[float64][TorqueReduction][0.2]>
            <[bool][LinearTwist][false]>
            <[string8][DamageOnCrash][Engine.Damage]>
            <[float64][SideThrust][0.0]>
            <[float64][DownThrust][0.0]>
            <[float64][RotationSpeedStall][35]>
        >

Enginebasic und Engineelectric

Unter einer Engine ist hier ein Motor gemeint, der einen Propeller über eine Welle (DriveShaft) antreibt. Die Beschreibung der Turbinen ist hier zu finden.

Enginebasic sagt aus, dass es sich bei dem Antrieb um einen Verbrennungsmotor handelt. Engineelectric ist ein Elektromotor.
ThrottleControl ist beiden Motoren gemein, dort wird die Verknüpfung zum Gasservo angegeben.
PowerMax gibt die Maximalleistung,
TorqueMax das maximale Drehmoment des Motor an,
RotationSpeed überträgt die Motordrehzahl an die Antriebswelle (DriveShaft)
RotationInertia gibt die Trägheit des Motors an und beeinflusst somit das Gasansprechverhalten erheblich mit.
ThruttleIdle bestimmt die Gasstellung des Leerlaufes,
ThrottleCut gibt die Gasstellung an, bei der der Motor stehen bleibt.
AddTorque und AddInertia synchronisieren das Drehmoment und die Trägheit mit der Motorwelle (DriveShaft)
Durch TorqueCurveRPM und TorqueCurvePower wird die Gaskurve modelliert also die Verteilung der Motorkraft und des Drehmoments über den Drehzahlbereich.
TorqueFrictionLoss beschreibt die Verlustleistung des Motors durch Reibung. Versuche habe ich mit dem Wert noch nicht gemacht, es ist möglich, dass man damit das Drehmoment des Motors auf den Rumpf beeinflussen kann.

        <[string8][object][enginebasic]
            <[string8][Name][Engine]>
            <[string8][ThrottleControl][ServoThrottle.GetOutput]>
            <[float64][PowerMax][6900]>
            <[float64][TorqueMax][35]>
            <[string8][RotationSpeed][DriveShaft.GetRotationSpeed]>
            <[float64][RotationInertia][0.005]>
            <[float64][ThrottleIdle][0.02]>
            <[float64][ThrottleCut][0]>
            <[string8][AddTorque][DriveShaft.AddTorque]>
            <[string8][AddInertia][DriveShaft.AddInertia]>
            <[float64tmarray][TorqueCurveRPM][  0 100.000  200.000  280.000 420.000  500.000  560.000 ]>
            <[float64tmarray][TorqueCurvePower][1 900.000 2250.000 4600.000 6900.000 5750.000 0 0 0 0 0 0 0 0 0 0 ]>
            <[float64][TorqueFrictionLoss][0.012000]>
        >

Der Elektromotor unterscheidet sich nicht wesentlich vom Verbrennungsmotor, zumindest was die Parameter in der tmd betrifft. Ein einfacher Austausch der beiden Motorklassen ändert schon die Antriebsart.
I0 Leerlaufstrom
U0 Nennspannung
Ns Spezifische Drehzahl / Volt (U0 / V)
Ri Elektrischer Widerstand (Ri = U0 / I0)
Brake “true” sorgt dafür, dass der Regler den Motor bei Leerlauf bis zum Stillstand stoppt, wie es z.B. bei Klappropellern gewünscht ist. Alle anderen Parameter entsrechen denen des Verbrennungsmotors (s.o.).

        <[string8][object][engineelectric]
            <[string8][Name][Engine]>
            <[string8][ThrottleControl][ServoThrottle.GetOutput]>
            <[string8][RotationSpeed][DriveShaft.GetRotationSpeed]>
            <[float64][RotationInertia][2e-005]>
            <[string8][AddTorque][DriveShaft.AddTorque]>
            <[string8][AddInertia][DriveShaft.AddInertia]>
            <[float64][Ns][80.00]>
            <[float64][U0][11.10]>
            <[float64][I0][2.00]>
            <[float64][Ri][0.05]>
            <[bool][Brake][false]>
        >

Turbine

Eine Turbine liefert Schub in eine Richtung, ohne einen Propeller anzutreiben. Dadurch ist ein Jetantrieb etwas übersichtlicher in der tmd als ein normaler Motor.

Jede Turbine übt ihre Schubkraft auf eine Rigidobjekt aus, das unter Body angegeben wird,
R0 gibt die Position der Turbine im Raum an, vom Koordinatenursprung des 3D Modells. An diesem Punkt greift die Kraft der Turbine zu, bei einer Vektorsteuerung muss der Punkt außerhalb des Modellzentrums liegen, um das Modell drehen zu können.
Mit X0, Y0 und Z0 kann man die Schbrichtung ändern.
MaximumThrust ist der Maximalschub der Turbine bei Vollgas in N.
MaximumRotationSpeed gibt die Höchstdrehzahl,
IdleRotation die Leerlaufdrehzahl an.
IdleFraction ist der prozentuale Anteil des Leerlaufschubs.
RotationInertia regelt die Ansprechverzögerung der Turbine. Viele Turbinen reagieren träge, das wird durch hohe Einträge dieses Wertes erreicht.
ThrottleControl ist die Verlinkung zum Gasservo.
VectorY- und VectorZControl geben das Steuerservo für die Schubrichtung an (Schubvektorsteuerung)
VectorY- und VectorZAmount definieren den Winkel (im Bogenmaß) der maximalen Auslenkung der Schubrichtung. Durch zwei, besser vier Turbinen, die alle nach unten schweken können, kann man auch einen Senkrechtstarter wie eim Harrier bauen.

        <[string8][object][turbine]
            <[string8][Name][Turbine]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][X0][1.000000 0.000000 0.000000]>
            <[tmvector3d][Y0][0.000000 1.000000 0.000000]>
            <[tmvector3d][Z0][0.000000 0.000000 1.000000]>
            <[tmvector3d][R0][-1.250000 0.000000 0.000000]>
            <[float64][MaximumThrust][200.0]>
            <[float64][MaximumRotationSpeed][10000.000000]>
            <[float64][IdleRotationSpeed][0.000000]>
            <[float64][IdleFraction][0.200000]>
            <[float64][RotationInertia][1.500]>
            <[string8][ThrottleControl][ServoThrottle.GetOutput]>
            <[string8][VectorYControl][RudderInput.GetOutput]>
            <[string8][VectorZControl][ElevatorInput.GetOutput]>
            <[float64][VectorYAmount][0.200]>
            <[float64][VectorZAmount][0.200]>
        >

Driveshaft

Driveshaft bedeutet zu Deutsch Antriebswelle.
Der Eintrag der Welle in der tmd ist relativ kurz, das einzige was man definieren kann ist der Reibungswiderstand (Friction)
Die Welle besitzt viele Attribute, die von anderen Objekten beeinflusst werden, z.B. wird die Drehzahl (DriveShaft.GetRotationSpeed) vom Antrieb und vom Propeller beeinflusst. Auch wird das Drehmoment über sie übertragen (DriveShaft.AddTorque). Mit dem Hinzufügen einer Trägheit (DriveShaft.AddInertia) wird z.B. ein Nachlaufen erzeugt. Andernfalls würde der Propeller sofort stehen bleiben, für die Welle selber wurde ja keinen Parameter für die Trägheit (Inertia) angegeben.

        <[string8][object][driveshaft]
            <[string8][Name][DriveShaft]>
            <[float64][Friction][0.01]>
            <[void(float64)][AddTorque][]>
            <[void(float64)][AddInertia][]>
        >

Gear

Das Getriebe (gear) kann dazu genutzt werden, den gewünschten Propeller in seiner Drehzahl an den Motor anzupassen oder anders herum.
Bei Werten größer 1 wird die Drehzahl reduziert und das Drehmoment vom Motor, also auch die Kraft erhöht.
Man kann damit auch größere Propeller nutzen.

ReductionRatio: Übersetzung
Efficiency: Effizienz, 1 – Reibungsverlust

         <[string8][object][gear]
            <[string8][Name][Gear]>
            <[string8][AddTorque0][DriveShaft.AddTorque]>
            <[string8][AddInertia0][DriveShaft.AddInertia]>
            <[string8][RotationSpeed0][DriveShaft.GetRotationSpeed]>
            <[float64][ReductionRatio][6.700]>
            <[float64][Efficiency][1.000]>
            <[bool][FreeWheel][false]>
            <[bool][Centrifugal][false]>
        >

Receiver

Ein Reciver (Dt.: Empfänger) erhällt die Steuereingaben vom Simulationsprogramm (ChannelInput) und wandelt sie in die Empfangskanäle (Chanels) um.
Unter ChannelInputNames werden alle Inputs als Klartext hintereinander in die Liste eingetragen, getrennt von einem Leerzeichen, die Reihenfolge ist im Grunde egal, aufpasen muss man nur, dass die ChannelInputs auch mit den Receiveroutputs übereinstimmen.
Bekannte Inputs sind:
Throttle, Throttle-1, Throttle-2, Throttle-3, Throttle-4, (Throttle-Cut?), Aileron, Elevator, Rudder, Flaps, Airbrake, Glider-Airbrake, Wheel-Brake, Glider-Engine, Retractable-Gear, Retractable-Propeller, Pitch, Roll, Nick, TailRotor, Autorotation, Flight-Mode, Heli-Engine, Cockpit, Hook, Smoke, Release-Load, Variable-Sweep, AUX-1(1-way) [und weitere Mischer (AUX)] und unused (leerer Platzhalter)

Elevator-Trim, Aileron-Trim, Rudder-Trim, Copilot, Mixture, Propeller-Speed und Vario-Volume sind zusätzlich im AeroflyFS verfügbar.

Man kann direkt am Empfänger schon das Vorzeichen (Sign) des Inputs invertieren oder eine Dual-Rate einfügen, den ChannelMode und die Anzahl der Schritte (NumSteps) angeben.

        <[string8][object][receiver]
            <[string8][Name][Receiver]>
            <[string8tmarray][ChannelInputNames][Throttle Aileron Elevator Rudder Smoke            ]>
            <[float64array][Sign][1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ]>
            <[int32array][ChannelMode][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]>
            <[int32array][NumSteps][0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]>
        >

Receiveroutput (Empfängerausgang)

Ein Empfängerausgang im Aerofly5 nimmt sich jeweils nur einen der Channels (Empfangskanäle) als Input und wandelt ihn in ein Signal um, dass man dann z.B. als Servoinput benutzen kann (NAMEINPUT.GetOutput).

Besonders wichtig zu beachten ist, dass auch wirklich der richtige Empfangskanal an den Output übergeben wird. Unter Input muss stets die richtige Nummer des Kanals angegeben werden. Dazu zählt man am besten in der Liste der Empfangskanäle im receiver ab, an welcher Stelle der gewünschte Input steht.

Range gibt den Bereich des Inputs an, meist zwischen -1 und +1.
Mit ClampToRange “true” wird der Output innerhalb der Grenzen gehalten auch wenn evtl. der Steuerinput den Maximalausschlag überschreitet (fehlerhafte Kalibrierung der Steuerung)

        <[string8][object][receiveroutput]
            <[string8][Name][ThrottleInput]>
            <[string8][Input][Receiver.Channel1]>
            <[float64tmarray][Range][-1.000000 1.000000 ]>
            <[bool][ClampToRange][true]>
        >

Output

Einfach gesagt wird der Ausgabewert von einem anderen Objekt (Input) genommen und unter einem frei definierbaren Namen wieder dem Programm zur Verfügung gestellt.
Ein Output wird immer über Name.output angesprochen.

        <[string8][object][output]
            <[string8][Name][AltimeterNeedle]>
            <[string8][Input][Altimeter.PressureAltitude]>
        >

Integrator

Die Integral-Funktion ermöglicht eine zeitliche Aufsummierung eines Wertes. Wenn man wie in dem Beispiel unten “1” über die Zeit integriert erhält man die Zeit selbst. Man hat somit im Aerofly 5 und FS Zugriff auf die Flugzeit. Andere sinnvole Beispiele wären z.B. die Integration des Variometers um auf die Flughöhe über Start zu schließen (was eine eher ungenaue Methode ist) oder die Integration der Fluggeschwindigkeit um die Flugstrecke zu ermitteln. Auch könnte man mit dieser Funktion einen Tank simulieren, als Input wird dann eine Funktion erstellt (via Linearservo z.B.) die dann den Wert vom Integral kleiner werden lässt, bis schließlich das Integral null ereicht, dann ist der Tank alle.

Input: Wert der über die Zeit integriert werden soll
InitialValue: Startwert

Output: InegratorName.Output

        <[string8][object][integrator]
            <[string8][Name][Timer]>
            <[string8][Input][1]>
            <[float64][InitialValue][-30.0]>
        >

Pitot tube (Staurohr)

Ein Staurohr ist ein Messintrument, dass dazu benutzt wird Luftdruck zu messen. Aus der Differnz des Staudrucks, der durch den Fahrtwind erzeugt wird, und dem Statischen Druck, der umgebene Luftdruck, kann man die Anströmgeschwindigkeit der Luft bestimmen. Im Aerofly5 und AeroflyFS kann man vom Staurohr noch mehr Daten auslesen, als nur die Fluggeschwindigkeit und den Luftdruck.
Pitotube.StaticPressure liefert den Luftdruck, der auch im Aerofly mit der Höhe abnimmt.
Mit Pitotube.Sideslip wird ein Output erzeugt, der vom Anströmwinkel des Flugzeugs ist abhängig ist.
Weitere Attribute sind z.B.:
TotalEnergyPressure (für das energiekompensierte Variometer)

        <[string8][object][pitot_tube]
            <[string8][Name][PitotTube]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][R0][1.000000 0.000000 0.200000]>
        >

Hook

Es stehen verschiedene Schlepphaken (hooks) zur Auswahl:
Schlepphaken (TowHook) für den Flugzeugschlepp. Dabei wird nicht unterschieden zwischen der Schleppkupplung am Segler und der Kupplung am Schlepplugzeug.
Windenstarthaken (WinchHook) für den Windenstart. Hier wird das Windenseil angeschlossen.
Griffmulde (LaunchHook) für den simulierten Werfer.
Für jeden der Haken gehört eine Koordinatenangabe R0. An diesem Punkt greift dann die Kraft des Seiles bzw. die Hand des Werfer an.
Unter Body kann man angeben, auf welches Rigidobjekt die Kraft wirken soll.

        <[string8][object][hook]
            <[string8][Name][TowHook]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][R0][0.200000 0.000000 -0.050000]>
            <[string8][ReleaseControl][HookInput.GetOutput]>
        >
        <[string8][object][hook]
            <[string8][Name][WinchHook]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][R0][0.200000 0.000000 -0.050000]>
            <[string8][ReleaseControl][HookInput.GetOutput]>
        >
        <[string8][object][hook]
            <[string8][Name][LaunchHook]>
            <[string8][Body][Fuselage]>
            <[tmvector3d][R0][0.200000 0.000000 -0.050000]>
        >

Wie geht es weiter?

Objekte im Aerofly anzeigen lassen

Leave a comment

Your email address will not be published. Required fields are marked *

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.

This site uses Akismet to reduce spam. Learn how your comment data is processed.