Universität Bremen  
  FB3 DFKI Kontakt  
  AG BKB > Thomas Röfer > Kognitive Robotik I > Übungszettel > Deutsch
English
 

4. Übungszettel: Kartografierung und Selbstlokalisation

 

Ausgabe: 8. Januar 2003
Abgabe: 22. Januar 2003

1. Triangulation (20%)

Drei Landmarken spannen ein Dreieck auf, dessen Längen und Winkel vollständig bekannt sind. Ein gedachter Roboter kann die Marken anpeilen und erhält die Winkel zwischen den drei Peilungen. Um seine Position und Orientierung zu bestimmen, braucht er aber auch Entfernungen zu Landmarken.

Rechnet die Entfernung zu einer der Landmarken aus (die anderen beiden könnten dann analog bestimmt werden). Macht auf jeden Fall eine Zeichnung und gebt den Rechenweg an.

2. Begriffe (20%)

Grenzt die folgenden Begriffe voneinander ab und erläutert sie:

  • Kartografierung - Selbstlokalisierung
  • Lokale Karte - Globale Karte
  • Relative Selbstlokalisierung - Absolute Selbstlokalisierung
  • Reduktionsfilter - Projektionsfilter

3. Histogramme und Korrelationen (30%)

Implementiert ein Histogramm, mit dem man eine Statistik über die Häufigkeit von Werten in einem bestimmten Bereich aufbauen und die beste Korrelation zwischen zwei Histogrammen ermitteln kann. Realisiert es als Klasse Histogram mit mindestens folgender Signatur:

Histogram(int numberOfCells, double minValue, double maxValue)
Mit dem Konstruktor definiert man den Wertebereich des Histogramms, sowie die Anzahl der Zellen, in die dieser Bereich diskretisiert wird.
void insert(double fromValue, double toValue, double amount)
Mit dieser Funktion trägt man Werte in das Histogramm ein. amount gibt dabei die Größe an, die in das Histogramm eingefügt (also zu Zellen hinzugezählt) wird, fromValue und toValue geben den Bereich an, über den amount verteilt wird. Fallen sowohl fromValue als auch toValue in dieselbe Zelle des Histogramms, wird amount einfach zu dieser Zelle addiert. Ansonsten wird amount anteilig über alle betroffenen Zellen verteilt. Es wird nur der Teil des Bereichs in das Histogramm eingetragen, der auch innerhalb der Histogramm-Grenzen liegt.
double getMostFrequentValue() const
Die Funktion liefert den häufigsten Wert im Histogramm zurück, d.h. einen Wert, der der Zelle zugeordnet würde, in der sich der größte amount aufsummiert hat.
double correlate(const Histogram& other,double range) const
Die Funktion sucht nach der besten Korrelation zwischen diesem Histogramm und einem weiteren und liefert die optimale Verschiebung zwischen den beiden Histogrammen zurück. In range wird der zu testende Bereich der Verschiebungen angegeben (d.h. -range ... range). correlate() soll die Histogramme als zyklisch ansehen, d.h. jedem Wert in einem Histogramm wird immer genau ein Wert im anderen zugeordnet.

Konstruiert Testfälle und stellt den Inhalt der Histogramme sowie die optimale Korrelation zwischen zwei Histogrammen grafisch dar. Beachtet die Sonderfälle von insert(). Es ist wichtig, die Klasse Histogram ausgiebig zu testen, bevor ihr mit der nächsten Aufgabe beginnt!

4. Scan-Überdeckung (30%)

In dieser Aufgabe geht es darum, mit dem Roboter einen Entfernungs-Scan aufzunehmen, den Roboter zu versetzen, einen weiteren Scan aufzunehmen und aus den beiden Scans den Versatz der Aufnahmepositionen zu bestimmen. Die Scans sollen dabei bereits in Strecken zerlegt worden sein (vgl. Aufgabe 1 des 2. Übungsblatts).

Bei dieser Aufgabe sollte man Schritt für Schritt vorgehen und Zwischenergebnisse grafisch darstellen. Zu jedem Scan sollten die segmentierten Strecken sowie die Aufnahmeposition (mit Orientierung) visualisiert werden. Nach der Überdeckung sollte einer der beiden Scans relativ zur ermittelten Verschiebung gezeichnet werden, so dass die Strecken der beiden Scans übereinander liegen.

Die Überdeckung läuft in drei Schritten ab:

Rotationsversatz bestimmen

  • Um die Verdrehung zwischen den beiden Aufnahmepositionen zu bestimmen, muss für beide Scans ein Winkelhistogramm aufgebaut werden. Dazu wird die Orientierung jeder Strecke bestimmt und ihre Länge unter dieser Orientierung in das Histogramm eingetragen. Danach werden beide Histogramme korreliert. Das Ergebnis ist die Verdrehung zwischen den beiden Aufnahmepositionen.
  • Welchen Wertebereich muss das Winkelhistogramm abdecken?
  • Für die weitere Verarbeitung ist es notwendig, einen der beiden Scans um diese Verdrehung zu rotieren, damit beide Scans dieselbe Orientierung haben.

Ersten Translationsversatz bestimmen

  • Um den ersten Translationsversatz zu bestimmen, muss zuerst die sog. Hauptrichtung der Scans bestimmt werden, das ist die Richtung, in die die meisten Strecken orientiert sind. Dann werden beide Scans so gedreht, dass die Hauptrichtung entlang der x-Achse verläuft.
  • Für beide Scans wird ein Histogramm über die Verteilung der y-Koordinaten der Strecken aufgebaut. Als amount werden dazu die Ausdehnungen der Strecken in x-Richtung verwendet. Beide Histogramme werden korreliert und die beste Korrelation ist Verschiebung der Aufnahmepositionen quer zur Hauptrichtung.

Zweiten Translationsversatz bestimmen

  • Für den zweiten Translationsversatz wird vereinfachend davon ausgegangen, dass die zweite Hauptrichung senkrecht auf der ersten steht. Beide Scans werden dazu um 90° gedreht und das Prozedere des vorherigen Schrittes wiederholt. Damit ist die Verschiebung entlang der Hauptrichtung bekannt.
  • Es ist zu beachten, dass die beiden Verschiebungen noch in die Hauptrichtung gedreht werden müssen, um die korrekte Verdrehung und Verschiebung zwischen den Aufnahmepositionen der Scans zu erhalten.

 
   
Autor: Dr. Thomas Röfer
 
  Kognitive Robotik I 
Zuletzt geändert am: 1. Januar 2003   impressum