Steuerung mit Python

FlightGear hält seinen ganzen Zustand im Property-Baum: Höhe, Schalter, Autopilot, Ansicht. Über den eingebauten Telnet-Server kann jedes Programm ihn lesen und ändern. starten.sh schaltet den Server auf Port 5411 ein.

Erstes Skript

Lege die Datei neben fg_steuerung.py und starte sie, während FlightGear läuft:

from fg_steuerung import Fg

fg = Fg()
print("Höhe:", fg.get("/position/altitude-ft"))
fg.set("/sim/current-view/view-number", 1)
fg.nasal('setprop("/sim/messages/copilot","Hallo");')

Was man wissen sollte

  • Nasal ohne Leerzeichen: run nasal script=… verträgt keine Leerzeichen außerhalb von Zeichenketten. Längerer Code gehört besser in eine Funktion, die im Flugzeug oder Add-on liegt.

  • Geduld beim Warten: FlightGear antwortet nicht, solange es stockt. Der erste Wechsel in eine Außenansicht dauert mehrere Sekunden. Bei mir beendete ein Timeout von 10 Sekunden ein Flugskript mitten im Start, darum wartet Fg bis zu 30 Sekunden.

  • Prüfen statt annehmen: Ein gesetzter Wert heißt noch nicht, dass die Aktion wirkt. Nach einem Triebwerksstart also den Schub auslesen, und bei null mit klarer Meldung abbrechen.

Pfade finden

Die Bedienoberfläche zeigt den Baum unter Debug → Browse Internal Properties. Von außen geht es mit:

telnet 127.0.0.1 5411

Dort funktionieren ls, cd, get und set, beendet wird mit quit.

Beispiel: warten bis zur Landung

import time
from fg_steuerung import Fg

fg = Fg()
while float(fg.get("/position/altitude-agl-ft") or 0) > 5:
    time.sleep(0.5)
print("Unten, über Grund:", fg.get("/velocities/groundspeed-kt"), "kt")