MATLAB Auswertung

Auswertung der Sensordaten durch einen 3D-Plot mit MATLAB

Bisher konnten die gemessenen Entfernungen und Richtungen nur als Zahlentripel, bestehend aus dem waagrechten Winkel, dem senkrechten Winkel und der Entfernung am Bildschirm, ausgegeben werden. Daraus ergeben sich „verdrehte“ Kugelkoordinaten. Um diese Daten anschaulicher darstellen zu können, wurde ein geeignetes MATLAB-Programm (m-File) geschrieben, welches aus diesen Wertetripeln einen dreidimensionalen Plot erstellt. Aus diesem Plot können die Informationen über Entfernung und Winkelangaben vom Betrachter einfach und schnell erfasst werden.

Dabei gab es mehrere Anforderungen an das Programm:

  1. Die Daten aus dem Arduino müssen direkt von MATLAB eingelesen und auch verarbeitet werden können. Dies geschieht über die serielle Schnittestelle dadurch, dass in MATLAB zunächst ein serielles Objekt erstellt wurde, auf welches dann Wert für Wert zugegriffen werden kann.
  2. Das Programm soll bei erneuter Abtastung eines Punktes automatisch den zugehörigen veralteten Teil aus dem Plot entfernen und die neue Information hinzufügen. Dies wird im Programm dadurch erreicht, dass jede neue graphische Ausgabe in einer Matrix gespeichert wird und dann im Fall der Überschreibung eines Punktes der zugehörige Matrixeintrag über die entsprechenden Indizes aufgerufen, gelöscht und dann neu beschrieben wird.
  3. Wird im Arduino-Programm die Schrittweite der Servo-Bewegung verändert, soll diese automatisch durch das MATLAB-Programm erkannt und im Plot berücksichtigt werden. Dadurch, dass das MATLAB-Programm direkt mit den vom Arduino ausgegebenen Winkelwerten arbeitet, wird diese Anforderung automatisch erfüllt.
  4. Der erstellte Plot soll so übersichtlich wie möglich sein, was durch das alleinige Zeichnen der gemessenen Punkte – das Ergebnis wäre eine dreidimensionale Punktwolke – nicht gewährleistet wird. Jedem Punkt muss also eine Fläche zugeordnet werden. Dabei gibt es unter anderem zwei Methoden:

                 I. Jeder Punkt wird als Mittelpunkt eines zu zeichnenden Polygons betrachtet.

                 II. Jeder Punkt wird als Eckpunkt eines zu zeichnenden Polygons betrachtet.

 

Zu Variante I:

Bevor die Information der Messung am Bildschirm ausgegeben werden kann, müssen bei dieser Methode zunächst alle Eckpunkte des jeweiligen Polygons berechnet werden, was durch gewöhnliche trigonometrische Funktionen geschieht. Vorteil dieser Variante ist, dass pro Entfernungspunkt immer nur ein Polygon im Plot ersetzt werden muss. Mit diesem Verfahren kann jedoch kein Körper mit zusammenhängender Oberfläche erstellt werden; zwischen den einzelnen Polygonen befindet sich immer ein Spalt. (siehe Bild 5a, b).

 

Zu Variante II:

Die Implementierung dieser Methode war etwas aufwändiger, da die Anzahl der zu erstellenden und bei einer weiteren Messung zu erneuernden Polygone von der Lage des jeweiligen Punktes abhängt. So muss im Code unterschieden werden zwischen Eckpunkten (jeweils 1 betroffenes Polygon), Randpunkten (jeweils 2 betroffene Polygone) und den übrigen Punkten (jeweils 4 betroffene Polygone).

Mit dieser Variante ergibt sich ein Körper mit zusammenhängender Oberfläche.

Würde man einen präziseren und schnelleren Abstandssensor benutzen und die Anzahl der abzutastenden Punkte deutlich erhöhen, könnten mit diesem Plot-Verfahren genaue Oberflächenprofile erstellt werden. (siehe Bild 5c, d).

Bild 5: Ergebnisse aus den MATLAB-Programmen