Ich mach das etwas anders (bescheidener). Denn GATTACA bewegt sich auch nur in einer definierten Spielarena von ca. 3m * 3m mit glatten Wänden. Ich habe die Odometrie und zwei Distanzsensoren auf dem Roboter die in einem deutlichen (und bekanntem) Winkel zueinander stehen. Durch die Odometrie habe ich (inkrementell) die Positionswerte (x, y, a), durch die Distanzsensoren habe ich Distanzwerte (Da, Db) zu Wänden.
a) Zu Beginn setze ich den Roboter an eine definierte Stelle in die Arena. Dadurch sind (x0, y0, a0, Da0, Db0) bekannt und die Odometrie initialisiert sich mit (x0, y0, a0).
b) Nach kurzer Fahrzeit dt entstehen fünf neue Werte (x1, y1, a1, Da1, Db1). Die sind aber (systembedingt) ungenau (fehlerbehaftet). Durch die systembedingten Fehler passen sie auch nicht unbedingt gut zueinander. Theoretisch sollten sie aber zueinander passen, denn zwischen (x1, y1, a1) einerseits und (Da1, Db1) andererseits sollte es (bei bekannter Spielarena) immer einen mathematischen Zusammenhang geben. Ist der durch die realen Werte nicht gegeben, gibt es einen inneren Fehler.
c) Jetzt kommt Monte Carlo ins Spiel: In der Nähe des aktuellen Vektor (x1, y1, a1, Da1, Db1) rate ich zufällige andere Vektoren (xi, yi, ai, Dai, Dbi). Wenn man so will, entsteht dadurch um (x1, y1, a1, Da1, Db1) eine kleine Vektor- bzw. Partikel-Wolke. Jeder Vektor hat seinen eigenen inneren Fehler zwischen (xi, yi, ai) und (Dai, Dbi). Habe ich genügend Vektoren geraten wähle ich natürlich den mit dem kleinsten inneren Fehler zum Gewinner. Diesem "vertraue" ich am meisten und erkläre ihn zu meinem neuen Vektor (xg, yg, ag, Dag Dbg). Bemerkung: g steht für Gewinner. Daraus nimmt und initialisiert sich die Odometrie auf die Werte (xg, yg, ag) und das Spiel geht bei b) weiter.
Hier ein Video:
Der linke Teil des Bildes wurde nachträglich aus Logdaten berechnet und visualisiert:
Hellgrau die Position des Roboters ohne Monte Carlo.
Dunkelgrau die Position des Roboters mit Monte Carlo.
Lesezeichen