Startseite

MyPersonalBodyTrainer

„Dein ganz persönlicher Trainer auf dem Smartphone!“

 

  • Live-Tracking der Übungen
  • Fehlererkennung & Korrekturhinweise
  • Stoppuhr-Funktion für einen intensiveren Muskelaufbau
  • Zähler für Wiederholungen und Sets
  • Waage-Funktion für Hantel-Übungen

MyPersonalBodyTrainer

 

Was ist MyPersonalBodyTrainer

MyPersonalBodyTrainer ist eine Smartphone Applikation, die Fitnessbegeisterte beim Muskelaufbau unterstützt. Das Smartphone muss lediglich auf die Hantel oder andere Fitnessgeräte befestigt werden. Nachdem die App gestartet wurde wählt man in seinem Profil die Übungsausführung aus und die App gibt die Einweisungen dazu. Dabei bewacht die Applikation die Bewegungen des Athleten wie z.B. beim Bankdrucken und macht auf Fehler wie z.B. falsche Übungsausführung, Haltung so wie auch die Schnelligkeit aufmerksam.

 

Was unterscheidet MyPersonalBodyTrainer von den „Anderen“?
Viele der heutigen Fitness-Apps zeigen dem Athleten wie die Übungsausführung auszusehen hat und wie lange diese Übung bzw. Pausen dauern sollen. Es wird so zu sagen davon ausgegangen, dass der Athlet die Übung korrekt ausführt. Der MyPersonalBodyTrainer unterstützt den Athleten aktiv bei der Übungsausführung. So kann der Athlet „live“ seine Übungsausführung korrigieren lassen und somit sein Muskelaufbau-Ergebnis verbessern. Die Bewegungsgeschwindigkeit wird gemessen, da man nur durch die zeitgerechte Bewegung eines Gewichtes effektiv Muskeln aufbauen kann. Um eine richtige Bewegungsgeschwindigkeit gewährleisten zu können, wird der Athlet mittels visuelle Einblendungen aufmerksam gemacht, falls er zu schnell oder zu langsam mit der Ausführung ist.

 

Welche Features bietet MyPersonalBodyTrainer noch?

  • Live-Tracking der Übungen
  • Fehlererkennung & Korrekturhinweise
  • Stoppuhr-Funktion für einen intensiveren Muskelaufbau
  • Zähler für Wiederholungen und Sets
  • Waage-Funktion für Hantel-Übungen

Prozessablauf

  • Sensordaten
    • Die Sensordaten sind ungefilterte Beschleunigungswerte, welche direkt vom Beschleunigungssensor des Smartphones erfasst werden.
  • Filterung
    • Die ungefilterten Beschleunigsdaten werden gefiltert, verarbeitet und an den Klassifizierer übergeben.
  • Klassifizierer 
    • Der Klassifizierer bekommt die gefilterten Daten und gibt dementsprechend ein Label aus (Aufwärtsbewegung, Abwärtsbewegung, etc.).
  • Auswertung
    • Das Label vom Klassifizierer wird mit einem selbstentwickelten Algorithmus ausgewertet (richtig/falsch).
  • Ausgabe
    • Das Ergebnis wird in der App als Hinweis/Warnung bei einer falschen Übungsausführung ausgegeben.

Umsetzung des Projekts

Der Klassifizierer

Der Klassifizierer ist ein Modell, welches Input-Daten in vorher festgelegten Klassen einteilt. Dieser muss aber vorher mit, bereits vorhandenen Trainingsdaten erstellt werden. Beim Training dieses Klassifizierens mussten wir festlegen welche Trainingsdaten wir verwenden und wie wir diese Trainingsdaten aufteilen.

 

Eine Bewegung kann man mittels neuronale Netze oder Klassifizieren gelöst werden:

  • Neuronale Netze
    • Aufwändig
    • langsam beim Erkennen
    • für komplexe Erkennung Systeme geeignet
    • hohe rechen Leistung für das Training und die Erkennung
  • Klassifizierer
    • einfaches Training
    • etwas schlechtere Erkennung
    • schnell
    • Ressourcen sparend
    • für einfache Erkennung geeignet

Training & Verifikation

DATA-MINING-APP
Zum Training des Klassifizierers wurde natürlich eine große Anzahl von Trainingsdaten benötigt.

Da bei der zu Beginn verwendeten App „SensorMax“ das Speichern eher umständlich ist und die Daten in einem falschen Format abgespeichert wurden wurde kurzerhand eine eigene „DataMining“ App implementiert.

Die Funktion dieser App beschränkt sich auf ein simples Auslesen und speichern der Sensorwerte des Linearen Beschleuningungssensors.

Nach dem Drücken des Startbuttons werden die Sensorwerte ausgelesen und intern gepuffert für jeden Sensorwert wird zusätzlich ein Label gespeichert, das über den Label-Button erhöht wird (c0-cN).

Nach dem stoppen der Messung kann der gemessene Buffer gespeichert werden. Dabei wird der angegebene Name plus einer fortlaufenden Nummer um das Überschreiben zu verhindern vergeben.

Die Buttons sind sehr groß gestaltet, damit das betätigen während dem Daten Sammeln möglichst einfach ist, jedoch wird trotzdem ein Partner benötigt, der die App bedient.

Aufbereitung von Trainingsdaten

Die von der App erhaltenen Daten sind durch den Sensor stark verrauscht und scheinen unregelmäßig.

Jedoch lässt sich, nach der Filterung mit einem Tiefpass ein Muster erkennen.

Man erkennt zu Beginn ein rasches ansteigen der Beschleunigung, dass nach einem Höhepunkt wieder zu einem lokalen Minimum abfällt, das betragsmäßig gleich groß, aber negativ ist, bevor die Werte sich um den Nullpunkt einpegeln.

Dies beschreibt die Aufwärtsbewegung. Die Integrale beider Peaks muss addiert null ergeben, da der positive Peak die Aufwärtsbeschleunigung beschreibt und der negative Peak das Bremsen jener Bewegung.

Die zweite Hälfte der Bewegung, also die Abwärtsbewegung ist genau gespiegelt: Zuerst ein beschleunigen nach unten, mit negativen Werten und ein abbremsen mit positiven Werten.

Diese Bereiche werden an den gemeinsamen Steigungen von c0 bis c4 mit Labeln versehen.

Training des Klassifizierers im MATLAB

Der Klassifizierer wird im MATLAB mit dem „Classification-Learner“ mit 80% der Trainingsdaten trainiert. Die restlichen 20% werden für die Verifikation aufbehalten.

Verifikation des Klassifizierers

Der erstellte Klassifizierer wird in mehreren Stufen getestet. Der erste Test erfolgt direkt in Matlab.

Hierbei werden segmentierte Daten dem Klassifizierer übergeben und die Ergebnisse mit den, von Hand erstellten Labeln verglichen und die Präzision und Genauigkeit bestimmt.

Für die Zweite Stufe werden über die App „HyperIMU“ Sensordaten vom Handy über UDP auf den PC gestreamt und über ein Python Script in Matlab importiert und dem Klassifizierer übergeben.

Beim letzten Test wird der Klassifizierer aus Matlab in C-Code exportiert und in einer „Test-App“ mittels JNI und Cmake integriert.

Die App liest nur den Sensor aus, übergibt die Werte an den Klassifizierer und gibt das erhaltene Label aus.

Export & App-Integration

Der im MATLAB trainierte Klassifizierer mit den Algorithmen für die Filterung sowie auch die Auswertungen werden mittels „MATLAB Coder“ in C-Code exportiert.
Die exportierten C-Codes werden mit einer C++-Wrapper-Klasse mittels Java Native Interface in die MyPersonalBodytrainer-App integriert.

Die App

Die App besitzt einen vereinfachten Homescreen, da durch Ausfall eines Teammitglieds das Design grundlegend vereinfacht werden musste.

Hier kann man eine Aktivität (aktuell nur Bankdrücken) starten, den Verlauf aller Aktivitäten aufrufen oder die App kalibrieren.

Für den Kalibriervorgang wird das Handy auf die ruhig liegende Hantel montiert und der Kalibriervorgang gestartet. Dann darf das Gerät bis die Meldung „File gespeichert“ erscheint nicht bewegt werden.

 

 

Durch Drücken des Bankdrücken-Buttons kommt man auf den Aktivitäts-Screen:

Erst nach Eingabe des verwendeten Gewichts kann die Aktivität gestartet werden.

 

 

 

 

.

 

Mittels des Dreh-Buttons links oben kann man zwischen Hoch- und Querformat umschalten. Die automatische Drehung der Anzeige wurde komplett blockiert um nicht durch einen drehenden Bildschirm abgelenkt zu werden.

Die Wasserwaage (waagrechter Balken) zeigt ob die Aktivität sauber ausgeführt wird. Der Tacho sollte die Geschwindigkeit auswerten, zeigt jedoch aktuell ebenfalls die Abweichung in Grad, da für die sinnvolle Auswertung der Geschwindigkeit die aktuelle Bewegungsphase bekannt sein muss, was aktuell nicht gegeben ist.

Die SET-Taste ermöglicht es das aktuelle Set weiterzuschalten, auch wenn nicht alle Wiederholungen („Reps“) des aktuellen Sets ausgeführt wurden. Um die App auch ohne automatischer Erkennung verwendbar zu machen wurde die Funktion aktuell so festgelegt, dass ein kurzes Tippen die Anzahl der Wiederholungen inkrementiert, eine langes Drücken jedoch die alte Funktion beibehält.

 

Wenn die maximale Anzahl des aktuellen Sets erreicht ist wird das Set weitergeschalten – hier informiert ein Popup, dass man eine Pause einlegen sollte. Das Popup verschwindet bei einer automatischen Weiterschaltung automatisch nach 5 Sekunden wieder, bei manuellem Weiterschalten muss man es jedoch selber weiterdrücken.  Das Popup besitzt einen Schalter zum Abbrechen der Pause und einen „Notausgang“ zum Beenden der Aktivität.

 

 

Über die oberen Balken sieht man jederzeit welche Sets bereits ausgeführt wurden und ob alle Wiederholungen davon ausgeführt wurden. Im Bild wurde z.B. im 4. Set nach wenigen Bewegungen aufgegeben. Dafür wurde jedoch die Funktion des letzten Sets ausgenutzt, welche es erlaubt über die festgelegte Anzahl hinaus zu trainieren.

Mit einem Klick auf STOP kann man die Aktivität jederzeit beenden. Die PAUSE-Taste ermöglicht es auch während des Sets zu pausieren wenn es unbedingt nötig ist.

Beim Starten und Stoppen und bei groben Fehlern (starke Neigung) wird ein Vibrationsalarm ausgelöst. Auf akustisches Feedback wurde verzichtet um nicht im Fitnessstudio andere Leute zu stören.

Zurück im Menü kann man den Verlauf der Aktivitäten anzeigen lassen:

Diese Liste zeigt alle Aktivitäten an. Hier wird bereits die Art, Datum, Uhrzeit, Dauer und die Anzahl der Wiederholungen und Sets angezeigt.

Durch ein langes Drücken eines Items kann diese Aktivität aus dem Speicher des Smartphones gelöscht werden.

Ein kurzes Drücken öffnet die gewählte Aktivität und zeigt Details an. (Hier wurde die oberste Aktivität ausgewählt.)

 

 

Der Aktivitäts-Detail-Screen kann gescrollt werden und zeigt:

  • Art der Aktivität
  • genaues Datum und Uhrzeit
  • Dauer der Aktivität in Stunden, Minuten, Sekunden und Millisekunden
  • Verwendetes Gewicht
  • Anzahl der ausgeführten Sets
  • Anzahl der Wiederholungen laut Trainingsplan
  • Anzahl der wirklich ausgeführten Wiederholungen
  • Die Sets und Reps als Balkendiagramme mit Beschriftung
  • Ein Chart der Beschleunigung/Bewegung
  • Ein Chart der Stabilität in Grad

Die Charts können gezoomt werden und einzelne Werte ausgelesen werden.

Ergebnisse

Der Klassifizierer

Der SVM-Klassifizierer hat eine Erkennungsrate von 91,4%. Bei der MATLAB Verifizierung konnte man deutlich erkennen, wie gut der Algorithmus funktioniert. Jedoch brauchen wir sehr viel mehr Trainingsdaten die sauber und korrekt ausgeführt und richtig gelabelt sind, um die Erkennungsrate noch mehr zu erhöhen.

Die App

Die Funktionen der Applikation funktionieren alle Ordnungsgemäß. Bei der Exportierung des C-Codes und bei der App-Integration ist es uns allerdings nicht gelungen, den Algorithmus 100% korrekt auf dem Smartphone zum Laufen zu bringen.