Umgebungswahrnehmung mittels 3D Laserscanner
|
Laserscanner wie der nebenstehend abgebildete Sick LMS200 sind Sensoren, die den Abstand zu Hindernissen in der Umgebung mittels Laufzeitbestimmung von Laserimpulsen messen. Dieser Sensor ist in der Robotikforschung weltweit sehr verbreitet. Er hat einen Meßbereich von 180° und kann Hindernisse in Entfernungen von 40 bis 60 Metern (je nach Oberflächenbeschaffenheit) erfassen. Im Innern des Sensors rotiert dabei ein Spiegel. Der damit abgelenkte Laserstrahl verlässt den Sensor durch die im Bild zu sehende schwarze Scheibe und wird vom Hinderniss reflektiert und von einem Empfänger innerhalb des Sensors aufgenommen. Die Laufzeit des Signals bestimmt die Entfernung des Objektes. Obwohl die horizontale Auflösung mit 1° oder 0,5° recht groß ist, haben die Sick Laserscanner einen entscheidenten Nachteil: Sie können nur in einer Ebene scannen. Ein echter 3D-Laserscanner ist gerade im Außenbereich, wenn sich der Roboter im dreidimensionalen Gelände bewegt aber sehr wünschenswert. Darum haben wir im Rahmen einer studentischen Projektarbeit eine Neigeeinheit konstruiert, die den Sick LMS200 jeweils 60 Grad nach oben und unten kippen kann. Somit entsteht ein dreidimensionales Abbild der Umgebung, das in entsprechenden Algorithmen weiter verarbeitet werden kann. |
Aktuelle Entwicklungen
Mittlerweile haben wir einen professionellen 3D-Laserscanner vom Fraunhofer Institut IAIS. Zur Inbetriebnahme und für erste Experimente mit dem Gerät haben wir eine
Studienarbeit ausgeschrieben, die noch zu besetzen ist.
Ergebnisse
Hier sieht man ein 3D Modell eines der ersten Scans in unserem Labor. Gut zu erkennen sind drei Personen sowie mehrere Tische und Stühle. Die Ansteuerung der Neigeeinheit, das Auslesen und Vorverarbeiten sowie das Speichern der Messdaten wurde in einer Studienarbeit entwickelt. Zur Visualisierung nutzten wir pyOpenGL, eine Python-Schnittstelle zu OpenGL unter Linux. Der Code zum Ansprechen der Neigeeinheit ist ebenfalls in Python geschrieben.
Im zweiten Bild sieht man die gleiche Szene aus einem ähnlichen Blickwinkel. Allerdings wurde die Punktwolke bereits in einen Octree umgerechnet. Die Datenstruktur Octree ist ein Baum in dem jeder Knoten maximal 8 Kinder hat. Mit ihm lassen sich umfangreiche dreidimensionale Daten effizient speichern und weiterverarbeiten. Jeder der im Bild sichtbaren Würfel ist ein Blatt im Baum und kann mehrere Punkte aus der vom Scanner gelieferten Punktwolke erhalten. Während die Punktwolke oben noch aus über 71.000 Punkten bestand, enthält der Octree lediglich etwa 12.000 Blätter, was schon eine merkliche Reduktion der Datenmenge darstellt. Trotzdem bleibt die Struktur der Umgebung im Wesentlichen erhalten. Der Octree wurde in C++ implementiert. Mit dem Tool SWIG wurde eine Schnittstelle zu Python geschaffen, so dass die Klasse Octree auch von Python Programmen nutzbar ist.