3D Scanner
Um für einen zukünftigen
Roboter mit einem Entfernungsmesser für Hindernisse ausstatten zu
können, wurde ein Distanzsensor mittels zwei Servos drehbar
befestigt. Kern des Scanners ist
ein Sharp 2Y0A02 Sensor, der Entfernungen von 20cm bis 1,5 Meter
messen kann. Der Sensor liefert ein analoges Ausgangssignal, welches
abhängig von der Entfernung zum nächstem Hindernis ist. Mit
den Servos lässt sich der Sensor in zwei Richtungen um jeweils
140° drehen. Werden sämtliche Servo Stellungen nacheinander
angefahren und der Sensorwert ausgelesen, so erhält man ein
komplettes 3D Bild der Umgebung. Der Nachteil dieser
Punkt-für-Punkt Methode ist allerdings seine niedrige
Geschwindigkeit.
Funktionsweise
Ein ATmega8 dient dazu die die Servos
anzusteuern, den Sensor auszulesen und Befehle durch die serielle
Schnittstelle Befehle entgegen zunehmen und die vor-verarbeiteten
Sensorwerte zu senden. Jeder Servo kann in 256 verschiedene Positionen
gefahren werden, so dass sich ein 3D Bild mit maximal 65536 Bildpunkten
generieren lässt. Als Vorverarbeitung lässt sich der Wert des Sensors direkt
in eine Entfernung in Millimeter umrechnen. Zusammen mit den Servopositionen
lässt sich eine X,Y,Z Position relativ zum Sensor ermitteln.
Zusätzlich zu dem Distanzsensor wurde ein Fototransistor auf den
Servos befestigt um die Helligkeit des abgetasteten Punktes ermitteln
zu können. Leider hat der Fototransistor hierfür einen zu
großen Öffnungswinkel, so dass dieser nur von begrenzten
Nutzen ist. Durch Messen des ungefähren Stromverbrauchs der Servomotoren
kann festgestellt werden, ob sich diese noch bewegen oder schon die gewünschte
erreicht haben. Entsprechend wird mit einer Distanzmessung gewartet, bis dies
der Fall ist. Optional lässt sich an dem Controller ein 16x2 Zeichen LCD und ein
Taster anschließen, um die gemessenen Werte direkt ablesen zu
können. Da die Ausgangsspannung nicht linear zur Entfernung ist, wurde eine
Tabelle erstellt, die A/D Werte in Zentimeter umrechnet.
Der Sensor
Laut Datenblatt kann der Sensor von 20cm bis 1,5 Meter
Messungen durchführen. Allerdings ist die Ausgangsspannung nicht
linear zur Entfernung. Daher wurde eine Tabelle erstellt, die die A/D
Werte in Zentimeter umrechnet. Hierfür wurde der Sensor
ungefähr senkrecht auf braune Pappe ausgerichtet und die durch den
10Bit A/D Wandler des Controllers gelieferten Werte bei jeder
Entfernung notiert. Es stellte sich heraus, dass der Sensor von 13cm
bis 160cm Entfernung brauchbare Werte liefert, wobei
die Genauigkeit bei 20cm Abstand ungefähr 0,5cm und bei 1,8
Metern
noch 4-8cm beträgt. Die X Achse der nebenstehenden Grafik
bezeichnet den Abstand in
Zentimetern. Die Y Achse zeigt den bei dem gegebenem Abstand gemessenen
10Bit A/D Wert bei 5V Referenzspannung an. Der grüne Graph zeigt die direkt
gemessenen Werte, für den roten Graph wurden die Werte geglättet. Der
rote Graph wurde als Umrechnungstabelle in den Mikrocontroller programmiert.
Da die Ausgangsspannung bei Entfernungen unter 13cm wieder absinkt
besteht hier die Gefahr, dass zwei verschiedene Entfernungen die
gleichen Sensorwerte liefern.
Java GUI
Um 3D Scans leicht durchzuführen
wurde eine plattformunabhängige GUI in Java geschrieben. Sie
ermöglicht es einen beliebigen Bildausschnitt zu Scannen, die
erstellten Scans zu laden und abzuspeichern, sowie in das PNG-Format zu
exportieren und die Punkte mit POV-Ray als 3D Szene rendern zu lassen.
Bilder
Ein Aufbau mit der Universalbox1
Software
Wie immer, Verwendung auf eigenes Risiko und ohne Gewähr.
3dscanner_1-00.zip |
Quellcode für den Mikrocontroller und die Java GUI. Version: 1.00 |
3dscanner1-schematic.png | Schaltplan des Scanners |
Fazit
Die Auflösung von 1cm reicht um grobe Strukturen zu erkennen.
Während das scannen einzelner Punkte schnell erledigt ist, so dauert doch das
Scannen bei einer Geschwindigkeit von 6 Punkten pro Sekunde, eine ganze Weile.
Der Scan für das oben gezeigte zweite 3D-Bild dauerte rund 1,5 Stunden.
Wer sich also selber einscannen möchte wird sehr viel Geduld benötigen.
Der Fototransistor ist so zunächst wenig zu gebrauchen, hier wäre gegebenenfalls
eine entsprechende Optik von Vorteil.
In Anbetracht der Einfachheit des 3D Scanners sind die Scans aber
zufriedenstellend.