Die Karte kommt an
Die Capture-Karte ist ein USB-Stick für wenig Geld: HDMI vom Dock rein, HDMI zum Fernseher wieder raus, USB zum Mac. Für den Mac ist sie eine Webcam namens „USB Video“. Innen sitzt ein MS2109-Chip, der Klassiker in dieser Preisklasse. OpenCV, die Bildbibliothek des Python-Programms, öffnet sie wie jede Kamera.
Der erste Test lieferte 30 Bilder pro Sekunde, alle schwarz. Verdacht: HDR, falsches Kabel, Switch im Standby. Tatsächlich hatte die GUI die Karte bereits offen, und ein zweites Testprogramm griff parallel zu. Die Karte bedient nur einen Abnehmer, der zweite bekommt Schwarz. Seitdem gilt: nur ein Programm an der Karte.
Mit einer zweiten USB-Kamera am Mac wechselten die Gerätenummern zwischen zwei Aufrufen: Einmal war Nummer 0 die Capture-Karte, kurz darauf die Webcam. macOS nummeriert Kameras nicht stabil. Die GUI ordnet die Namen jetzt über ffmpeg zu, das dieselbe Reihenfolge sieht wie OpenCV, und die Webcam bleibt abgezogen, solange gefahren wird.
Allein am Mac liefert die Karte 720p mit echten 60 Bildern pro Sekunde, und sogar 1080p mit 60. Das ist mehr, als die Produktbeschreibung verspricht. Standard ist 720p60: kleinster Abstand zwischen zwei Bildern (17 ms), und die KI rechnet ohnehin mit 160×90 Pixeln weiter.

Stoppuhr: 144 Millisekunden
Wie lange dauert es vom Befehl am Mac, bis sich im Bild der Karte etwas bewegt? Die Messung ist simpel: Die Switch steht im Startmenü, die GUI drückt acht Mal Steuerkreuz links oder rechts, der Cursor springt zwischen den Spielen, und eine Stoppuhr läuft, bis sich das Bild ändert.
Der Cursor sprang sichtbar, die Messung sah nichts. Die Erkennung hatte die Helligkeitsänderung über das ganze Bild gemittelt und eine feste Schwelle verlangt. Ein Cursor ändert nur einen kleinen Ausschnitt, im Mittel über 14 400 Pixel geht das unter. Jetzt zählt der Anteil deutlich geänderter Pixel: Ein Cursorsprung ändert zwei bis zehn Prozent, ausgelöst wird ab 0,3 Prozent.
| Teilstrecke | Zeit | Woher |
|---|---|---|
| Mac → ESP32 → Funkpaket | 35 ms | Welt 1, Level 1-6 |
| Funk, Switch, Bildausgabe, Capture-Karte, USB, Dekodierung | ≈ 110 ms | Differenz |
| Ende zu Ende | 144 ms (Median, 128 bis 145 ms, 8 von 8) | GUI, F5 |
Die Werte streuen nur um ein Bild der Karte, die Messung ist also sauber. Was das für die KI heißt: Sie reagiert immer auf ein Bild, das 144 ms alt ist. Bei 15 Entscheidungen pro Sekunde sind das gut zwei Entscheidungen Verzug. Menschen haben am Fernseher übrigens ähnliche Verzögerungen und fahren trotzdem.
Aufnehmen, ohne zu stottern
Die Aufnahme speichert 30-mal pro Sekunde ein auf 160×90 Pixel verkleinertes Bild als JPEG, zusammen mit der Aktion, die in diesem Moment an den Controller ging: Lenkung als Zahl zwischen −1 und 1, Gas, Bremse, Drift, Item. Das Gamepad hängt dabei am Mac, damit die Lenkwerte analog sind. Eine Minute Fahrt sind etwa 14 Megabyte.
Die erste Fassung sammelte 600 Bilder und schrieb sie dann komprimiert auf die Platte, 26 Megabyte Rohdaten im selben Thread, der auch die GUI zeichnet und den Controller bedient. Eine halbe Sekunde Stillstand, und in dieser halben Sekunde ging kein Befehl an den ESP32. Der Watchdog der Firmware tut dann genau das, wofür er gebaut ist: alle Tasten loslassen. Kein Gas, keine Lenkung, Shy Guy im Abgrund. Die Aufnahme selbst verriet es: Lücken von 530 bis 600 ms, exakt alle 10,8 Sekunden. Jetzt wird jedes Bild sofort als JPEG kodiert (unter 3 ms) und ein Hintergrund-Thread schreibt die Dateien. Die zweite Aufnahme hatte keine einzige Lücke über 100 ms.
In den ersten Daten war nie ein Drift zu sehen, obwohl ständig gedriftet wurde. Der Fahrer benutzt ZR und R gleichwertig, aufgezeichnet wurde nur R. Die Aufnahme fasst jetzt R/ZR zu „Drift“ und L/ZL zu „Item“ zusammen; die KI selbst sendet später R und L.
19 Minuten Mario-Kart-Stadion
Vor dem Sammeln wurden die Spielregeln festgelegt, abgeglichen mit Nintendos Einsteigerseiten und Community-Guides: eine Strecke (Mario-Kart-Stadion), ein Fahrzeug (Shy Guy auf dem Motorrad), 150 ccm, Zeitfahren ohne Geist, Lenkhilfe aus. Auto-Gas bleibt aus, weil der Fahrer A ohnehin fast immer hält; die KI drückt A in der ersten Stufe einfach dauerhaft und lernt nur Lenken und Drift. Items kommen später als festes Regelwerk, nicht als Training.
Elf Aufnahmen von je zwei Minuten, zusammen 21,5 Minuten. Jede enthält auch Ladebild, Intro-Kamerafahrt, Countdown und Zielbildschirm. Die Trainingspipeline schneidet das automatisch weg: Fahrt beginnt 1,5 Sekunden nach dem ersten Gasgeben und endet beim letzten Loslassen. Übrig bleiben 19,5 Minuten Fahrt, 30 bis 40 Prozent davon im Drift.

Ein neuronales Netz lernt aus Beispielen, und jedes Pixel ist eine Zahl, die es verarbeiten muss. 160×90 Pixel sind 14 400 Zahlen pro Farbkanal, das rechnet ein Mac in einer Millisekunde. Zum Fahren reicht das: Wo ist die Strecke, wo der Rand, in welche Richtung geht die Kurve. Die Emulator-Projekte aus dem Ausblick haben mit ähnlich kleinen Bildern gearbeitet.
Training: acht Sekunden pro Epoche
Das Netz heißt KartNet und ist dem PilotNet von NVIDIA nachempfunden, das ein echtes Auto allein aus Kamerabildern lenkte: fünf Faltungsschichten, zwei dichte Schichten, rund 600 000 Parameter. Es bekommt vier aufeinanderfolgende Bilder (15 pro Sekunde, also gut eine Viertelsekunde) und sagt zwei Dinge voraus: die Lenkung und ob gedriftet wird. Als Lernziel dient die Aktion, die der Fahrer 130 ms nach dem Bild ausgeführt hat, denn so lange braucht ein Mensch, um auf das zu reagieren, was er sieht.
Trainiert wird mit PyTorch auf der Grafikeinheit des MacBooks. Eine Epoche, also ein Durchlauf durch alle 17 500 Beispiele, dauert acht Sekunden, ein Modell ist nach 25 Epochen in vier Minuten fertig. Gespiegelte Bilder mit negierter Lenkung und leicht veränderte Helligkeit verdoppeln die Daten künstlich.
Die erste Version sagte die Lenkung als Zahl voraus. Richtung in Kurven zu 88 Prozent richtig, aber mit halber Kraft: 0,44 statt 0,87. Der Grund ist Statistik. 69 Prozent aller Bilder zeigen Geradeausfahrt, und ein unsicheres Netz tippt auf den Durchschnitt, also fast null. Die Lösung: Lenkung als fünf Klassen (voll links, halb links, geradeaus, halb rechts, voll rechts), seltene Klassen stärker gewichtet. Richtung jetzt 93 Prozent, Stärke 0,55. Immer noch zaghaft, aber die Regelschleife im Spiel korrigiert 15-mal pro Sekunde nach.
| Was | Netz | Zum Vergleich |
|---|---|---|
| Drift richtig erkannt | 92 % | 70 % bei „nie driften“ |
| Lenkrichtung in Kurven | 93 % | 50 % beim Raten |
| Lenkstärke in Kurven | 0,55 | 0,87 beim Fahrer |
| Rechenzeit pro Entscheidung | 2 ms | 67 ms stehen zur Verfügung |
Gemessen auf einer Aufnahme, die das Netz im Training nie gesehen hat. Eine Überraschung: Die dreifache Datenmenge (19 statt 6 Minuten) hat die Zahlen kaum verbessert. Die Grenze liegt nicht in den Daten, sondern im Prinzip des reinen Nachahmens. Dazu gleich mehr.
Nichts über Mario Kart. Es lernt eine Zuordnung: „Wenn die letzten vier Bilder so aussehen, hat der Mensch so gelenkt.“ Millionen kleiner Stellschrauben werden so lange verstellt, bis die Vorhersage zu den Aufnahmen passt. Dass dabei etwas wie „Kurve erkennen“ entsteht, ist ein Nebeneffekt, kein Plan.
Die KI fährt
Der dritte Tab der GUI heißt KI. F7, und das Netz übernimmt: A dauerhaft, Lenkung und Drift aus den Bildern der Karte, 15 Entscheidungen pro Sekunde. Greift der Mensch am Gamepad ein, fährt er sofort selbst; lässt er los, übernimmt die KI wieder. Ohne frisches Bild für eine halbe Sekunde lässt sie alles los.
Die erste Runde: 45 Sekunden Mario-Kart-Stadion, einmal herum, und der Mensch musste nur dreimal kurz zupacken, zusammen eine Sekunde. Nach 19 Minuten Zuschauen. Das war der Moment, für den der ganze Tag gearbeitet hat.
Shadow-Modus
Dann die Idee aus den Emulator-Projekten: Die KI fährt, der Mensch greift nur ein, wenn sie Mist baut, und genau diese Eingriffe werden aufgezeichnet und dreifach gewichtet nachtrainiert. Jede Aufnahme enthält jetzt die KI-Fahrt als Kontext und die menschlichen Eingriffe als Lernziel. Drei Runden, 16 Eingriffe, sieben Sekunden. Vier Minuten Training. Neues Modell laden, F7.
Das zweite Modell fuhr 48 Sekunden am Stück ohne Eingriff, mehr als eine Runde. Dann drückte es sich in der Antischwerkraft-Passage an die blaue Bande und lenkte weiter hinein statt weg. Vier Sekunden voll rechts, bis es frei war.

Solange die KI auf der Spur ist, sieht sie Bilder wie in den 19 Minuten Training. Klebt sie einmal an der Bande, sieht sie etwas, das der Fahrer nie produziert hat, weil er nie an der Bande klebt. Dann rät sie, und das Raten ist zufällig. Deshalb sind die Eingriffe im Shadow-Modus so wertvoll: Die vier Sekunden an der Bande sind die einzigen Beispiele für „wie komme ich hier weg“. Mit jeder Runde werden es mehr. MariFlow und NeuralKart sind genau auf diesem Weg zu vollständigen Runden gekommen.
Die Schleife dreht sich
Also noch zwei Korrekturrunden, jeweils drei Runden mit der KI am Steuer und dem Menschen als Sicherheitsnetz, dazwischen vier Minuten Training. Die Zahl der Eingriffe pro drei Runden: 16, dann 15, dann 3. Und dann, um 21:29 Uhr, mit 929 Korrektur-Beispielen im Datensatz: F7, Hände weg, drei komplette Runden Mario-Kart-Stadion, null Eingriffe. Mit Drifts in den richtigen Kurven, Antischwerkraft-Passage inklusive.

Sicherheitsnetz: die Festfahr-Erkennung
Zum Abschluss des Tages bekam die KI noch ein Sicherheitsnetz. Sie misst, wie stark sich das Bild zwischen zwei Entscheidungen ändert. Beim Fahren sind das im Mittel 20 Graustufen pro Pixel, in der saubersten Drei-Runden-Fahrt nie länger als eine Zehntelsekunde unter 2. Steht das Bild zwei Sekunden lang, nimmt sie 0,8 Sekunden Gas weg, drückt B, lenkt gegen und fährt weiter.
Die Idee war, genau den Bandenmoment von oben abzufangen. Die Aufnahme zeigt aber: Während das Kart an der Bande entlangschrammt, ändert sich das Bild mit 12 Graustufen, die Kamera wackelt, die Umgebung zieht vorbei. Die Erkennung greift nur beim echten Stillstand, etwa frontal vor einer Wand. Das Entlangschleifen haben die Korrekturfahrten gelöst, nicht die Erkennung. Für später steht die Minimap unten rechts auf der Liste: Der Spieler-Marker verrät, ob es wirklich vorangeht.
Die KI fährt Zeitfahren auf Mario-Kart-Stadion allein, aber noch nicht jeden Lauf sauber: Direkt vor der perfekten Fahrt brauchte derselbe Stand sieben kurze Eingriffe. Nächste Schritte: mehr Rettungen sammeln, eine Festfahr-Erkennung, dann Items und weitere Strecken. Siehe Ausblick.