kOS Scriptable Autopilot System 0.3

  • Hey Leute, habe gerade eine schöne Mod gefunden:
    kOS Scriptable Autopilot System 0.31


    Mit diesem Mod bekommt ihr ein zusätzliches Teil was als Computer dient. In dem könnt ihr euch dann eigene Programme schreiben, welche recht simpel zu schreiben sind.
    Da könnt ihr dann Autopiloten schreiben für verschiedene Dinge:
    - Automatischer Start
    - Automatischer Orbit
    - Automatischer DeOrbit (Landen geht leider noch nicht, da der Mod nicht die Drehgeschwindigkeit von Planeten/Monden messen kann)
    usw.


    Hier mal die Readme dazu


    Nur scheinbar ist das ganze für QWERTY-Tastaturen programmiert und der Doppelpunkt (auf der Ö-Taste ;-)) funktioniert nicht. Da bleibt abzuwarten ob es nur ein Bug ist, oder ob da eine Inkompatibilität herrscht ;-)


    Habe mir selber schon mal einen kleinen FlightMonitor programmiert, aber der ist noch in Entwicklung, war mein erster Test der Loops ;-)

  • Zitat

    Nur scheinbar ist das ganze für QWERTY-Tastaturen programmiert und der Doppelpunkt (auf der Ö-Taste ;-)) funktioniert nicht.

    Hoffentlich wird das in nächster Zeit gefixt, war auch mehr Zufall dass ich die " entdeckt hab :D



    Ich hab mal ein paar wichtige Zeichen rausgefunden:
    ) = (
    = = )
    Shift+Ü = :
    Shift+Ä = "
    ; = <
    : = >

  • Ich versuch grade einen funktionierenden Standardautopiloten zusammenzuprogrammieren. :)



    Der Autopilot besteht derzeit aus 3 Programmen:
    -Countdown: ein 5 sekündiger Countdown, bei dem ein letzter "Systemtest" durchgeführt wird, besteht zur Zeit nur aus einmal RCS an/aus schalten, geplant ist aber noch Masse/Treibstoffmenge/Status... anzeigen zu lassen. Wenn der Countdown abgelaufen ist wird der Autolaunch aktiviert.
    -Autolaunch: Aktiviert das Stagingkontrollsystem und besagt in etwa: "fliege 8km hoch, neige dich 50° nach Osten und warte bis deine Apoapsis 102.000m beträgt". Wenn dies der fall ist wird das Orbitalprotocol aktiviert.
    -Orbitalprotocol: "Wenn du 70km erreicht hast aktiviere Actiongroup 1 (Solarpanels), warte bis du noch 10 sek. von der Apoapsis entfernt bist, drehe dich zum Horizont und gib Vollgas bis deine Apoapsis über 105000m beträgt. Danach soll das Orbitalcorrection Programm aktiviert werden.


    geplant sind:
    -Stagingcontrol: Wirft eine Stage ab, wenn sie kein Treibstoff mehr enthält.
    -Orbitalcorrection: macht den Orbit einigermaßen rund.

  • Beim Stagingcontrol muste mal schauen, aktuell kannst du scheinbar nur den gesamten Treibstoffvorrat auslesen. Das heißt du must dem ein Staging bei Stage:LiquidFuel = 180 reinhauen wenn du z.B. noch eine Stage mit 180 LiquidFuel hast. Wenn du Stage:LiquidFuel = 0 eingibst macht er nichts, da er wartet bis auch aus der letzten Stage aller Treibstoff raus wäre.


    Sprich, du must für jede Rakete die du buast ein eigenes Stagingprogramm schreiben.


    EDIT: Wieso endet dein Programm dreimal hintereinander?
    Oder kann man tatsächlich innerhalb eines Programmes noch ein weiteres parallel laufen lassen mit "run anderesprogramm", und die sind dann alle drei geendet?

  • Zitat

    Oder kann man tatsächlich innerhalb eines Programmes noch ein weiteres parallel laufen lassen mit "run anderesprogramm", und die sind dann alle drei geendet?

    Ja das geht (obwohl ich parallel noch nicht direkt ausprobiert hab) ^^


    Das mit den Stages ist ärgerlich. Ich hab vorhin das mit stage:liquidfuel=0 ausprobiert und schwubs ist mir KSP abgestürzt. Ich werd dann wohl vor den Countdown noch einen kleinen Fragebogen klemmen müssen, wo ich die Werte der einzelnen Stages als Variablen festlegen muss :thumbdown: .

  • kurze Frage!


    Wie bekommste den Orbit rund? Mir fehlt da grad noch die Idee wie ich das schreiben sollte... ;-)
    Habe ja anfangs sogar beim Orbitburn den Fehler gemacht und habe ihm gesagt er soll die Periapsis auf 101000m bringen wobei die Apoapsis zu dem Zeitpunkt bei 95000 lag.... Da brennt der und brennt, und brennt ;-) Irgendwann ist der Sprit leer und die Apoapsis irgendwo beim Mun je nach Sprit ;-)

  • :D
    Meinst du das Orbiting- oder das Korrekturprogramm?


    Orbitalprotocol (man ist auf dem Weg zu apoapsis) //Das ist nicht der sicherste Weg um ins All zu kommen und es hängt viel vom Raumschiff ab, das man fliegt.
    -warte bis kurz vor apoapsis z.B. 100.000m und dreh dich nach Osten //Osten: up + R(0,-90,180) , (alternativ kannst du natürlich auch prograde schreiben)
    -Schubkraft auf Maximum, warte bis die apoapsis über z.b. 115.000m beträgt, Schub auf 0 //In der Theorie kann die apoapsis nur über 115.000m betragen, wenn sie auf der anderen Seite des Planeten liegt, in der Praxis jedoch kann es passieren, dass durch zu starke/geringe Beschleunigung die 115.000m schon viel früher/später erreicht werden, deswegen sollte man bei dieser Methode einen möglichst hohen Toleranzwert (hier 15.000m) mit einbeziehen.


    Orbitalcorrection (man ist schon im Orbit)
    -flieg zur apoapsis, dreh dich vorher prograde, gib ein wenig Schub bis die periapsis über z.B. 100.000 m beträgt, Schub auf 0.
    -SAS ein, bis du nahe periapsis bist. //sonst wabbelt dein Raumschiff so komisch rum ;)
    -flieg zur periapsis, dreh dich vorher retrograde, gib ein wenig Schub bis die apoapsis unter z.B. 102.000 m beträgt, Schub auf 0.

  • Ich hätte jetzt auch mal eine Frage:
    Ich hab mehrere Variablen festgelegt, die, wenn sie 1 betragen, den Start eines Unterprogramms durch ein anderes Programm autorisieren, um so einzelne Programme gezielt anwenden zu können.
    Dazu habe ich ein "Bootupprogramm" geschrieben, dass alle Variablen auf 0 setzt. Jetzt wollte ich ein Programm schreiben, dass mir anzeigt welche Variablen grade aktiv sind, aber sobald ich es ausführe stürzt mir KSP ab.


    Das Programm sieht im wesentlichen so aus.


    if X = 0 {
    print "X <false>".
    } .
    if X = 1 {
    print "X <true>".
    }.
    ...


    Jeder dieser abschnitte besteht aus etwa 100 Zeichen, von denen die hälfte Text ist. Entweder hab ich irgendwo einen Denkfehler gemacht und ich komm nicht drauf, oder KOS ist irgendwie damit überfordert ,was ich für eher unwahrscheinlich halte zumal ich auch schon künstliche Zeitverzögerungen zwischen die einzelnen if-Blöcke gesetzt hab ?( .

  • Weiß jemand wie ich die Dateien speichern kann? Also richtig speichern, auf meine Festplatte... Wenn ich die normal mit F5 speicher und ausführe (und die Rakete dann abstürzt) ist das Programm nach dem "Revert to Launch" weg und ich darf es neu schreiben... :S

  • Hi,


    es gibt im Ordner C:\KSP_win\Plugins\PluginData\kOS eine Datei namens arc.
    Das scheint das Archiv (Volume 0) zu sein, welches scheinbar unabhängig von der Rakete ist.
    Ich speichere mein Programm immer da, und es ist auch wirklich immer erreichbar.


    Einfach gleich zu Anfang switch to 0. eingeben und dann nur noch dort arbeiten.
    Leider scheint das keine normale Textdatei zu sein, bei mir zumindest hat reinkopieren nicht funktioniert :S


    Grüße
    Burkhard

  • Ihr könnt auch für jede Rakete direkt schreiben, und wenn euch euer Programm gefällt folgendes eingeben:


    copy deinprogrammname to Archive.


    Das schickt die Datei in die arc Datei.
    Wenn ihr das ganze bei einer anderen Rakete, bzw. einem neustart wieder aus der arc Datei holen wollt.


    copy deinprogrammname from Archive.


    Das anlegen und schreiben direkt im Archive müllt es nur unnötig zu ;-)
    Eine Exportfunktion sollte aber wohl schon in Arbeit sein, da die Leute gerne extern schreiben wollen würden, bzw. die Programme austauschen wollen ;-)

  • Nochmal zu meiner Frage, warum KSP bei mir abstützt, sobald ich mit if-Befehlen gearbeitet hab.
    Es lag daran, dass ich noch mit der 0.2 Version gearbeitet hab in der es if-Befehle noch überhaupt nicht gab. Also hab ich mir die neuste 0.35 runtergeladen und die alten Datein ersetzt. Als ich dann KSP neu gestartet hab konnte ich nicht mehr auf meine Savegames zugreifen. Auch nicht als ich den Mod deinstalliert oder ich KSP neu runtergeladen hab.


    Ich werd morgen mal versuchen die Quicksave/Persistent/Ships Datein in einen neuen Spielstand zu retten, wäre nämlich wirklich schade drum da das savefile schon über ein halbes Jahr alt ist.
    Ich würde also jedem raten eine Sicherheitskopie von seinen Savefiles zu machen. :thumbup:

  • Ich habe da ein Problem:
    Ich habe ein Proggramm geschrieben was besagt:


    Starte, flieg hoch bis 12km, wirf die booster ab, beginne den Gravity Turn und warte bis die AP 75200m beträgt.
    Schalte dann das Triebwerk aus, aktiviere RCS und drehe dich auf Prograde. Aber wie sage ich jetzt, das er ca. 20s vor der AP das Triebwerk anwirft? Ich habe da schon vieles versucht, hat aber leider alles nicht geklappt ?(


    Kann mir da jemand helfen? 8|
    Dank im voraus
    Jebediah Kerman

  • d.h. "<" und ">" sind noch nicht implementiert und "wait until eta:apoapsis - 20." prüft ob "eta:apoapsis - 20 > 0" wenn ich richtig liege?


    //edit: So gerade alles mal durchgetestet und bin zu dem Schluss gekommen dass "<" und ">" wunderbar funktionieren. eta:apoapsis gibt genau die Zeit die die Rakete noch bis zum Apoapsis braucht.