|
||||||
|
FB3 |
||||||
| AG BKB > Thomas Röfer > Kognitive Robotik II > Übungszettel > | ||||||
3. Übungszettel: Stochastische Selbstlokalisation |
||||||
Ausgabe: 10. Juni 2003 1. Begriffe (20%)Erläutert die Grundidee der Selbstlokalisation mit probabilistischen Ansätzen:
2. Objekterkennung (25%)Entwickelt auf Basis eurer für das Übungsblatt 2 entwickelten Methode zur Erkennung von zusammenhängenden Flächen gleicher Farbe ein Verfahren, um die Marken am Spielfeldrand zu erkennen. Dazu könnt ihr davon ausgehen, dass die aufgenommenen Bilder parallel zur Spielfeldeben orientiert sind, d.h. dass ein Objekt A, das in der Realität oberhalb von einem Objekt B angeordnet ist, auch im Kamerabild über B abgebildet sein wird. Für jede erkannte Marke sollt ihr aus ihrer Farbkombination auf ihre Position auf dem Feld schließen (x = -2200 / 0 / 2200, y = -1450 / 1450). Außerdem müsst ihr ihre x-Koordinate im Bild speichern (Wird für Aufgabe 3 benötigt). Visualisiert jede erkannte Marke dadurch, dass ihr an ihrer Position in der Feldansicht einen Kreis einzeichnet, d.h. in der Feldansicht sind stets alle Marken hervorgehoben, die gerade im Bild zu sehen sind. Tipps. Damit der Roboter die Marken auch aus geringerer Entfernung noch sehen kann, sollte er ungefähr parallel zur Spielfeldebene blicken (z.B. Tilt = 17°). Da diesmal erheblich mehr Farben unterschieden werden müssen als auf dem vorherigen Übungsblatt, könnt ihr eure Farbsegmentierung auch durch die in AiboControl integrierte ersetzen. In der Datei DataTypes\Perception\ColorTable64.h ist die Klasse ColorTable64 definiert, deren Funktion getColorClass(y,u,v) genutzt werden kann, um aus den Pixeln des Bildes die in Tools\ColorClasses.h vereinbarten Konstanten vom Typ colorClass zu machen. Bevor die Farbtabelle genutzt werden kann, muss eine Instanz des Typs ColorTable64 als (Member-)Variable angelegt und die Tabelle im Konstruktor von MyController geladen werden: ColorTable64 colorTable;
//...
InBinaryFile("coltable.c64") >> colorTable;
3. Monte-Carlo-Lokalisation (35%)Teilaufgabe 1. Sorgt dafür, dass sich der Kopf des Roboters langsam von links nach rechts dreht und wieder zurück. Teilaufgabe 2. Die Datei Sample.h enthält die Definition einer Klasse, die ein einzelnes Sample repräsentiert. Versucht die Klasse zu verstehen und erklärt, was ihre Memberfunktionen machen. Teilaufgabe 3. Legt in MyController ein Feld aus 100 Samples an. Ruft am Anfang von execute() einmal updatePose() für jedes Sample auf. Schätzt die Bewegung des Roboters anhand des zuletzt gesetzten MotionRequests (motionRequest.walkParams) und der Zeit, die seit dem Setzen vergangen ist. Stellt die Sample-Menge am Ende von execute() in der Feldansicht dar. Teilaufgabe 4. Ruft für jede erkannte Landmarke einmal updateProbability() für jedes Sample auf und führt danach pro erkannter Landmarke ein Resampling durch. Beim Resampling wird aus dem Anteil der Wahrscheinlichkeit eines Samples an der Gesamtwahrscheinlichkeit die Häufigkeit dieses Samples in der Ergebnis-Sample-Menge bestimmt. Schafft ihr es, diese Transformation in linearer Zeit (bezogen auf die Anzahl der Samples) durchzuführen? Teilaugabe 5. Streut im Rahmen des Resamplings einige zufällig positionierte Samples ein. Welches Kriterium verwendet ihr dazu? Tipp. Da es bei dieser Aufgabe auf Genauigkeit ankommt, sollte man auf die so genannte Simulationszeit umschalten, wodurch die Zeit pro Simulationsschritt um genau 8 ms weitergezählt wird und der simulierte Roboter alle 25 Bilder pro Sekunde erhält. Dafür läuft die Simulation aber deutlich langsamer. Für die Umschaltung gibt man entweder st on in der Konsole ein, oder man ergänzt die Simulationsszene Config\Sim.scn nach der ersten Zeile um den Text REMARK "sim"; und legt eine Datei Config\sim.con mit dem Text st on an, die dann automatisch ausgeführt wird. 4. Wo bin ich wirklich? (20%)Macht Vorschläge, wie man aus einer nach der Monte-Carlo-Methode generierten Verteilung auf die wahrscheinlichste aktuelle Position schließen kann. Begründet eure Vorschläge. Gebt Formeln zur Berechnung der Position an. |
||||||
| Autor: Dr. Thomas Röfer |
||||||
| Kognitive Robotik II |
|
|||||