Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2021:raketenbahn:berechnung

Dies ist eine alte Version des Dokuments!


zurück

Berechnung:

Die Koordinaten aller Objekte innerhalb des Sonnensystems werden numerisch für jeden Zeitschritt neu berechnet. Dafür wird für jeden Frame die Krafteinwirkung aller Objekte auf alle Objekte ermittelt und der Position zugerechnet.

Innerhalb dieses Systems befindet sich der Satellit. Um einen energieeffizienten Raumflug zu errechnen wird der Hohmann-Transfer genutzt, welcher die Geschwindigkeitsdifferenzen sowie die Zeitpunkte der Beschleunigungen ausgibt. Nachdem die Beschleunigungen an gegebenen Zeitpunkten durchgeführt wurden, wird der Satellit rein durch die Gravitation der Sonne sein Ziel erreichen.

Hohmann-Transfer

Der Hohmann-Transfer ist eine energie- und zeiteffiziente Methode, von einer Umlaufbahn um einen Körper auf eine andere zu gelangen. In unserem Fall wollen wir unsere Rakete von einem Planeten, beziehungsweise dessen Umlaufbahn um die Sonne zu einen anderen Planeten lenken. Beim Hohmanntansfer wird die Rakete zweimal beschleunigt, einmal, um von der ursprünglichen Umlaufbahn auf eine Ellipsenbahn zu kommen, und dann, um von der Ellipsenbahn auf die endgültige Umlaufbahn zu kommen. Durch die erste Beschleunigung wird das Aphel der Flugbahn auf die geplante Umlaufbahn angehoben, durch die zweite Beschleunigung, wenn die Rakete das Aphel erreicht hat, wird auch das Perihel angehoben, damit die Rakete die Ellipsenbahn verlässt und auf neuen Umlaufbahn bleibt. Aphel ist der von der Sonne am weitesten entfernteste Punkt und das Perihel der sonnennächste Punkt auf der Ellipse.

Die Geschwindigkeitsänderungen lassen sich mit folgenden
Konstanten berechnen:

M = Masse des Zentralkörpers, in diesem Fall der Sonne
G = Gravitationskonstante
ra = Zielradius
re = Anfangsradius
a = große Halbachse der Ellipse = (re+ra)/2
va = Anfangsgeschwindigkeit
vz = Bahngeschwindigkeit des Zielorbits

Die Formel für die erste Geschwindigkeitsänderung dv1 ist:

dv1 = sqrt[(M*G*ra)/(re*a)] - va

Die Formel für die zweite Geschwindigkeitsänderung dv2 ist:

dv2 = vz - sprt[(M*G*re)/(ra*a)]

Weil wir die Rakete nicht nur von einer Umlaufbahn auf eine andere schicken wollen, sondern sie bei einem Planeten startet und auch bei dem anderen Planeten und nicht nur auf dessen Umlaufbahn ankommen soll, müssen auch die Positionen der Planeten zueinander und deren Geschwindigkeiten berücksichtigt werden. Dafür muss die Dauer des Fluges der Rakete von der einen Umlaufbahn zur anderen berechnet werden und die Rakete muss genau in dem Moment starten, wenn der Zielplanet zu dem Punkt genau so lange braucht wie die Rakete.

Gravitation

main.py
def gravitation(obj):
    a = [0, 0, 0]
    for obj_ in objects:  # Einfluss aller anderen Objekte wird berechnet
        if obj != obj_:
            nvector_l = sqrt(
                (obj_.pos[0] - obj.pos[0]) ** 2 + (obj_.pos[1] - obj.pos[1]) ** 2 + (obj_.pos[2] - obj.pos[2]) ** 2)
            nvector = ((obj_.pos[0] - obj.pos[0]) / nvector_l, (obj_.pos[1] - obj.pos[1]) / nvector_l,
                       (obj_.pos[2] - obj.pos[2]) / nvector_l)
            acc = G * (obj_.m / (nvector_l ** 2))
            a[0] += acc * nvector[0]
            a[1] += acc * nvector[1]  # Normalenvektor wird berechnet und mit der Beschleunigung multipliziert
            a[2] += acc * nvector[2]
 
    return a  # nach Durchlauf aller Objekte wird der Beschleunigungsvektor zurückgegeben

In der Gravitationfunktion wird die Kraft aller Objekte auf ein Objekt errechnet. Dazu geht die for-Schleife alle Objekte durch und berechnet den Normalenvektor und die Beschleunigung zu diesem.
Der Wert wird jeden Durchgang der Schleife auf den Beschleunigungsvektor addiert, welcher dann am Ende zurückgegeben wird

Datenimport

main.py
def import_objects():
    i = 0
    for id_ in [1, 2, 3, 4, 5, 6, 7, 8, 301, -143205]:  # ids Horizon Objekte
        obj = Horizons(id=id_, location="@sun", epochs=Time(time).jd, id_type='id').vectors()
        objects.append(
            object(sizes[i],
                   names[i], id_, mass[i], obj["x"][0], obj["y"][0], obj["z"][0], obj["vx"][0],
                   obj["vy"][0], obj["vz"][0]))
        i += 1
    objects.append(object(80, "Sun", 0, 1988500E24, 0, 0, 0))
    # objects.append(object(5, "Satelit", 11, 10, objects[2].pos[0] + 0.01, objects[2].pos[1] + 0.01, objects[2].pos[2] + 0.01, objects[2].v[0], objects[2].v[1], objects[2].v[2]))
    # hier lassen sich weitere beliebige Objekte hinzufügen

Um die Planetendaten zu einem gegebenen Zeitpunkt zu erhalten haben wir das Modul Horizons von astroquery genutzt. Dieses greift direkt über telnet auf die HORIZONS-Datenbank der NASA zu.

ws2021/raketenbahn/berechnung.1617803841.txt.gz · Zuletzt geändert: 2021/04/07 15:57 von konstantinflorian