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.


 

Sonntag, 8. November 2015

Auslesen aller Sensordaten

Mithilfe eines µC (Atmega 168PA) wird das LSM9DS0 Sensorpaket, das zwei Sensoren, nämlich ein Magnetometer samt Accelerometer und ein Gyroskop enthält, über eine I2C-Verbindung so gesteuert, dass die x,y und z Daten der einzelnen Messinstrumente in Registern gespeichert werden und sich erst dann aktualisieren wenn der jeweilige Wert aus dem Register ausgelesen wird.
Anschließend wird dieser Wert in einem Array gespeichert und über UART an einen PC gesendet (siehe Blogeintrag vom 16.10.2015) um ihn am Bildschirm mittels eines Hyperterminals auszugeben.
Die Daten die dort ausgegeben werden sind noch Rohdaten, die erst in gängige Einheiten umgerechnet werden müssen. Dieser Vorgang wird dann in einem größeren µC (BµC) stattfinden.
Die Umrechnungsfaktoren der Rohwerte in gängie Einheiten, lassen sich aus dem Datenblatt des Sensors entnehmen und hängen von der eingestellten Skala für den Aufnahmebereich der Messwerte (full scale) ab.

Hyperterminal Ausgabe
Auszug aus dem Datenblatt mit Umrechnungsfaktoren

Freitag, 16. Oktober 2015

LSM9DS0 - Beschleunigunssensor, Magnetometer, Gyroskop

Heute sind endlich unsere LSM9DS0 Break-out-Boards aus den USA eingetroffen. Somit konnten wir unsere bereits geschriebene Software testen. Dazu wurde folgender Testaufbau verwendet:

In der Mitte befindet sich der Mikrocontroller der für das Auslesen des Sensors und das Senden der Daten an eine UART Schnittstelle zuständig ist. Darunter befindet sich ein MAX232 Pegelwandler für die UART Schnittstelle. Die runde Platine links Trägt den Sensor, dieser ist bereits fertig beschaltet und nur die Versorgungsspannung und die I2C-Schnittstelle sind herausgeführt. Der Sensor wird mit 3,3V von der Mikrocontroller-Platine versorgt. 
Die erhaltenen Daten werden mittels UART an einen PC gesendet wo sie als CSV Datei gespeichert werden. 
Daten im Hyperterminal



Dienstag, 6. Oktober 2015

Platzierung der FSR´s

FSR Platzierung mit Kabelfarben für Ferse
Aufgrund des bei relativ kleinem Druck schnell erreichten Vollausschlags auf der Ferse, überlegten wir uns, in diesem Bereich drei kleinere Sensoren dreiecksförmig zu platzieren, um bessere Ergebnisse erzielen zu und evtl. auch die Schräglage des Fußes beim Auftreten auf den Boden erfassen zu können.

Freitag, 25. September 2015

FSR's im Turnschuh

Heute haben wir uns weiter mit FSR Sensoren beschäftigt. Es wurden 2 kleine Sensoren an den beiden Ballen platziert und ein etwas größerer an der Ferse, die Sensoren wurden mit Klebeband beferstigt.
Einlegesohle mit festgeklebten Sensoren

Zur Messung wurde wieder ein Spannungsteiler und ein Oszilloskop im Roll-Modus verwendet. Um alle drei Sensoren gleichzeitig auswerten zu können wurden zwei Oszilloskope gleichzeitig verwendet. Hier die Messschaltung:
Hier noch einige Fotos zum Messaufbau und zu den Ergebnissen.

Die Sensoren im Schuh eingebaut mit einer Anschlussplatine vorne.
Links sind die zwei Sensoren an den Ballen, rechts der an der Ferse zu sehen.
Bei den Messungen haben wir festgestellt, dass der Sensor an der Ferse durch seine Größe zu viel Druck abbekommt und dadurch auch im Ruhezustand fast vollständig ausschlägt. Es ist geplant diesen Sensor an der Ferse durch 3 kleine wie an den Ballen zu ersetzen.

Sensoren zur Auswertung der Fußbewegung

FLORA 9-DOF (Breakout-Ausführung des Sensorchips)
Auszug aus dem Datenblatt des LSM9DS0
Im Laufe des heutigen Tages entschieden wir uns dazu, dass es an der Zeit wäre, geeignete Sensoren für unsere Schuhe zu finden und zu bestellen. Wir hatten uns bereits im Vorhinein eingehend mit für unsere Anwendung geeignete Sensoren beschäftigt und besaßen dadurch Kenntnis über die Arten von Sensoren die wir benötigen würden. Ein Accelerometer, um die Beschleunigung zu messen, ein Gyroskop um die Ausrichtung des Fußes zu erfassen und optional ein Magnetometer, um zu erkennen in welche der 4 Himmelsrichtungen der Läufer sich gerade bewegt. Mit Hilfe dieser Suchkriterien stießen wir auf einen Sensorchip namens LSM9DS0, der alle 3 Sensoren vereint und somit perfekt für unsere Anwendung geeignet ist. Wir bestellten diesen als Breakout-Ausführung, also bereits auf einem Board aufgebaut bei Adafruit.com.

Schichtenmodell der Datenverarbeitung und Hardware Platzierung

Schema der Datenverarbeitung und der Hardware Platzierung
Letzte Woche machten wir uns erste (bzw. zweite) Gedanken über die Platzierung der Sensorik, der Speichereinheiten und der Stromversorgung in Form eines Akku-Packs. Weiteres überlegten wir uns ein Übertragungs- bzw Sende- und Verarbeitungsschema. Nach längerer Grübelei, zogen wir in Betracht, die Daten der Sensoren direkt an einen zentralen µC über eine SPI-Verbindung zu schicken, kamen
aber zu dem Schluss, dass eine produktivere Realisierung
für uns, aus der Verwendung eines kleineren Mikrocontrollers (liebevoll LµC für little µC) als Zwischenspeicher und Sammelstelle hervor geht. An diesem sollen die Rohdaten der Sensoren bis zu einer gewissen Größe gesammelt und danach in Päckchen über SPI an einen leistungsfähigeren Mikrocontroller (BµC für Big µC) gesendet werden. Dieser verarbeitet und verwertet die Daten und sendet diese an ein Endgerät (Smartphone), wo abschließende Berechnungen und die Visualisierung erfolgen.
Geordnet, kam aus diesen Gedanken, das rechts oben zu findende Bild hervor.

Donnerstag, 24. September 2015

Wahl der Entwicklungsumgebung für die App

Für die Entwicklung der App standen 3 Entwicklungsumgebungen (Eclipse, Netbeans, Android Studio) zur Auswahl. Ich informierte mich ausführlich über die Vor- und Nachteile der einzelnen Umgebungen und entschied mich für Android Studio. Eclipse wurde zwar oft als das mächtigste der drei Programme bezeichnet, Android Studio überzeugte aber mit dem integrierten XML-Designer und dem simplen, auf Android abgestimmten, Aufbau.
Derzeit arbeite ich mich durch diverse Tutorials um den Umgang mit Android Studio und die Grundlagen der Android-Programmierung zu erlernen.

Mittwoch, 23. September 2015

Erste Versuche mit FSR Drucksensoren

Heute und auch schon letzten Freitag haben wir uns mit FSR (Force Sensing Resistors) Drucksensoren beschäftigt und erste Versuche damit getätigt. Ein FSR verändert seinen Widerstand je nach aufgebrachtem Druck (je mehr Druck desto weniger Widerstand). Grundsätzlich hat dies ganz gut funktioniert, wir hatten allerdings das Problem, dass die Drucksensoren mit zu viel Gewicht belastet werden und somit bei voller Belastung keine Messung des Drucks mehr möglich war. Als Messaufbau verwendeten wir einen simplen Spannungsteiler und ein Oszilloskop im Roll Modus.
Anbei noch einige Bilder zum Ergebnis und dem Messaufbau.

Mittwoch, 15. Juli 2015

Enrollment im Data Mining with Weka Course

Aller Anfang ist schwer, doch mittlerweile ist er geschafft!

org.:https://weka.waikato.ac.nz/dataminingwithweka/course
Nachdem ich bereits letzte Woche in die Youtubevideos des Department of Computer Science Institutes der Waikato Universität geschnuppert habe, bin ich heute darauf gestoßen, dass vor kurzem eine neue Periode des zu den Videos angedachten Kurses begonnen hat. Prompt habe ich mich inskribiert und mit Hilfe der teils bereits zuvor angesehenen Lektionen den ersten Abschnitt beendet.

Generell habe ich einen sehr guten Eindruck vom Kurs und ich erwarte mir schnelle Lernfortschritte.

Samstag, 4. Juli 2015

Blogstart: RIS Projekt

Dieser Blog ist dem Maturaprojekt "Running Information System" von Sebastian Gerner, Gabriel Häusler, Clemens Luger und Gabriel Sitte gewidmet.
Alle Updates rund um den derzeitigen Fortschritt des Projektes werden hier, zur Etablierung einer vollständige Chronik, publiziert.

Jedes Mitgleid des RIS-Teams wird hierbei selbst neueste Entwicklungen posten, um die Aktualität dieses Blogs zu garantieren.