Ich implementiere eine Monte-Carlo-Lokalisierung für meinen Roboter, die eine Karte der Umgebung sowie ihres Startorts und ihrer Ausrichtung erhält. Mein Ansatz ist wie folgt:
- Erstellen Sie gleichmäßig 500 Partikel um die angegebene Position
- Dann bei jedem Schritt:
- Bewegungsaktualisierung aller Partikel mit Kilometerzähler (mein aktueller Ansatz ist newX = oldX + odometryX (1 + standardGaussianRandom) usw.)
- Weisen Sie jedem Partikel mithilfe von Sonardaten ein Gewicht zu (die Formel gilt für jede Sensorwahrscheinlichkeit * = gaussianPDF (realReading), wobei gaussian den Mittelwert für das vorhergesagte Lesen hat).
- Geben Sie das Partikel mit der größten Wahrscheinlichkeit als Position in diesem Schritt zurück
- dann werden 9/10 der neuen Partikel gemäß den Gewichten von den alten neu abgetastet und 1/10 wird gleichmäßig um die vorhergesagte Position abgetastet
Jetzt habe ich einen Simulator für die Umgebung des Roboters geschrieben. So verhält sich diese Lokalisierung: http://www.youtube.com/watch?v=q7q3cqktwZI
Ich habe große Angst, dass der Roboter für einen längeren Zeitraum verloren gehen könnte. Wenn Sie Partikel in einem größeren Bereich hinzufügen, geht der Roboter noch leichter verloren.
Ich erwarte eine bessere Leistung. Irgendein Rat?