[kOS] Rendezvous und Docking

  • Ich wende mich an Euch, da ich hoffe, mit Euch zusammen ein Script zu erstellen, welches in der Lage ist selbstständig ein Rendezvous im All durchzuführen. Als Bonus oben drauf, kleine Fleißaufgabe am Ende wäre auch das Docken nützlich. Doch ein Schritt nach dem anderen. Was ich bisher als Wissensquelle genutzt habe ist hauptsächlich dieses Video: YouTube. Anstrengend ist dieses Video, denn es geht zwei Stunden, der Kerl kämpft über einige Strecken hinweg mit der Technik und ich bin in Mathe nur sehr begrenzt begabt. :saint: Was da erzählt ist nicht völlig unverständlich und ich glaube den Weg verstanden zu haben, allerdings happert es dann mit seinen Erklärungen und Funktionen und allem... Also es happert bei mir, nicht bei dem Streamer. :facepalm:


    Das Ziel ist ein Programm, welches ohne Hilfe von Maneuver Nodes alle Daten zum Rendezvous ermittelt und das Manöver selber fliegt.


    Folgende Probleme sind zu lösen:

    • Inklination anpassen

      • AN und DN ermitteln
      • Richtung und Brenndauer zu Anpassung der Inklination ermitteln
      • das Manöver fliegen
    • Orbits anpassen

      • gibt es schon eine Überschneidung?
      • ist der Orbit_Retter größer oder kleiner als der Orbit_Opfer?
      • eine Überschneidung erzeugen
      • Manöver zur Annäherung fliegen


    Ich hab mit noch Videos von Kevin Gisi dazu angeschaut, seine Methode ist aber weder elegant, noch funktioniert sie bei unbekannter Inklination oder Orbits die sich nicht überschneiden... Glaube ich :)


    Schaffen wir das hier? Gibt es genug Interesse daran zu werkeln?
    Lasst mich nicht hängen :P


    Grüße
    Smith

  • Ob das Thema einschläft kann ich vorher nicht sagen. Im Moment bin ich hellwach. :)


    Ich fass mal ein paar mathematische und geometrische Dinge zusammen, die ich aus dem Video habe.
    Ob die stimmen kann ich nicht sagen.
    Warum die so sind, kann ich auch nicht sagen. ^^


    Um den Winkel zwischen zwei unterschiedlichen Orbits (wie ist denn der Plural von Orbit?) zu bekommen, muss man das Kreuzprodukt der Normalvektoren der Orbits ermitteln.
    Ich hab keine Ahnung wie man Vektoren schreibt ohne den Pfeil drüber... also diese Formeln sind die Variablen Vektoren.


    N1 = R1 X V1
    N2 = R2 x V2


    R ist der Radiusvektor zum Zentrum der Masse des Planeten, V ist der Geschwindigkeitsvektor
    1 und 2 weil wir einen Orbit 1 und einen Orbit 2 haben, mit einer Rakete 1 und einer Rakete 2
    N ist der Normalvektor des betreffenden Orbits


    Die Richtung in die man brennen muss um die Inklination anzupassen ist die Hälfte des Winkels zwischen N1 und N2. (Fragt bloß nicht warum!) Scheinbar ermitttelt man die Hälfte zwei Vektoren indem man deren Einheitsvektoren addiert.


    B = N1(Einheitsvek) + N2(Einheitsvek)


    B ist die Richtung in die man brennen muss. Nun fehlt noch die Länge des Vektors B um zu wissen wie lange man brennen muss.


    |B| = - 2 | Va| * cos ( Vang (Va, B) )


    Die senkrechten Striche bedeuten, es geht hier um den Betrag des Vektors. "Vang" ist eine Funktion in kOS um Winkel zwischen Vektoren zu ermitteln.




    Ich bin hauptsächlich am übersetzen des Videos. Hoffe irgendeiner hier versteht die Mathematik. Nun will ich mal schauen, wie man das in KerboScript umsetzen kann. Und keine Sorge, das ist noch nicht einmal ein Viertel der Miete .:D

  • Winkel zwischen Vektoren: cos y = (a*b)/(|a|*|a|) also so allgemein. Auf die Orbitale müsste man das ggf. umrechnen.
    Und das Kreuzprodukt gibt den Vektor der orthogonal zu den zwei anderen steht.
    Das würde also für N1 und N2 bedeuten der Vektor der in Flugrichtung nach rechts oder Links zeigt, je nach Vorzeichen.
    Und ja, wenn ich mir das so vorstelle dann ändert man genau damit die Inklination. Also passt irgendwie. :)

    Durch das Lesen akzeptierst du meine EULA!

  • Die beiden N zeigen nicht in die Flugrichtung.


    Der Orbit bildet eine Kreis oder eine Elipse. Man kann sich nun auch vorstellen, dass der Orbit eine Fläche überzieht, in der Mitte der Planet.


    R zeigt von der Rakete über die Fläche zum Zentrum des Planeten.


    V zeigt in die Flugrichtung, denn das ist der Geschwindigkeitsvektor


    Das Kreuzprodukt aus beiden steht nun orthogonal zur Fläche die der Orbit bildet. So habe ich es verstanden.

  • Die beiden N zeigen nicht in die Flugrichtung.

    Ich weis. Und mit meinem Satz: "Das würde also für N1 und N2 bedeuten der Vektor der in Flugrichtung nach rechts oder Links zeigt, je nach Vorzeichen." wollte ich ganau das audrücken.
    Hab mich dann wohl doch etwas ungeschickt ausgedrückt. Deine Anschauung ist da vestädlicher.

    Durch das Lesen akzeptierst du meine EULA!

  • Der Wahnsinn geht weiter.


    Wir müssen nun den Punkt im Orbit berechnen, an welchem wir brennen müssen um die Inklination zu ändern. Wir suchen also die Ascending und Desecndig Node (AN und DN). Oben haben wir die Vektoren N1 und N2 berechnet. Das Kreuzprodukt dieser beiden Vektoren ergibt einen Vektor vom Zentrum des Planeten durch den Punkt an dem sich die Orbitalbahnen kreuzen.
    Nun müssen wir diesen Punkt irgendwie ermitteln. Das machen wir über die True Anomaly (TA). Dieser Wert gibt einen Punkt im Orbit in Grad an, abhängig von der Periapsis. Ich glaube eigentlich wird der Wert im Bogenmaß angegeben, doch in kOS verwenden wir Gradmaß.
    Über Winkelberechnungen können wir nun ausrechnen, wie weit die Kreuzung der Orbitalbahnen unserem Schiff voraus liegt. Die Position des Schiffes selber liefert uns eine in kOS eingebaute Funktion.


    Daraus folgt also:


    TA der Kreuzung der Orbits = TA des Schiffs + (Winkel zwischen Schiff und [Kreuzprodukt von N1 und N2]).


    Ich hab da mal was in KerboScript gebaut, immerhin geht es hier ums Programmieren.



    Ich hoffe ihr könnt mir noch folgen