Sonntag, 20. Dezember 2015

Datenverarbeitung - LSM9DS0

Schon in den ersten Wochen der Projektarbeit kristallisierte sich die Verarbeitung der rohen Beschleunigungs-, Magnetfeld- und Winkelgeschwindigkeitsdaten als ein essenzielles Teilstück der frühen Entwicklung von RIS heraus. So legten wir bereits von Beginn an ein großes Augenmerk auf rasche Fortschritte in diesem Gebiet.
Nach wenigen Wochen waren wir in der Lage die Daten mittels eines Mikrocontrollers auszulesen und durch eine RS232-Schnittstelle an einen PC zu senden (siehe Blogeintrag: 16. Oktober/ 8. November). In weiterer Entwicklung wurden nun Methoden aufgebaut und geschrieben, um die an den PC übermittelten Werte als csv-Datei zu speichern, beziehungsweise um sie in Echtzeit zu verarbeiten und graphisch darzustellen.
So wurden die Daten zu Beginn noch abgespeichert, um bei der Entwicklung der Rechenmethoden wiederholt auf die gleiche, numerisch dargestellte, Bewegungsabfolge zugreifen zu können. Anleitung für diese Methoden stammt von bereits bestehenden Arbeiten, welche sich ebenfalls mit diesen Sensortypen befassten, jedoch komplett eigenständig zu erdenken sind die speziellen Anwendungsfälle für den Laufvorgang.

Orientierung im Raum  

Bisherige Arbeit wurde hauptsächlich in die Lagebestimmung des Sensors investiert. Dabei geht es um die Erkennung der Drehauslenkung des Sensors aus dem Nullzustand (=exakte Lage der negativen Z-Achse in der Gravitation/Erdbeschleunigung), was durch eine Kombination aus Vektor- und Matrixrechnung gelingt. Die hier verwendete Berechnungsvorschrift gilt nur für sich in Ruhelage befindende Körper. Informationen zu diesem Thema stammen vor allem aus den folgenden Quellen.
https://github.com/kriswiner/MPU-6050/wiki/Affordable-9-DoF-Sensor-Fusion
http://www.codeproject.com/Articles/729759/Android-Sensor-Fusion-Tutorial
http://www.nxp.com/files/sensors/doc/app_note/AN4248.pdf
http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToMatrix/index.htm

Die verwendeten Bezeichnungen sind aus dem festgelegten Standard und wie folgt beschrieben.
Die aus diesen Anleitung hervorgehende Schrittabfolge wurde persönlich programmiert und enthält eigene Ideen, sowie gewisse Abschnitte aus oben angeführten Quellen, die teilweise übernommen wurden.
  1. Berechnung der Erdbeschleunigung aus den Achsenbeschleunigungen.
  2. Berechnung der Magnetflussstärke nach selber Vorgehensweise mit den Magnetdaten.
  3. Bank und Attitude werden durch Winkelfunktionen aus den Achsenbeschleunigungen geschlossen.

  4.  Die x- und y- Komponenten des magn. Flusses werden der Gravitationslage angepasst und daraus der horizontale Magnetfluss berechnet.
Hier würde nun die Berechnung des Heading folgen, diese stellt sich jedoch als Stolperstein heraus, der den Fortschritt zurückhält und somit den derzeitigen Stand des Algorithmus auf die obigen Winkeln beschränkt.


Für den Tag der offenen Tür wurde nun noch eine Anwendung zur graphischen Ausgabe in 3D erstellt, die das Testen des Algorithmus in Echtzeit ermöglicht. Hier wird ein den Sensor darstellender Quader nach den vom LµC gesendeten Daten gedreht.


Die nächsten angedachten Entwicklungen gelten nun dem Heading, sowie der Einbindung der Gyroskopdaten, welche äußerst genaue und kurze Zeitabstände bei der Messung benötigen, und damit dem Abschluss der Orientierungsberechnung.
Den nächsten großen Punkt stellt danach die Geschwindigkeits- und Ortserkennung dar.

"Data Mining with Weka" - Rekapitulation

Fast exakt zwei Monate nach Endtermin des Kurses und beinahe drei Monate nach meiner Komplettierung dessen, hier eine kurze Zusammenfassung.
Der Data Mining with Weka Kurs beschäftigt sich mit dem Erlernen des von der neuseeländischen Universität Waikato entwickelten Tools Weka. Dieses dient der erleichterten Findung von Algorithmen zur Klassifizierung von riesigen Datenmassen nach einem vorher bestimmten Muster.   
         - Um diese sehr wage Aussage etwas zu konkretisieren, es wird vom Anwender eine csv-Datei
         mit Datenpaketen bereitgestellt, welche neben den diversen Attributen auch bereits eine
         Klassifizierung aufweist. Anhand dieses Datensatzes wird dann das Tool in die Erkennung
         eingelernt, durch das Setzen verschiedenster Parameter, der im Tool integrierten Algorithmen.
         Diese Algorithmen umfassen das gesmate derzeitige Spektrum an Klassifizierungsmethoden
         und lassen sich auch durch Funktionen kombinieren, um eine noch bessere Einordnung der
         Daten zu ermöglichen. Nach den jeweiligen Erlernschritten wird dann mit einem für das
         Programm noch unbekannten Datensatz die Akkuratesse des Algorithmus bestimmt. Bei
         Erreichen eines zufriedenstellenden Ergebnisses kann dieser dann als Java-Code exportiert
         werden. -
Die im Kurs erlernten Informationen waren sowohl umfangreich, als auch, trotz zeitweise hoher Komplexität, gut aufbereitet, was das Verstehen dieser sehr erleichterte. Neben etlicher Zwischenübungen, die das Verständnis klar verbesserten, lieferten vor allem die zwei Feststellungen, zur Kursmitte, beiziehungsweise am Ende, eine gute Möglichkeit zur Rekapitulation des angehäuften Wissens.

Abschließend noch zum Grund der Verspätung dieses Eintrages. Die Belohnung dieses doch nicht vernachlässigbaren Lernaufwandes wurde vom Kurs in Form einer Erfolgsbestätigung festgesetzt. Gerne hätte ich diesem Eintrag ein Foto dieser Bestätigung beigelet, jedoch stellte sich heraus, dass beim Abschicken der Zwischenfeststellung ein Fehler aufgetreten sein musste, wodurch diese nicht gewertet und der Kurs damit nicht beendet wurde.
Auf den großen Pool an neuem Wissen, der dadurch entstand muss aber erfreulicherweise nicht verzichten werden, was Weka zu einem wohl essenziellen Tool für den späteren Entwicklungsverlauf des Projektes werden lässt.

Dienstag, 1. Dezember 2015

App: Linechart mit Daten von Datenbank mit MPAndroidChart und SQLite

Eine der Anforderungen an die App ist, die Daten vom Sensor zu speichern und optisch darzustellen.
Üblicherweise wird auf Android Geräten SQLite für Datenbanken verwendet. Für das zeichnen von Diagrammen stehen eine Menge an Open Source Libaries zur verfügung, von denen wir uns für MPAndroidChart entschieden haben.

Wir haben ein Testprogramm geschrieben, bei dem Zufallsdaten (später die Daten vom Sensor) generiert und in eine Datenbank gespeichert werden. Auf Button druck werden die Daten aus der Datenbank gelesen und in eine ArrayList geschrieben, die von MPAndroidChart in ein Diagramm überführt werden kann. Der gesamte Vorgang funktioniert dynamisch, d.h. es können während der Programmlaufzeit Daten generiert, gelöscht und in das Diagramm gezeichnet werden.