Das Problem: Rollen über die Wiese

Mein Autopilot-Skript rollt die Dash 8 in FlightGear selbstständig von der Parkposition zur Startbahn. Den Weg sucht es im Rollwegnetz des Flughafens, dem groundnet, das FlightGear mit der Landschaft aus TerraSync lädt. An den meisten Flughäfen passt das genau. In Aberdeen (EGPD) fuhr die Dash 8 auf dem Weg zur Bahn 16 aber plötzlich quer über die Wiese – im Twitch-Stream gut zu sehen.

Die Flugdaten zeigten: Das Flugzeug fuhr exakt auf den Linien des Rollwegnetzes. Der Fehler lag also nicht im Skript, sondern in den Daten. Nur wo genau?

Dash 8 von oben auf einer Wiese, der Rollweg liegt links daneben
Bild 1 - Vorher: Die Dash 8 folgt dem Rollwegnetz und steht auf dem Gras, der Asphalt liegt links daneben

Erster Versuch: Schätzen nach Bildern

Mit Bildern von oben (Hubschrauber-Ansicht, alle 15 Sekunden aufgenommen) sah es zunächst nach einer einzelnen falschen Kante aus: Rollweg M ist im Netz eine gerade Linie über 531 m, in der Landschaft gabelt er sich. Zwei geschätzte Zwischenpunkte reichten aber nicht – beim nächsten Test stand die Dash 8 wieder im Gras. Der ganze nördliche Teil des Netzes liegt neben dem Asphalt, auch die Knoten selbst.

Die Lösung: den Untergrund abtasten

FlightGear kann für jeden Punkt sagen, welches Material dort liegt: Die Nasal-Funktion geodinfo(lat, lon) liefert Höhe und Material, zum Beispiel Grass oder pa_taxiway (Asphalt, „pa“ = paved). Ein kleiner Helfer tastet damit ein Raster ab und legt das Ergebnis in einer Eigenschaft ab, die ein Python-Skript über die Telnet-Schnittstelle abholt:


setlistener("/claude/scan/start", func(n) {
    if (!n.getBoolValue()) return;
    var lat0 = getprop("/claude/scan/lat0"); var lon0 = getprop("/claude/scan/lon0");
    var nx = getprop("/claude/scan/nx"); var st = getprop("/claude/scan/step-m");
    var dlon = st / (111320 * math.cos(lat0 * D2R));
    var zeile = [];
    for (var x = 0; x < nx; x += 1) {
        var info = geodinfo(lat0, lon0 + x * dlon);
        append(zeile, (info != nil and info[1] != nil) ? info[1].names[0] : "?");
    }
    setprop("/claude/scan/result", string.join(",", zeile));
    setprop("/claude/scan/start", 0);
}, 0, 0);

Abgetastet habe ich ein Gebiet von etwa 520 × 760 m im 4-m-Raster, Zeile für Zeile (eine einzige lange Antwort kommt über Telnet nicht durch). Asphalt, Markierungen (lf_…) und Gras ergeben zusammen mit dem Rollwegnetz ein klares Bild:

Karte aus der Abtastung: Asphalt grau, Gras grün, Rollwegnetz gelb, korrigierter Weg magenta
Bild 2 - Abgetasteter Untergrund in Aberdeen: Nach Knoten 75 biegt der Asphalt in einem Bogen nach rechts zur Bahn 16 ab, das Rollwegnetz (gelb) fährt geradeaus über das Gras. Magenta: der korrigierte Weg

Den neuen Weg sucht ein Dijkstra-Algorithmus direkt auf dem Raster: nur über Asphalt-Zellen, und je näher eine Zelle am Rand liegt, desto teurer – so läuft der Weg in der Mitte des Rollwegs. Danach vereinfacht der Douglas-Peucker-Algorithmus die Zellen auf sechs Zwischenpunkte.

Die Korrektur im Rollskript

Die Dateien von FlightGear bleiben unverändert. Das Rollskript lädt das Rollwegnetz wie bisher und wendet danach eine kleine Korrekturliste an: Die falsche Kante kommt heraus, die neue mit den abgetasteten Zwischenpunkten kommt hinein.


GROUNDNET_KORREKTUR = {
    "EGPD": {"weg": [(75, 134)],
             "neu": [(75, 130, [(57.205512, -2.203570), (57.207740, -2.205428), (57.208171, -2.205428),
                                (57.208710, -2.204963), (57.209249, -2.203902), (57.209249, -2.203437)], "M")]},
}

Der Weg zur Bahn wird damit auch kürzer: 929 statt 1105 m. Im Test von der Parkposition aus rollte die Dash 8 durch den ganzen Bogen auf dem Asphalt und stand danach genau auf der Mittellinie der Bahn 16.

Dash 8 von oben im Bogen des Rollwegs, vorne die Schwelle der Bahn 16
Bild 3 - Nachher: im Bogen auf dem Asphalt, vorne die Schwelle der Bahn 16
Dash 8 von oben auf der Mittellinie der Startbahn
Bild 4 - Startbereit auf der Mittellinie

Fazit

Das Rollwegnetz und die Landschaft in FlightGear entstehen getrennt und passen nicht überall zusammen. Wer automatisch rollt, sollte dem Netz deshalb nicht blind vertrauen. Mit geodinfo lässt sich der echte Untergrund in wenigen Minuten abtasten, und das Verfahren funktioniert an jedem Flughafen. Aufgefallen ist mir der Fehler übrigens im Live-Stream – ein Blick auf die Wiese hat gereicht.